我现在正在使用SVN,过去我曾使用过CVS和VSS。 SVN是我书中最喜欢的,但我听说过很多关于git的内容。在使用git的人中,你的经历有哪些优点和缺点?
答案 0 :(得分:28)
我对git没有很多的经验,但是:
优点:
(除了能够拥有本地存储库并推送到公共存储库之外,我还没有真正“需要”事物的分布式方面。)
缺点:
git add
的修改)花了一些时间来掌握答案 1 :(得分:19)
命令数量
虽然svn和其他现代VCS(如hg或其他)是很好且有用的工具,但git是一个装满机床的商店。这同时兼顾了pro和con。虽然svn有30个命令(根据'svn help'),但是git发布了130个手册页,每个手册页或多或少都描述了一个命令。其中一个原因是git暴露了大多数用户作为命令行工具所需的低级功能。但即使没有那些低级命令,git也会提供许多非常强大的工具,而且在我认识的任何其他VCS中都找不到(请参阅git-bisect,git-filter-branch,git-cherry或git-reset例子)。虽然掌握这些工具非常有帮助,但是初学者很难理解他们需要知道哪些命令,哪些命令不知道。
开发模式
类似的主题是git足以支持非常不同的操作模式。这使得初学者很难,因为没有真正的“最佳实践”文档,因为最佳实践不是构建到git中。所以你必须自己决定是否
由于您拥有本地存储库,您甚至可以使用与您正在处理的项目完全不同的操作模式,并在推送/发布之前调整更改集。
更改路径
根据您的观点,另一个也算作pro和con的事情是使用git比使用任何集中式VCS更复杂,甚至更复杂的大多数其他分布式VCS。
使用集中式VCS,您通常只需执行提交,并且您所做的更改将转到存储库。在git中,更改可以在最终到达最终目标之前经过相当多的步骤。典型的步骤是(括号中不常见的步骤):
由于您可以跳过索引,因此至少涉及2个步骤,但通常还有更多步骤。这需要更深入地了解您正在做什么并输入更多命令。另一方面,这使您可以控制每个步骤。你可以
所有这些权力和决定使初学者难以开始使用git。一旦掌握,他们就可以对代码进行巨大的控制。
写入权限
任何分布式VCS的一个主要专业人员是贡献者不需要写访问权来从VCS中受益。每个具有读访问权限的人都可以克隆存储库,在必要时创建分支并开始堆叠放置补丁集。在没有写访问权限的情况下使用cvs真的很痛苦 - 使用git,获取补丁的方式并没有太大的不同。 这不仅是技术优势,而且还可以节省复杂的讨论,无论这个noobie是否应该真正获得写访问权。
答案 2 :(得分:11)
临:
缺点:
答案 3 :(得分:10)
许多人会否认这一点,但源代码管理工具的选择会影响您的工作方式。我过去常常使用Subversion工作 - 直到我为我发现了Git。我主要避免在Subversion中进行分支。每当我无法避免它时,我更喜欢设置一个本地镜像(使用svk)。虽然在Subversion和Git中都可以轻松完成分支,但只有Git才能使合并(和变形!)变得有趣,Subversion在合并时间方面一直是一个巨大的痛苦。
我非常喜欢Git的第二件事(除了已经提到的所有要点之外)是“索引”,一个保存下一次提交的暂存区域,以及只添加更改文件的单个块的可能性它。
答案 4 :(得分:9)
Windows支持令人震惊所以我转移到Mercurial,这是另一个同样好的DVCS。
例如,当您在办公室的服务器中有一个存储库并且您正在网站上工作时,DVCS的好处就会变得明显。能够在本地提交而无需访问您的服务器办公室(并在必要时进行此回滚)非常棒!
答案 5 :(得分:6)
答案 6 :(得分:5)
使用git与使用其他版本控制系统非常不同。
拥有本地存储库非常重要。这意味着您可以使用版本控制系统的全部功能(这对git来说很多)而不会打扰任何人。如果您的项目中存在争议性问题,您可以私下处理它 - 通过创建分支,堆叠补丁和抛光它们。这样你就可以带着熨平的补丁套装回来。但即使在“正常操作”中,如果你可以在向公众展示补丁之前清理你的补丁要好得多,事实上,如果你有健全的补丁而不仅仅是“一天结束”快照,那么调试会更容易。
在我提交更大的补丁之前,我通常会对补丁进行重新排序,并将我的新代码上的错误修正直接添加到补丁中。所以补丁看起来像我从未犯过任何错误。之后,我的私人分支在HEAD之上重新定位然后被推送。我通常从不使用合并,因为它只会使历史变得混乱。
简而言之:它可以保持您的历史清洁。
这使您对工作有了截然不同的看法。它允许您将当前状态视为添加单个修补程序,这些修补程序创建的历史记录不仅仅是日志,而是您有意添加的内容。补丁集是您构建应用程序的砖块 - 并在必要时移动到正确的位置。
我永远不会自愿回到我在git之前使用的任何其他版本系统或任何不支持rebase和本地分支和提交的版本控制系统。
答案 7 :(得分:4)
在git中合并要简单得多,因为创建分支是默认选项,而不是额外的选项。因此,当您必须合并某些内容时,您只需提交它,然后合并两个分支(现有的分支和git为您上次签入时自动创建的新分支)。
此外,使用git时,您始终拥有整个存储库。您可以在离线时登记并稍后合并(因为合并更加简单)。
缺点是GIT几乎无法在Windows上的USB驱动器上使用。 Windows禁用这些缓存,GIT可以处理数百万个小文件。此外,IDE支持仍然缺乏。我不确定后者真的是个问题。 GIT附带的UI非常好。
另外,我不是100%高兴你必须一直“添加”现有文件[编辑]和大量的功能。对于初学者来说,他们是压倒性的,而且通常不清楚你为什么要使用某个选项/命令。我的意思是,CVS附带了20个命令。 GIT附带73,每个都有很多选项(而且还不包括管道命令......)。
答案 8 :(得分:3)
其他考虑因素:
优点:
缺点:
答案 9 :(得分:2)
最新版本的Git可以直接在Window'命令提示符下工作,这就是我使用它的方式。对我来说,这个过程相当简单。
我也在外置硬盘和我的jumpdrive上安装了Git。每当在新计算机上,我运行一个脚本,暂时设置路径以包含Git的工具。然后你可以继续开发!
答案 10 :(得分:1)
很棒的问题,我已经使用SVN很长一段时间了,并且觉得很舒服。但我不得不使用Git几次从不同的开源项目中获取源代码。我还没有花时间真正了解它。值得吗?
我还想问一下将普通VCS的分布式版本控制用作subversion有什么好处。
答案 11 :(得分:1)
Skeet拥有大部分,但是:
临:
答案 12 :(得分:0)
优点:
缺点:
Windows中的autocrlf的奇怪行为
无法移动/重命名文件或dir insode repo和kepp其提交历史记录( git mv 只是从repo中删除文件,重命名并再次将其添加到repo,从而丢失所有历史记录)