GIT和SVN之间的区别:在提交方面有何不同(在GIT中)以及仅在文件中本地保存更改(在SVN中)。

5
我想知道在离线状态下(未连接到服务器),使用GIT本地提交(commit命令)相对于在SVN中只保存更改到工作目录有何优势。我已经了解到GIT的一个优点是可以离线工作,即用户可以本地多次执行提交,然后在连接到服务器时将更改推送到远程服务器。但如果commit命令仅仅是将更改提交到本地磁盘,这与SVN在离线状态下将更改保存到磁盘并没有什么不同(并未提交到项目分支)。我喜欢GIT,但我无法理解这种差别。请帮助我!谢谢,Nayan

1
+1:我很难理解为什么GIT如此受欢迎,除了“这是酷孩子们使用的”。 - Louis Kottmann
因为它是分散式的,所以你可以在本地和服务器上都进行版本控制。与SVN不同,你不需要“提交”你可能还没有完成的任务,只是为了确保它被存储在版本控制中。如果你把Git称为“酷孩子们使用的东西”,那说明你可能并没有真正使用过(或者根本没有使用过),无法与SVN进行有效的比较。 - Tim
我认为最强的区别在于版本控制与团队共享的解耦。版本控制提供各种不一定包括与团队成员分享的好处。分散式版本控制使您能够彼此共享完整的工作单元,但仍然可以保存自己的不完整工作历史记录。如果您曾经在个人项目上使用过版本控制,那么很容易看出其中的区别。 - Peter Bratton
4个回答

14
场景:在您离线前(例如长时间的飞行旅程),您从代码库中下载了最新的代码到您的笔记本电脑上。
在飞行途中,您进行了一些更改——运行单元测试、运行代码,一切似乎都正常。您做了更多的更改——测试它们,事情仍然正常。你变得非常热情,并进行了一些重要的重构。你测试了这些变化——一切都坏掉了(例如因为你在某个地方作出了错误的假设)。 使用SVN:将代码恢复到工作状态会很棘手,因为您无法记住在开始所有这些繁重的重构之前代码是什么样子的。这可能需要大量冗长的差异分析,比较您笔记本电脑上的代码和主服务器上的代码,直到您再次获得网络访问。同时,您受困于此。 使用Git:假设您明智地每次知道它处于工作状态时都将更改提交到本地存储库,那么回滚到在进行重构工作之前所做的提交很容易。您可以保留有价值的工作,并立即开始走上正确的道路。当您再次获得网络访问时,您可以一次性将这些更改推送到主分支,一切都会很好。

+1:清晰简洁。我猜你可以在你的笔记本电脑上建立一个SVN仓库,并在那个仓库和主要仓库之间切换,但在GIT中似乎已经内置了这个功能。 - Louis Kottmann
1
我知道这是通常的论点,但说实话,有多少人真正这样做过呢?因此,SVN的解决方案是在中间步骤使用cp -Rrobocopy /e复制您的工作副本,以便在磁盘上有已知的好版本。您甚至可以按顺序提交它们,尽管通常需要移动.svn目录以避免在第二个和后续WC副本的更新之前提交时出现冲突。但是,这并不需要太多的努力,尽管比git更费力。 - Rup
2
我其实已经做过这件事,虽然没有上面描述的那么夸张。;) 我认为使用 cprobocopy 并不是一个真正的 "SVN" 解决方案,它只是使用另一个工具来解决 SVN 选择不处理的问题,正如你所指出的,可能需要一些调整才能避免问题。Git 的替代方案通过仅存储更改文件的差异而使用更少的空间,而不是复制整个项目。此外,它将所有数据都保持在逻辑位置上,而不是在磁盘上的任意其他文件夹中。 - raveturned

5

提交并不是将文件保存到磁盘,你不需要任何版本控制软件来完成这项工作。

在版本控制中,提交意味着将文件的新版本保存到历史记录中,以便您可以记录和恢复不同的状态。然后 Git 和 SVN 的不同之处在于,在本地执行此步骤而无需与远程服务器进行通信。

使用 SVN 的离线模式时,您无法发出任何提交,因此您的工作历史记录没有被记录下来,虽然它已经保存到本地磁盘。但对于 Git 来说,情况并非如此。


2
通过提交代码,您将代码存储在版本控制中,而不仅仅是保存到磁盘。这使您能够真正管理您的代码和项目随着它的增长。
Git 还允许我们在整个项目生命周期中创建任务分支,使您可以保持一个始终在服务器上工作的主代码库,一个在本地工作的主代码库,然后您可以在实现新功能时对此主代码进行分支并在所有这些之间切换。而无需像在 SVN 中那样将代码“提交”到服务器以确保其安全。
通过在本地提交和分支,这使您可以在离线情况下有效且安全地工作。SVN 要求您将这些更改提交到服务器,以确保它们是安全的。Git 是分散的。
我相信当您调查 Git 的特性并使用它时,您自己会回答自己的问题。然后如果您回到 SVN,您会希望使用 Git ;)
希望这有所帮助。

1

我能想到的:

  1. 离线版本控制(无需与远程存储库通信以保存工作进度)。
  2. 更容易进行分支和合并以切换任务。
  3. 更复杂的合并...减少合并痛苦。
  4. 跟踪工作进度,而不强制要求团队接受不完整的状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接