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

时间:2009-05-29 18:43:48

标签: 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开发

11 个答案:

答案 0 :(得分:23)

我可以给你三个好处:

  1. 您可以拥有多个备份存储库。 Git不是集中式的,因此您可以将您的仓库保留在您正在处理的任何计算机上,并将更改推送到您拥有的任何备份位置。我将我的回购邮件保留在github和其他两个位置。
  2. 分支,合并,重新定位,修改提交,git bisect。仅仅因为你是一个单独的开发者,没有理由不使用最好的工具。
  3. git-svn - 你可以尝试与你的subversion repos并行尝试,同时让你的想法。
  4. 有一个缺点;这就是Windows上可用的可视化工具不像其他平台可用的那些用户友好。

答案 1 :(得分: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做同样的事情,在你开始疯狂的想法之前恢复到修订版。但是,如果你同时修复了错误修复怎么办?如果你恢复了疯狂的想法,你将失去在尝试疯狂想法时所做的所有错误修复/维护工作。

答案 2 :(得分:15)

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

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

答案 3 :(得分: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使这样的工作流程更容易。

答案 4 :(得分:5)

我在Windows下使用Visual Studio 2008以

描述的方式使用了这些系统
  • Visual Source Safe
  • 的Subversion
  • 水银
  • GIT中

如果你重视自己的生活, 永远使用Visual Source Safe ......

的Subversion

  • 优点:服务器和客户端都有出色的工具。 VisualSVNTortoiseSVN
  • 缺点:它不能很好地处理合并事宜。

GIT中

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

水银

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

答案 5 :(得分:4)

Git可能引人注目的一件事是你可以继续工作并离线提交。所以,当你在飞机上时,带上你的笔记本电脑并照常提交。当您重新上线时,您可以回到主仓库。

如果你发现你做了大量的分支,你可能会更喜欢Git,因为它的设计是为了使分支/合并变得简单和普通。

更新:请注意,您可以在不承诺的情况下测试Git,因为Git can talk to SVN repos。所以试一试,如果你不喜欢它,什么都不会丢失!

答案 6 :(得分:3)

试试吧,安装msysgit,然后

git svn clone svn://mysvn/repo/

Git for beginners: The definitive practical guide中的部分资源应该有所帮助(GitcastsGit Magic尤其如此)

就个人而言,我发现一般情况下使用git更加愉快。大约两年前我将我的个人SVN回购转换为git,并且从来没有遇到任何问题

不必担心您的SVN服务器很好(不需要对它进行持续的网络访问),因此能够轻松创建存储库(它们只是包含另一个.git文件夹的文件夹),执行任何操作(提交,分支等),然后决定用一两个简单的命令将代码放在Github上。

它通常很“快速”(几乎所有动作基本上都是即时的),一切都在“离线”,克隆是完整备份......但我继续使用它的主要原因是Github

答案 7 :(得分:2)

没有。至少不适合我。为单个开发人员提供非集中式回购有什么意义?

此外,Git Windows工具还不太适合TortoiseSVN吧。

答案 8 :(得分:1)

看看Bazaar(bzr)。说真的,这太棒了。我见过的最佳合并能力。

答案 9 :(得分:1)

前段时间我从svn转到Git。我同意上面几个关于Git分布式架构优于svn的优点的答案(比如能够在我的记事本上随身携带我的回购),但令人信服的理由更为平凡。

  • Svn非常麻烦,它把他的东西(.svn文件夹)放在各处。这使得很难在.svn存储库上使用常见的命令行工具,如grep(和许多其他命令行)。在我的项目中,我还有一些安装过程需要将完整的资源树复制到某个系统路径。使用svn时我必须编写额外的代码(或导出存储库),以避免我的安装过程也复制.svn。使用Git,这种问题完全消失了。全部位于存储库根目录的一个 .git目录中。

现在(2013年2月)根文件夹中只有一个.svn文件夹!

  • 我在Linux上使用svn客户端遇到了一些不好的经历,看似简单的操作,比如移动文件然后在使用100%CPU提交系统挂起之前修改它! (不,它不是导致崩溃的其他因素,我可以随意重复它)。从未在Git工具中遇到过这样的问题。

  • 我在旧的svn存储库中的trunk和stable分支之间合并代码也有些糟糕的时间。 Git真的很容易。

现在,我采取了这一举措,因为我使用svn感觉很糟糕,如果它适合你,那么真的没有迫切的需要改变。程序员的真正任务是使用代码,存储库只是至少不会妨碍他的方式的工具。这就是为什么svn对我不起作用的原因。

答案 10 :(得分:0)

如果您习惯使用Tortoise SVN,那么您应该尝试使用Mercurial,它具有类似shell扩展Tortoise HG的Windows程序包。 Joel Spolsky也在Fog Creek使用Mercurial(根据他在他的一个播客中的说法)。

软件包是完全独立的,我能够立即安装和使用Mercurial(甚至不需要服务器!)