2012-05-10 66 views
30

我是一个典型的Eclipse/Subversion用户,开始迁移到Git。我研究了git的基本概念,并决定坚持每个存储库方法一个项目,以保持简单。然而,我仍然遇到麻烦,决定为每个项目放置存储库的位置。将Eclipse工作区内部或外部的Git存储库保存好会更好吗?

我花了很多时间来回顾this question的答案,尽管我相信这个问题的作者假定如果存储库位于Eclipse工作区内,则只能使用Eclipse来管理存储库,当然,这不是事实。然而,除了一个答案(包括被接受的答案)之外,所有的答案都建议将库保存在Eclipse工作区内,而只有一个答案指出EGit User Guide建议完全相反。然而,在实践中会出现一些由Eclipse/EGit实现的方法,其中一些似乎与EGit的建议相矛盾。例如,如果您使用新建项目向导从Git创建新的PHP项目并且存储库是远程的,那么Eclipse/EGit会在Eclipse工作区中愉快地创建一个项目文件夹,并将存储库(.git)放入项目文件夹。这是我真正想要的最终结果,因为它将封装在Eclipse工作区中的所有内容都保留下来。但是,如果使用新建项目向导并选择本地的Git存储库,那么Eclipse/EGit不会像处理远程存储库一样克隆存储库。相反,它使用该存储库的工作副本作为项目位置,在该位置创建.project和其他元素,并在该工作副本中创建一个新的(看似不必要的)文件夹,其名称与您的项目名称相同(因此您结束举例来说,例如,~/git/blah/blah)。如果删除了多余的文件夹,则最终的结构与第一个示例相同,唯一的区别是项目文件夹不是Eclipse工作区文件夹的子文件夹,它位于文件系统的其他位置(例如。~/git/blah)。这种方法似乎唯一有利的一点是它遵循EGit用户指南中的建议,但从技术角度来看,它很难看出这与第一个例子是如何不同的。

鉴于这些令人费解的观察结果,我想知道人们使用这些方法的经验是什么,以及如果忽略EGit用户指南中的建议,可能会出现什么样的错误。

+0

可能重复的[我应该存储在家庭或Eclipse工作区的git存储库?](http://stackoverflow.com/questions/7685246/should-i-store-git-repository-in-home-or-eclipse-工作区) – mallardz

+0

@JamesG你采取什么方法来反映工作区中的变化到你的git目录?有没有更好的选择来复制粘贴源代码? –

+0

我不再使用Eclipse - 我使用PHPStorm - 所以我只是克隆到一个项目文件夹,然后开始在那里工作。我不认为PHPStorm甚至提供了将存储库存储到项目的不同文件夹中的选项。老实说,根据我四年前发布这个问题后听到和读到的内容,我认为很多人不会再将他们的存储库存储在项目文件夹之外。 – JamesG

回答

17

这两种解决方案的含义都直接列在您链接的用户指南中。我可以告诉你的是,部分

这可能会导致性能问题

是不幸的是非常真实的。因此,如果你的工作区内有一个git目录,其中包含大量文件,许多git操作将以“计数对象...”对话框开始,该对话框会阻止你的IDE,因为它会扫描工作区中的所有文件。对于我当前的20000个文件,这意味着等待每个提交10到20秒,每个开关......

在业余时间活动中,我可以幸运地使用其他替代方案(让git工作目录在工作区之外)感觉更快捷,合并和切换很有趣。

因此,如果您选择大型项目,请考虑将工作空间之外的git目录作为第一选择。

+0

我将添加Eclipse和EGit自己设置自己的工作空间外使用他们的git回购,它一直工作正常。 –

+3

@Bananeweizen你提到你已经尝试在工作空间之外拥有git工作目录,并且一切都变得更加快乐。是你的大型(20,000文件)项目还是小型沙箱项目进行的其中一项实验?也就是说,你能否明确地说20,000文件项目在工作区外工作得更顺利? – JamesG

+0

@Bananeweizen你是否只是将一切拷贝到另一个目录,然后在做git add之前将它拷贝回存储库? –

3

我做同样的迁移与原始海报,发现那里同样的疑惑是在例如:It建议表示另一个线程:Should I store git repository in Home or Eclipse Workspace?

@JamesG 因此,这是你的布局?

~/projectA/workspace/.metadata 
~/projectA/workspace/subproj1/.project 
~/projectA/workspace/subproj2/.project 
~/projectA/subproj1/.git 
~/projectA/subproj1/file1 
~/projectA/subproj2/.git 
~/projectA/subproj1/file2 
+0

感谢您链接到该帖子。它在一个git存储库中有多个项目与每个存储库有一个项目有很大的区别。如果为前者做准备,那么我同意把repo放在工作区中是没有意义的,因为那时.git目录与项目的级别相同,这对我来说只是一种错误。就我而言,我有决定回购结构的好处,所以我决定每个项目有一个回购,所以每个Eclipse项目都是回购的克隆。这种方法对我来说工作得很好,即使对于大型项目(例如ZF2)也是如此。 – JamesG

5

为什么不只是允许2种可能性。

对于在.metadata文件夹中生成许多文件的大项目,我很好。 即使将.metadata行放在.gitignore中以便改善性能非常简单。

但在我的情况(Android开发)中,我有大约35个仅包含50个文件的不同项目。

所有这些项目都在不同的崇拜包含应用程序项目和这个应用程序的库项目。 (每个应用程序的一个子模块库)

  • 我必须只有一个工作区用我所有的内部项目(花费时间 滚动/关闭/打开项目在Package Explorer)?

  • 我必须管理2个不同的基础文件夹(Projects和Worskspaces),最后一个文件夹只包含我所有项目的.metadatas文件夹吗?

对我来说这没有意义。

发信息给球队例如:It:

为什么改变了开发商的方式通常是组织自己的项目文件夹:

---- Worspace

---- Worspace/.metada

----- Worspace/.git

----- Worspace/Project1

----- Worspace/LibraryProject1

----- Worspace/LibraryProject2

我才明白性能原因,但具有非常大的项目,开发商只有5%(产生大.metadata)你不能让我们像Eclipse一样告诉我们自从几年以来完成我们的项目。

你能不能,即使一个消息警告我们,就是它的不推荐,不阻止克隆过程中对worspace文件夹(“C:\ Worspaces \不是一个空目录”)

例如:It是一个伟大的工具,但我真的想使用Bash的方式,因为这种限制。

感谢您的回复

PS:有Eclipse的下研究与开发的许多不同的情况。 如果这只是一个性能问题,如果它不会导致EGit崩溃,请仅仅警告我们,但不要在小项目中阻止我们。

+1

我同意。 EGit插件运行良好,但这是一个很大的建筑缺陷。它打破了我的工作区自动化,不幸的是阻止我切换到使用git。 –

相关问题