SVN - 处理相同文件的最有效方法

时间:2013-12-19 19:56:44

标签: svn

我和我的同事都在SVN,我们经常使用它。每当我们对网站进行更改时,它都非常适合整合更改。当我们编辑同一个文件时,我们常常遇到麻烦。

通过我们的网站结构,我们有一个styles.css,其中包含网站的所有美学。由于我们都是前端开发者,我们都经常同时编辑它。在这种情况下我们遇到问题(因为人为错误):

  • 人A和B“svn up”并获得最新的styles.css
  • 人员A开始处理styles.css,更新并提交更改
  • B人现在更新他/她的版本(遥控器)以获取最新副本。
  • [错误进来]人B 忘记下载最新版本并开始处理他过时的副本。然后,他承诺并基本上删除了A所做的一切。

双方都遗忘了这是一个人为错误。现在我们想知道是否有更有效的方法来编辑SVN中的相同文件。或许我们做错了,我们想知道如何正确行事。我们都是SVN的新手。

修改 - 我不认为我们都在同一页面。我知道如何复制“过时”但我不认为是这样的。如果Person A提交然后我尝试在(svn st + svn commit)之后立即提交,我将得到过时的错误。

我们的情况是(按顺序):

人A:svn up> svn st> svn commit

B人: svn up >忘记下载更新的文件/上传旧文件而不进行A更改> svn st> svn commit

人B的svn up使其最新。因此它没有达到过时错误

3 个答案:

答案 0 :(得分:4)

除非我弄错了,否则如果他或她没有最新的话,SVN不应该允许B人提交。

来自红豆:

  

存储库不知道或不关心您的更改是否有任何更改   感觉作为一个整体;它只检查以确保没有其他人改变   你不看时所做的任何文件。如果   有人这样做了,整个提交都会失败并显示一条消息   通知您一个或多个文件已过期:

http://svnbook.red-bean.com/en/1.7/svn.tour.cycle.html

答案 1 :(得分:3)

正如其他人所说的那样,如果没有你采取某些行动迫使失去已经承诺的工作,SVN就不应该允许这样做。

如果您执行svn commit并且其他人已经提交了更改,SVN会告诉您必须先执行svn update

如果您执行svn update,SVN会将存储库中的所有更改合并到您的本地工作副本中。通常这只是工作,你可以提交。什么都不会丢失。

有时你们都修改了同一个文件的同一部分。在这种情况下,SVN会告诉你有一个"冲突"。您必须在提交之前解决此冲突。如果您尝试在不解决冲突的情况下提交,SVN也不允许您这样做。要解决冲突,必须首先打开文件并手动将更改与存储库更改组合在一起。通常你使用一个漂亮的三向差异工具,如kDiff3或Meld或类似的东西,可以直接集成到SVN设置。

保存合并的更改后,只有这样,您必须使用svn resolve告诉SVN您已完成合并。只有这样,SVN才允许你提交。

换句话说,你必须搞砸了你如何使用SVN。这正是SVN旨在防止引发问题的情况。

答案 2 :(得分:2)

  

- [出现错误] B人忘记下载最新的副本并开始处理他过时的副本。然后,他承诺并基本上删除了A所做的一切。

这不应该是可能的。防止这是像svn这样的系统的主要任务之一。事实上,命令行客户端不允许你这样做。

覆盖其他人更改的唯一方法是故意。使用命令行客户端,我将不得不竭尽全力提交将消除其他人工作的更改。也许您在使用的任何客户端都关闭了一些警告弹出窗口,但我认为这不符合“人为错误”。

在任何情况下,由于svn是版本控制系统,因此您无法永久删除任何内容。如果你发现你“犯了一个错误”并抹去了别人的工作,你可以简单地恢复该提交以撤消你所做的事情。