对于单个开发人员来说,是否值得从SVN转到Git?

Mat*_*ted 25 svn git

---这条线在2013年非常糟糕---

当存储库主要由单个开发人员访问时,是否值得从SVN转到GIT?我有几台机器用于开发,而不是主要用C#开发.但我在我的存储库中混合使用VB,VB.Net,PHP,C#,C++,HTML,Batch,BASH等等.通过从SVN迁移到GIT,我将获得什么?现在使用TortoiseSVN + VisualSVN Server与一组中央存储库和几个客户端机器.虽然我已授予一些朋友访问我的存储库的权限,但他们并不经常更新或提交(如果有的话).

还有一种方法可以使用VisualSVN Server + TortiseSVN和Git获得灵活性和易维护性吗?

((我会咬一口......对于一个开发者/小组来说,其他平台和技巧会引人注目吗?)

请列出优点和缺点,而不仅仅是单方面的意见.

当前工具链... Visual Studio 2008(C#/ VB.Net)+ TortoiseSVN + VisualSVN

主要焦点... XNA游戏,WCF /套接字服务,Web开发

Abi*_*ern 23

我可以给你三个好处:

  1. 您可以拥有多个备份存储库.Git不是集中式的,因此您可以将您的仓库保留在您正在处理的任何计算机上,并将更改推送到您拥有的任何备份位置.我把我的回购保留在github和其他两个地方.
  2. 分支,合并,重新定位,修改提交,git bisect.仅仅因为你是一个单独的开发者,没有理由不使用最好的工具.
  3. git-svn - 你可以尝试与你的subversion repos并行尝试,同时你会想出来.

有一个缺点; 也就是说,Windows上可用的可视化工具不像那些可能用于其他平台的可视化工具那样友好.

  • 1-你也可以用svn做到这一点.只需使用文件系统而不是守护进程.2 - 当您独处时,您不会使用大部分此功能.它们的存在是因为并发性和通信需求.3 - git学习曲线非常简单.这是一个令人难以置信的工具,但花了几天时间来建立环境并学习如何第一次使用它...当你独自一人时,值得尝试吗? (5认同)
  • 好的 我不同意你的意见.我是一个单独的开发者,我一直在分支/改变.而且工具不仅仅是为了使并发成为可能.3.在Windows上,当然.在Mac/Linux上,设置环境是微不足道的.恕我直言 - 值得一提,尤其是作为一名开发人员 - 你不必使用SVN,因为你的团队确实如此.然而; Windows支持很差 - 这是一个因素. (2认同)

has*_*sen 15

当然是.

你误解了git是什么.我的意思是,你为什么认为它只对团队有用?

如果你是一个开发人员,git更值得.

优点:

  • svn要求服务器在后台运行.Git的,另一方面,是一个简单的工具,你只要运行它,就好像你正在运行grepls或任何其他简单的命令行实用程序.您不需要设置任何服务器或类似的东西.
  • .git文件夹是整个存储库,您可以随身携带(例如,在USB记忆棒上),它将始终拥有您的存储库.你的整个回购,以及它的历史,以及其他一切,它实际上压缩得非常好,所以它不占用太多空间.(提示:这就是为什么git不需要服务器;当你运行git命令时,git只是改变了.git文件夹的内部).
  • 分支和合并非常简单.您可以在单独的分支上处理实验性新功能,并且只有在其稳定时才合并.同时,您可以在主分支上进行维护工作(例如,错误修复),同时您可以轻松地将主分支中的错误修复程序合并到您的实验(主题)分支中.
  • 这一点是主观的,但我觉得它比svn容易得多.我尝试使用svn一段时间,但发现它太复杂了,而且常常妨碍我(我不记得那是什么和为什么,我只知道这不是一个愉快的经历).例如,重命名文件不是问题.你可以重命名文件和git不会做任何大惊小怪,它只是不关心文件名.唯一的事情是,你必须记住在重命名后添加它,就好像你创建了一个新文件.

缺点:

  • 没有多少视觉工具.有一个git-gui,它还不错,(我没有太多使用它),但你不想依赖它.您需要习惯从命令行使用它.如果你习惯使用svn的视觉工具,这可能是一个骗局,但在我看来,这里唯一的问题是你必须稍稍离开你的舒适区才能学习它; 但请相信我,这是值得的.
  • 在Windows上可能存在一些关于行结尾的问题,如果你是唯一的开发人员,这不是一个大问题,但如果你是在windows上开发而其他人在linux上开发,你需要确保所有文件都使用unix-样式行结束而不是windows',以避免任何问题.
  • 由于缺乏可视化工具,解决冲突(当它们出现时)起初可能会有些麻烦.我个人使用WinMerge,并winmergeu <conflictfile>在每个冲突文件上调用该命令来解决冲突.(注意:WinMerge不是命令行合并工具,它是一个可视化合并工具,具有正常的gui).
  • 这让我想到了另一点.虽然开始使用git非常容易,但是处理稍后出现的问题(例如解决冲突)可能会有一些学习曲线.如果你不进行分支和合并,那么你甚至不会遇到冲突,但是你也会失去一个非常强大的功能.

更新:

我没注意到你在几台不同的机器上工作.

它没有什么区别,只要你切换到另一台机器就必须记住推拉,但你已经用svn:commit/update做了这个.

你将获得分支/合并的力量.不要低估这种力量.

你有多少次想过实现一些疯狂的想法,但从来不敢这么做因为你不想弄乱你的代码?git让你免于这些烦恼.只是在分支中执行它,如果它运行,将它合并到主分支,如果没有,删除分支并忘记它.

当然,你可能会说你也可以这样做svn revert,在你开始疯狂的想法之前恢复到修订版.但是,如果你同时修复了错误修复怎么办?如果你恢复了疯狂的想法,你将失去在尝试疯狂想法时所做的所有错误修复/维护工作.

  • SVN不需要服务器.我只是用它来从任何地方访问我的respoitoies.您可以轻松地携带SVN存储库(我的大多数存储库都是作为旧Linux服务器上的目录开始生效的,并在我更新到Windows Home Server时被移动到VisualSVN Server).我也没兴趣使用命令行工具来管理我的代码. (5认同)

Mar*_*ini 15

除了已经说过的话,如果你是一个单一的开发人员并且没有遇到过SVN的麻烦,我认为没有理由转换.svnserve(守护进程)在本地工作正常(我有OS X).

与Git工具相比,TortoiseSVN是一种祝福......你有什么特别的理由想要摆脱Subversion吗?

  • 我发布这个问题的原因只是我看到越来越多的人使用Git,我想知道我是否遗漏了任何东西.目前看起来我的损失将超过我的收益. (8认同)

San*_*hal 8

这实际上取决于您的工作流程.你经常在无法到达svn服务器的地方工作吗?你的项目是否有大量的分支,因为你喜欢同时处理几个(大)的事情?你在机器之间复制工作副本吗?你是否从现有的分支机构中拆分了新的分支机构?你有时在后备箱上工作,在一堆变化的中途想到"我应该在一个分支中做到这一点"吗?如果是这样,那么它可能是有用的.

从单一开发人员的角度来看,像svn这样的中央系统和像git这样的分散系统之间的主要区别在于,在svn中,修订是线性的.用git它是一棵树.当您处理要在多次提交中执行的更大功能时,这非常有用.

示例:您有一个很大的功能F,它包含更改a,b,c和d.使用Subversion,您可以在主干上单独提交a,b,c和d,或者您创建一个分支,这意味着您必须进行大量合并.使用git,您可以查看工作副本,提交a,b,c和d.然后你将它作为单个更改F推送给你的主人.因此,您只需在主干上看到一次提交,而不是四次提交.这样可以更容易地从日志中看到发生了什么.

您也可以使用svn分支执行此操作.但现在假设a部分也包含多个部分,如a1和a2.

这种开发模型可以使用Subversion完成.例如,Python Twisted以这种方式完成.所有的开发都是在分支上进行的,没有人在主干上工作.但是git使这样的工作流更容易.


Bry*_*ein 5

我在Windows下使用Visual Studio 2008以您描述的方式使用这些系统:

  • 视觉源安全
  • 颠覆
  • 水银
  • 混帐

如果你珍惜你的生活,不要 永远使用Visual Source Safe中...

颠覆

  • 优点:优秀的工具,无论是在服务器端还是客户端.VisualSVNTortoiseSVN.
  • 缺点:它不能很好地处理合并的事情.

混帐

  • 优点:优秀的合并支持,快速.
  • 缺点:Windows工具几乎不存在,存在的GUI工具非常可怕,我希望我不必再使用它们.(我的看法)

水银

  • 优点:优秀的合并支持,体面的工具.TortoiseHGVisualHG,基于Python的钩子脚本可以用Python编写,直接挂钩到HG api.
  • 缺点:工具与SVN不同.