假装SVN结账的深度

假装SVN结账的深度,svn,svn-checkout,Svn,Svn Checkout,出于某种原因,我的SVN repo本地副本不再将父目录识别为工作副本。我通常会通过再次签出到另一个文件夹并用更改的文件覆盖新的工作副本来修复此问题。然后,我将从新文件夹进行提交 我想避免在这种情况下这样做,因为回购协议包含数千张大型图片,并且签出需要很长时间。所以我想做的是以非完全递归方式签出到一个新目录中,将现有文件复制到新目录中,然后将整个内容签入 问题是SVN知道我只签出了几个文件。有没有一种方法可以让SVN认为我刚刚做了一次完整的结账?(例如,一种方法,我可以只获取.svn文件夹进行完整

出于某种原因,我的SVN repo本地副本不再将父目录识别为工作副本。我通常会通过再次签出到另一个文件夹并用更改的文件覆盖新的工作副本来修复此问题。然后,我将从新文件夹进行提交

我想避免在这种情况下这样做,因为回购协议包含数千张大型图片,并且签出需要很长时间。所以我想做的是以非完全递归方式签出到一个新目录中,将现有文件复制到新目录中,然后将整个内容签入


问题是SVN知道我只签出了几个文件。有没有一种方法可以让SVN认为我刚刚做了一次完整的结账?(例如,一种方法,我可以只获取.svn文件夹进行完整签出,而无需实际签出所有内容)

首先备份完整的工作副本。然后将工作副本更新到最新版本。您的上一个修订版本具有根文件夹。SVN将再次尝试写入该文件夹。然后将显示一个树冲突。然后运行清理并再次提交。

您很可能损坏或删除了每个签出中隐藏的
.svn
文件夹


使用命令行执行
svn cosvn://your/svn/repository --深度立即在别处
并从那里恢复
.svn
文件夹。然后,您将需要执行大量的
svn更新。
svn清理
序列,以便将子文件夹与父文件夹重新关联。

如果只有工作副本的根目录已损坏,并且大的(或多个文件)在工作副本根目录下的目录中,无需再次从repo下载文件,以下过程即可工作:

> # 1) adjust these:
> WC=/bad/root/of/working/copy
> REPO=svn://localhost/url/to/repo/trunk/proj

> cd $WC
> # 2) make sure there is no half-baked stuff
> rm -rf .svn

> # 3) remove files in WC-root (would wreck havok later)
> rm -v $(svn ls --depth=files $REPO)

> # 4) ckeck out a clean .svn for this dir into another place
> svn co --depth=immediates $REPO /tmp/tmp-wc
> # 5) copy .svn this to this place
> cp -a /tmp/tmp-wc .

> # 6) "reconnect" children, download files in root
> svn up --set-depth=infinity .
Revision 42.
之后,如果没有其他损坏,则应可以正常运行

注:

  • 步骤3+4)由于存储库根目录中不包含太多数据,因此这一步骤应该是轻松的。但是,如果没有签入任何更改,您可以在之前备份这些更改
  • 步骤6)由于子目录中的数据未被触及,因此不会再次下载。将再次获取根目录中的数据
在新位置对存储库进行稀疏签出应该可以满足您的需要()。如果我理解正确,您将希望对最顶层的目录执行空签出,然后对所需的工件执行“svn up”,并在执行时设置深度

例如,假设我有一个名为“foo”的顶级文件夹,它包含两个文件夹“bar”和“zoog”

/foo
  /bar
    -the files I want
  /zoog
    -the universe
文件夹“zoog”中有大量文件,我目前并不关心这些文件,但我希望能够使用“bar”。我会这样做:

svn co --depth empty file:///var/svn/repos/FooRepo foo
cd foo
svn up --set-depth infinity bar
现在“svn up”显示所有内容都是最新的,我可以在“foo”和“bar”中进行更改并提交它们,就好像我也签出了“zoog”一样,而不需要所有的开销


(svn update中--set depth的参数为exclude、empty、files、immediates和infinity)

我无法更新到最新版本,因为svn无法识别它是工作副本,并且我无法在目录上运行任何svn命令我已经尝试过了,但是立即检查似乎和检查整个事情一样长——不知道为什么。我觉得这很反常。那就试试svn公司吧svn://your/svn/repository --深度为空并选择所需的文件。首先:大型文件是否直接位于工作副本的根目录中,或者至少位于下面的一个目录中?第二:您是否只删除了工作副本根目录中的
.svn
目录,或者其他目录中也缺少该目录?文件不在主根目录中,adn似乎只有root.svn目录被损坏-在任何子目录中,所有常用图标都会出现在文件旁边我已经加上一个你的答案,因为它看起来可能是我所需要的,但是为了运行命令行svn(而不是龟形gui),我不得不将svn升级到1.7,它的元数据结构与v1.6完全不同,所以我不能真正测试你的答案,看看它是否有效。我在第三步调用
svn-up——设置深度无限条/folder1
,得到错误
E155007——不是工作副本
,所以我首先调用
svn-up——设置深度空条
然后调用
svn-up——设置深度无限条/folder1