为什么Git用户说Subversion在本地没有所有源代码?


23

我只是继续阅读关于SO的内容,所以请原谅我,但是我读到的所有内容都表明,与Subversion相比,Git的一个主要优势是Git将所有源代码提供给本地开发人员,而无需在其中做任何事情。服务器。

由于我有限地使用SVN和TortoiseSVN,所以我拥有所有源代码,或者至少我以为自己做到了。例如,我有一个网站。我将其上传到SVN。我仍在本地运行我的网站,不是吗?如果有人提交了更改但我没有连接,则是否拥有Git都没有关系,直到我重新连接到服务器。

我不明白。除了这一点之外,我没有要求对另一种进行重新定义。


2
不是您在本地拥有所有源代码,而是您在本地拥有整个存储库历史记录。这使得除了服务器同步之外的所有存储库交互都更快。
stonemetal 2012年

Answers:


69

您要质疑的前提确实是错误的:

与Subversion相比,Git的一大优势是Git将所有源代码都本地提供给开发人员

通过Subversion和Git,您都可以在本地获取源代码。使用Git,您既有源代码,又有本地计算机上的存储库

它像这样。

颠覆:

您的代码<->存储库

Git:

您的代码<->您的本地存储库<->远程存储库(... <->另一个远程存储库,依此类推)

这种结构的好处是,您仍然可以使用源代码控制并将本地更改提交到本地存储库,而不会影响其他团队成员(与您共享远程存储库)的工作。

使用Subversion,您将不得不冒着破坏他人构建的风险,或遭受长时间的本地开发而没有任何源代码控制的情况,而源代码控制最终导致巨大的提交(或更可能是还原)。

另一方面,使用Git,您可以将这些更改提交到本地存储库,查看日志和差异或您的更改,并且只有在您准备好与团队共享时,才可以从本地推送更改仓库到远程的。


10
这是一个非常不错的答案,并以“ ...有可能破坏他人的构建或在没有任何源代码控制的情况下遭受长期的本地开发风险...”的影响而
深深打动

1
@cspray:谢谢!我敢肯定还有其他好处,但这是我对Svn的最大痛苦。
Goran

git FTW(还有8个...)
Trevor Boyd Smith

2
@DanNeely:确实如此-OP询问了他在某处阅读的声明,答案是这根本不对(请参阅我的答案的第一部分)。第二部分只是对提出索赔的人可能想说什么以及原因的解释。
Goran Jovic 2012年

1
@Giorgio:尝试一下,您会知道:)严重的是,我认为我没有设法做到这一点(除了进行完全手动的合并之外,这有损于工具的目的)
Goran Jovic 2012年

17

Git或Mercurial将您的整个存储库以及所有修订和命名分支存储在本地。Subversion仅存储一个-通常是Head Revision。所以使用Git和Mercurial,你可以访问完整的资料库(即当前的源代码,并甚至当你的网络出现故障与SVN您仅限于您更新到最新修订历史)。


1
@Murph谢谢。这本质上就是我的意思。我试图澄清。
Amenti 2012年

这不仅仅是您是否与服务器建立网络连接的问题;与网络IO相比,本地IO的速度更快且延迟更低,这使得检查历史记录或归咎于文件的速度更快(TrotiseSVN归咎于警告“请稍候-这可能要花几分钟。严重!”)。折衷方案是,将所有历史记录都本地存储在更大的存储库中可能需要更多的磁盘空间。如果您不能仅仅添加一个额外的驱动器来补充一个较小的,不会破坏银行业务的SSD,这在笔记本电脑上可能会出现问题。
丹·尼利

@DanNeely的评论可能在2012年是合理的,但是4年后,几乎不可能找到一个可以占据SSD相当大一部分的git项目
Igor Stoppa,2016年

7

简短的答案是这样的:使用git可以拥有所有的源代码,使用subversion可以拥有所有的最新版本。的源代码。

Git会在本地保留整个存储库历史记录的副本。使用subversion时,整个历史记录都在服务器上。


2

我认为您可能会发现,使用SVN,您的所有操作都需要与服务器进行通信,而GIT则不需要。使用SVN,如果要分支,可以在服务器上分支并下拉该分支。使用GIT,您可以创建本地分支,而无需“服务器”知道它。

您的说法是正确的,您同时拥有SVN和GIT的源代码,但有了GIT,就不必有包含源代码的集中式服务器。使用GIT,您可能是拥有源代码的唯一人,但仍然能够完成典型VCS所具有的所有功能。

我听到了反对GIT的争论,并且我认为这可能会对您的问题有所帮助,因为您不需要提交中央存储库,因此您拥有自己的源代码,直到提交并推送到服务器为止。你有一个。使用SVN,进行版本控制的唯一方法是通过提交到服务器,但是使用GIT,您可能会将所有内容保留在本地计算机上,如果出现任何错误,即使可能同样容易,也可能“丢失所有内容”如果您没有提交并且硬盘也崩溃了,那么SVN将丢失所有更改。


1

说,由于您不需要提交中央存储库,因此您拥有自己的源代码,直到提交并推送到服务器(如果有的话)为止。使用SVN,进行版本控制的唯一方法是通过提交到服务器,但是使用GIT,您可以将所有内容保留在本地计算机上,如果出现任何错误,即使您同样容易地“丢失所有内容”如果您没有提交并且硬盘也崩溃了,那么SVN将会丢失所有更改。

如果每天都推,那么风险应该很小。但是,如果您被迫每天提交到SVN服务器,那么最终,您可能会在一个大型变更集中进行所有操作,而该变更集不会将每个变更分成很小的步骤。使用git时,建议您进行多个小的提交。推送时,如果需要合并,则尝试合并并推送。如果目前无法合并,则可以推送到服务器上的新分支或另一个存储库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.