SVN检出但不还原

4

我们有一些公司中间件,有时很难找到我需要的正确版本,因此我经常不得不更新到不同的版本来测试。

我通常会检出以下版本:

svn co svn+ssh://(username)@(ip)/srv/svn/intranet/trunk/PYTHON/<application> <local-application>

然后我可能会更新到不同的版本

svn update (path) -r (rev)

大多数情况下,尝试几次后会出现错误节点仍处于冲突状态
如果我删除文件夹并尝试重新检出,它只会恢复我先前的内容。我只想检出一个版本,我没有进行任何更改,但它仍然认为存在冲突。
我已经尝试解决它们,但似乎没有任何作用:
svn update -r 1586
Skipped 'inm/inm' -- Node remains in conflict
D    inm/fabfile.py
D    inm/test.db.bak
D    inm/tests
D    inm/test.db
D    inm/doc
D    inm/test.ini
D    inm/test.sql
U    inm/setup.py
A    inm/inm.egg-info
A    inm/inm.egg-info/SOURCES.txt
A    inm/inm.egg-info/top_level.txt
A    inm/inm.egg-info/PKG-INFO
A    inm/inm.egg-info/entry_points.txt
A    inm/inm.egg-info/dependency_links.txt
A    inm/inm.egg-info/not-zip-safe
A    inm/inm.egg-info/paster_plugins.txt
A    inm/inm.egg-info/requires.txt
U    inm/setup.cfg
Updated to revision 1586.
Killed by signal 15.
Summary of conflicts:
  Skipped paths: 1

svn resolved inm/inm
Resolved conflicted state of 'inm/inm'
(venv)

svn update inm/inm -r 1586
Updating 'inm/inm':
Password: 
Skipped 'inm/inm/templates' -- Node remains in conflict
At revision 1586.
Killed by signal 15.
Summary of conflicts:
  Skipped paths: 1

可能是未跟踪的文件导致了冲突;不太清楚每个操作之前和之后该目录(“路径”,它是否与“intranet/trunk/PYTHON/<application>”相同?)的状态/内容;你的SVN版本是多少? - Dmitry Pavlenko
如果您认为这绝对是一个错误,请写信至users@subversion.apache.org或在FreeNode的#svn频道中提出。 - Dmitry Pavlenko
如果您没有更新工作副本中的任何内容,通常它不会表现出这样的行为。只是为了确保,您是将整个工作副本更新到不同的版本,还是只更新了其中的一部分?如果是前者,那么在我的看来,这似乎是svn的一个bug。 - Adrian Shum
我正在使用subversion-1.7.5-1.fc17.i686。这是完全相同的路径,我只是想获取一个新版本。无论我做什么,它似乎都无法下载最新的副本。我正在尝试更新整个工作副本。 - RonnyKnoxville
另外,当我尝试删除整个文件然后再次更新时,它只是跳过整个部分(那些有冲突的部分),并且没有任何错误提示。 - RonnyKnoxville
1
第二次它抱怨另一个冲突节点。也许你应该使用“--depth=infinity”选项和“--accept theirs”来解决冲突,以免手动解决每个文件。但无论如何,很奇怪... 你能在更新之前和之后发布“svn status inm”的输出吗? - Dmitry Pavlenko
2个回答

17

我认为我在这里所寻找的答案是

svn revert --depth=infinity inm

我不关心保留本地更改,只需要更新到新版本。我已经几次使用了这个命令,似乎它能解决问题。

编辑

再次查看我的错误,我可以看到许多文件可能是由测试或构建所更改的。我应该将它们添加到忽略文件中,以便svn不会检测到它们的更改。


1

所以:

  • 你只是从trunk检查和更新,还是有时也从分支检出?
  • 在测试时是否运行任何程序?
  • 如果在运行更新之前执行了svn status,那么你是否拥有一个原始的检出副本?

冲突可能发生的原因很多。

想象一下,你修改了一个在你的Subversion存储库中的文件,然后更新到早期版本或更高版本。根据你的操作方式,Subversion可能会尝试合并你所做的更改和你正在检出的内容之间的差异。有时,如果你没有从修订的头部更新,Subversion就不会这样做。在这种情况下,Subversion将报告该文件存在冲突。

另一个原因是你在工作目录中创建了一个不在Subversion修订版中的文件。当你将该文件更新到Subversion修订版时,Subversion将报告冲突。

然后,也许你的系统出了问题。我们现在没有足够的信息。

下次在执行svn update之前,请在您的工作目录上执行svn status。实际上,这总是一个好主意。这将在更新时警告您可能与Subversion冲突的任何情况。
在Subversion中我想念CVS拥有的一件事情(虽然我不太想念CVS),那就是一个假装执行命令的选项。这将允许您在实际更新之前模拟更新并在发生冲突时警告您。遗憾的是,Subversion目前没有这样的选项(尽管已经被强烈要求)。

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