我有一个部分检出的来源树。使用以下命令错误地检出了这些:
> svn co --depth=empty svn://repos/trunk .
> svn co --depth=infinity svn://repos/trunk/project project
> svn co --depth=infinity svn://repos/trunk/test test
当然,命令应该是
> svn co --depth=empty svn://repos/trunk .
> svn up --set-depth=infinity project
> svn up --set-depth=infinity test
由此产生的症状是:
> svn st
? project
? test
虽然
> svn info
Path: .
URL: svn://repos/trunk
Repository Root: svn://repos
Repository UUID: 01234567-89ab-cdef-0123-456789abcdef
Revision: 1234
Node Kind: directory
Schedule: normal
Depth: empty
> svn info project
Path: project
URL: svn://repos/trunk/project
Repository Root: svn://repos
Repository UUID: 01234567-89ab-cdef-0123-456789abcdef
Revision: 1234
Node Kind: directory
Schedule: normal
(奇怪的是,如果第一个命令是svn co --depth=immediates svn://repos/trunk .
,则不会出现症状。)
现在,症状的原因是文件
./.svn/entries
不包含project
和test
目录的条目。 (我可以通过直接黑客攻击这个文件来修复我的问题,但我真的不愿意。)
我的问题是:
是否有Subversion命令来“合并”这些工作副本,以便svn st
保持沉默(或在项目和测试中显示本地修改)?
我尝试过各种各样的事情,包括
svn up --set-depth = immediates --depth = empty。
但这不起作用
因为--depth
和--set-depth
“互相排斥”。
我也试过
svn up --set-depth = infinity project
但这不起作用
因为project
被解释为本地的相对路径而不是存储库中的相对路径;也就是说,URL是在应用当前目录的相对路径之后而不是之前形成的。
更糟糕的是,我已经尝试了
svn up --set-depth = immediates。
但是这有一个不幸(但正确)的效果,就是快乐地删除文件。
这个问题比我描述的情况更为广泛。可能需要这种“修复”的另一种情况是,如果您希望检查已经检出的最上层节点的父节点,而不必重新签出本地已存在的源,同时保留任何本地修改。
谢谢, 罗布。
答案 0 :(得分:1)
不,以支持的方式无法合并此类工作副本。我只是做一个新的结账来解决问题。
答案 1 :(得分:0)
您可以将错误检出的子路径复制到另一个位置,然后使用
正确启动svn up --set-depth=infinity project
svn up --set-depth=infinity project
然后找到一种方法来覆盖在递归保存在另一个位置的文件,因此它们现在在父级结帐之下
可能是cat(linux)或类型(Windows)。
Linux的:
cat savedLocation/recursiveDir/file > recursiveDir/file
视窗:
type savedLocation/recursiveDir/file > recursiveDir/file
您可以在linux上列出带有tree命令的递归目录的文件:
tree -if savedLocation/
不知道如何在Windows中执行相同的操作