我和我的同事都在SVN,我们经常使用它。每当我们对网站进行更改时,它都非常适合整合更改。当我们编辑同一个文件时,我们常常遇到麻烦。
通过我们的网站结构,我们有一个styles.css,其中包含网站的所有美学。由于我们都是前端开发者,我们都经常同时编辑它。在这种情况下我们遇到问题(因为人为错误):
styles.css
styles.css
,更新并提交更改双方都遗忘了这是一个人为错误。现在我们想知道是否有更有效的方法来编辑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使其最新。因此它没有达到过时错误
答案 0 :(得分:4)
除非我弄错了,否则如果他或她没有最新的话,SVN不应该允许B人提交。
来自红豆:
存储库不知道或不关心您的更改是否有任何更改 感觉作为一个整体;它只检查以确保没有其他人改变 你不看时所做的任何文件。如果 有人这样做了,整个提交都会失败并显示一条消息 通知您一个或多个文件已过期:
答案 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是版本控制系统,因此您无法永久删除任何内容。如果你发现你“犯了一个错误”并抹去了别人的工作,你可以简单地恢复该提交以撤消你所做的事情。