【发布时间】:2011-04-25 20:56:32
【问题描述】:
虽然精通 VCS(常规 svn、git 和 git-svn 用户),但我似乎无法理解这种特殊的 SVN 行为。
每当我需要从其他“干净”状态重命名我的 SVN 工作副本中的目录时 - 即 svn status 不返回任何内容并且所有其他修改都已提交 - 就像这样(这是 svn doc 建议的内容):
svn mv foo bar
svn commit
SVN大声抱怨:
Adding bar
Adding bar/toto
Deleting foo
svn: Commit failed (details follow):
svn: Item '/test/foo' is out of date
如你所愿:
svn update
这给出了:
C foo
At revision 46.
Summary of conflicts:
Tree conflicts: 1
存在树冲突,没有发生第三方更改。显然,摆脱这种树冲突混乱的唯一方法是通用(来自 svn 红皮书):
svn resolve --accept working -R .
svn commit
在 repo 上远程重命名它然后更新我的工作副本似乎很脑残:
url=$(svn info | grep -e '^URL:' | sed 's/^URL: //') svn mv $url/foo $url/bar
svn update
是否有一种认可的、更简化的方式来重命名我丢失的文件夹?这种特别令人惊讶的树冲突状态背后的根本原因是什么?
【问题讨论】:
-
你能发布确切的树冲突消息吗?
-
我以前也见过这种行为,但我不确定是什么原因造成的。是不是当你添加一个目录并在提交之前重命名它?
-
我也遇到过这种行为,一直无法找出原因。我一直把它归结为“SVN 的工作方式”。它让我发疯。
-
Albin,消息在 GNU 屏幕缓冲区范围外丢失:/
-
vext01,dir add 在
svn mv之前被提交到svn 方式。里面的文件收到工作并在svn mv之前提交。