如何嵌套显然嵌套的Subversion工作副本? [等效地:如何将父目录添加到源代码管理?]

时间:2011-02-05 01:31:38

标签: svn

我有一个部分检出的来源树。使用以下命令错误地检出了这些:

> 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

不包含projecttest目录的条目。 (我可以通过直接黑客攻击这个文件来修复我的问题,但我真的不愿意。)

我的问题是:

是否有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。

但是这有一个不幸(但正确)的效果,就是快乐地删除文件。

这个问题比我描述的情况更为广泛。可能需要这种“修复”的另一种情况是,如果您希望检查已经检出的最上层节点的父节点,而不必重新签出本地已存在的源,同时保留任何本地修改。

谢谢, 罗布。

2 个答案:

答案 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中执行相同的操作