由于某种原因,我的SVN仓库本地副本停止将父目录识别为工作副本。我通常会通过再次签出到另一个文件夹并用我更改的文件覆盖新的工作副本来解决这个问题。然后我会从新文件夹中提交。
我想避免在这种情况下这样做,因为回购包含数以千计的大图像,并且检出需要很长时间。所以我想做的是非完全递归地检查到一个新目录,将我现有的文件复制到新目录中,然后检查整个内容。
问题是SVN知道我只检查了几个文件。有没有办法可以伪造它并让SVN认为我只是做了一个完整的结账? (例如,我可以抓住.svn文件夹进行完整的结帐,而无需实际检查所有内容)
答案 0 :(得分:3)
在新位置对您的存储库进行稀疏检查应该可以执行您想要的操作(http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html)。如果我理解正确的话,你会想要对最顶层的目录进行空白检查,然后对你想要的工件进行'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)
答案 1 :(得分:1)
您很可能在每次结帐时损坏或删除隐藏的.svn
文件夹。
使用命令行在其他地方执行svn co svn://your/svn/repository --depth immediates
并从那里恢复.svn
文件夹。然后,您需要经过大量svn update .
和svn cleanup
序列,才能将子文件夹与父文件夹重新关联。
答案 2 :(得分:0)
首先备份完整的工作副本。然后将您的工作副本更新到最新修订版。您的上一个修订版有根文件夹。 SVN将再次尝试编写该文件夹。然后会出现树冲突。然后运行清理并再次提交。
答案 3 :(得分:0)
如果只有工作副本的根目录已损坏而且大型(或多个文件)位于工作副本根目录下的目录中,则以下过程应该无需再次从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.
如果没有其他损害,应该可以正常运作。
注意: