使用它后,你有什么优点和缺点?

时间:2008-12-05 12:32:55

标签: git version-control

我现在正在使用SVN,过去我曾使用过CVS和VSS。 SVN是我书中最喜欢的,但我听说过很多关于git的内容。在使用git的人中,你的经历有哪些优点和缺点?

13 个答案:

答案 0 :(得分:28)

我对git没有很多的经验,但是:

优点:

  • 这很快
  • 本地提交摇滚
  • 快速启动新存储库(无配置等)
  • github易于使用

(除了能够拥有本地存储库并推送到公共存储库之外,我还没有真正“需要”事物的分布式方面。)

缺点:

  • Windows支持仍然落后,我相信 - 你不能只是从正常的命令提示符使用它
  • 缺乏IDE和资源管理器集成
  • 我花了一些时间在红豆书上找到good introductory text
  • “添加”已更改文件的事实只会在该时间点添加内容(因此它可以显示为提交的暂存状态,而仍然需要另一个git add的修改)花了一些时间来掌握

答案 1 :(得分:19)

命令数量

虽然svn和其他现代VCS(如hg或其他)是很好且有用的工具,但git是一个装满机床的商店。这同时兼顾了pro和con。虽然svn有30个命令(根据'svn help'),但是git发布了130个手册页,每个手册页或多或少都描述了一个命令。其中一个原因是git暴露了大多数用户作为命令行工具所需的低级功能。但即使没有那些低级命令,git也会提供许多非常强大的工具,而且在我认识的任何其他VCS中都找不到(请参阅git-bisectgit-filter-branchgit-cherrygit-reset例子)。虽然掌握这些工具非常有帮助,但是初学者很难理解他们需要知道哪些命令,哪些命令不知道。


开发模式

类似的主题是git足以支持非常不同的操作模式。这使得初学者很难,因为没有真正的“最佳实践”文档,因为最佳实践不是构建到git中。所以你必须自己决定是否

  • 只需使用合并以避免与您的工作目录冲突
  • 使用重组为上游HEAD的私有分支
  • 使用上游分支
    • 定期合并(飞鱼)
    • 完成后合并
  • 使用一个项目维护者,树维护者,子系统维护者,驱动程序维护者和贡献者的树,每个级别从下面的级别拉动补丁(linux内核)

由于您拥有本地存储库,您甚至可以使用与您正在处理的项目完全不同的操作模式,并在推送/发布之前调整更改集。


更改路径

根据您的观点,另一个也算作pro和con的事情是使用git比使用任何集中式VCS更复杂,甚至更复杂的大多数其他分布式VCS。

使用集中式VCS,您通常只需执行提交,并且您所做的更改将转到存储库。在git中,更改可以在最终到达最终目标之前经过相当多的步骤。典型的步骤是(括号中不常见的步骤):

  • 工作目录(编辑)
  • 索引也称为临时区域(git add)
  • 本地存储库(git commit)
  • (其他本地分支机构)(git rebase,git cherry-pick,git merge)
  • (子维护者的存储库)(git push,git pull,mail)
  • 上游存储库(git push,git pull,mail)

由于您可以跳过索引,因此至少涉及2个步骤,但通常还有更多步骤。这需要更深入地了解您正在做什么并输入更多命令。另一方面,这使您可以控制每个步骤。你可以

  • 决定哪些junks / lines进入提交,哪些不是
  • 决定您在哪个本地分支机构中需要哪些补丁
  • 决定发布哪些补丁
  • 返工,压缩,修复,拆分,重新排序补丁,然后再发布
  • 决定自己信任哪些人并接受来自
  • 的补丁
  • 将项目的一部分委托给您信任的其他维护者。

所有这些权力和决定使初学者难以开始使用git。一旦掌握,他们就可以对代码进行巨大的控制。


写入权限

任何分布式VCS的一个主要专业人员是贡献者不需要写访问权来从VCS中受益。每个具有读访问权限的人都可以克隆存储库,在必要时创建分支并开始堆叠放置补丁集。在没有写访问权限的情况下使用cvs真的很痛苦 - 使用git,获取补丁的方式并没有太大的不同。 这不仅是技术优势,而且还可以节省复杂的讨论,无论这个noobie是否应该真正获得写访问权。

答案 2 :(得分:11)

临:

  • 快 - 非常快。
  • 与SVN
  • 相比,创建新的回购非常容易
  • 完整的repo只包含在一个.git文件夹中 - 它不会在你的代码的每个文件夹中添加.SVN文件夹(不是什么大不了的,但我喜欢它)。
  • 分支更容易
  • GitHub的<!/ LI>

缺点:

  • 无法签出存储库的一部分(只有一个文件夹或只有一个文件)
  • 不跟踪空文件夹
  • 糟糕的Windows支持(不会打扰我 - 我使用Linux)
  • 我还没有为Git找到一个好的GUI工具(我使用KDESVN作为SVN)。如果您对CLI感到满意,这不是一个大问题。

答案 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)

其他考虑因素:

优点:

  • 灵活:不强制执行一个真正的工作流程
  • 如此之快,版本控制成为次要任务
  • 轻量级分支,易于合并和临时区域允许个性化工作流程
  • 更强大
  • 非常紧凑的回购

缺点:

  • 没有内置访问控制
  • 二进制文件的弱工具。不会在repo中压缩对二进制文件的更改并存储二进制文件会阻止在Windows中自动处理行结尾。
  • 可能更难学,因为它更灵活,更强大。并不总是遵循CVS / SVN语义,也不是围绕文件组织的。

答案 9 :(得分:2)

最新版本的Git可以直接在Window'命令提示符下工作,这就是我使用它的方式。对我来说,这个过程相当简单。

我也在外置硬盘和我的jumpdrive上安装了Git。每当在新计算机上,我运行一个脚本,暂时设置路径以包含Git的工具。然后你可以继续开发!

答案 10 :(得分:1)

很棒的问题,我已经使用SVN很长一段时间了,并且觉得很舒服。但我不得不使用Git几次从不同的开源项目中获取源代码。我还没有花时间真正了解它。值得吗?

我还想问一下将普通VCS的分布式版本控制用作subversion有什么好处。

答案 11 :(得分:1)

Skeet拥有大部分,但是:

临:

  • 分支!在单独的分支中处理功能块是非常好的,并且仍然能够对它们进行版本控制,而不是在一个分支中进行多项操作。一旦你决定喜欢分支,你就必须喜欢与SVN相比,git是多么容易实现分支

答案 12 :(得分:0)

优点:

  • 上面提到的一切

缺点:

  • Windows中的autocrlf的奇怪行为

  • 无法移动/重命名文件或dir insode repo和kepp其提交历史记录( git mv 只是从repo中删除文件,重命名并再次将其添加到repo,从而丢失所有历史记录)