2009-08-30 113 views
10

在我的仓库,可以说我有这样的:颠覆 - 检出父目录

Animal 
    Dog 
    Beagle 
    Hound 
    ... 

可以说,我检查了狗到工作目录,我意识到,哎呦,我真想检出动物。

我可以删除我的工作副本,狗目录和结帐动物,但是我可以在不删除并重新检出的情况下这样做吗?

如果我的狗的工作副本有作为父文件夹的动物,并且我没有删除狗的结帐动物,我得到类似“颠覆无法添加目录版本相同的名称已经存在”。

我也在用乌龟。谢谢。

+3

删除并重新检出时出现了什么问题?如果您已经做出更改,请提交,然后重新开始。 – kajaco 2009-08-30 14:28:41

+1

这不是问题。这就是我所做的,它的工作。只是想知道我是否有更好的方法,或者有更正确的方法来做到这一点。 – Steve 2009-08-30 14:39:31

回答

4

这是不可能的。

最简单的方法是删除您的工作副本并执行Animal的新结帐。

如果在Dog你想保留任何的变化,移动Dog到一个临时位置,结账Animal然后复制DogAnimal目录。

2

您正在寻找svn switch,它会更新您的工作副本以反映新路径。不过,修改后的文件不会被触及。在TortoiseSVN中,右键单击并从上下文菜单中选择“切换...”。

svn switch更常见的用例是在源自同一点的分支之间切换,以便您可以对相同的代码拥有不同的视图。但是您可以在存储库中的任意路径之间切换。

+1

但是我的父目录Animal不在版本控制之下,所以我不能切换到它,至少不是从Tortoise。也许通过命令行? – Steve 2009-08-30 14:41:13

+1

我很困惑。如果你的仓库不受版本控制,你的仓库如何拥有Animal?这是一个错字吗? – 2009-08-30 14:55:32

+1

我做了一个副本(分支)来创建动物。在我的工作副本中,Animal没有.svn目录。这是一个与存储库文件夹名称相同的文件夹。所以我的工作目录是一个存储库结构的完全重复,但我检查了狗到狗。希望这是有道理的。 – Steve 2009-08-30 15:16:53

0

我发现避免从svn服务器下载我的磁盘上已有的内容,然后使用--depth empty完成更新或检出。所以像这样的东西:svn co --depth empty Animal ; cd Animal ; svn update --depth empty Dog

无论如何,这个想法是得到Dog作为目录Animal/.svn/entries

这种“--depth empty”不断从网上下载的实际内容SVN,但SVN确实让子目录(在这种情况下,Dog)和svn并把在Animal/.svn/entriesDog子目录中的条目。

然后用您已拥有的副本替换Dog子目录。

你可以通过打开Dog某个文件中的某个文件并在Animal目录中执行svn update来检查它的工作原理。重击的文件应该从svn服务器上下载。

+0

不起作用:那么你得到'更新: 跳过‘树干’ - 的封闭工作拷贝发现 在修订13370. 总结的冲突:“” 跳过路径:1'这样做的时候'SVN up'在'动物'中。 – 2018-01-26 09:56:45

+0

过了很久,所以我不确定问题是什么。 SVN应该制作动物和狗的目录,不是吗?所以应该没有阻碍工作副本。 另一个想法是,SVN从'13开始已经改变了,所以这个技巧不再适用。 – 2018-01-27 10:53:37

0

是的,你可以映射父目录。

为此,您只需从“狗”(子)目录中删除.svn目录,然后在父目录上执行SVN Update。它会使现有文件为Versioned副本,并将从SVN服务器下载Dog目录的增量内容。

请注意:您应该具有精确的目录结构作为SVN目录结构。