我在生产环境中有一个大型应用程序,我正试图在版本控制下移动它。因此,我创建了一个新的存储库并导入了应用程序,删除了不应受版本控制的各种目录和文件。现在,我需要将已安装的副本结帐(但仍保留额外的文件)。此时,在最新版本的 SVN 中,我会使用 --force 选项在现有目录之上简单地进行 check out 。但遗憾的是,我有一个旧版本的 SVN,从之前添加 --force 选项开始(现在还不能升级……长话短说)。
因此,我将应用程序 check out 到另一个目录,并想简单地将所有 .svn 目录复制到原始目录中,从而将原始目录变成 check out 目录,同时保留额外的文件。现在,也许我只是度过了艰难的一天并且错过了普通网站上的一些东西,但我似乎无法弄清楚这一点。以下是我迄今为止尝试过的方法:
使用 rsync:我似乎无法找到 include 和 exclude 指令的正确组合来递归捕获所有 .svn 目录,但没有别的。
使用 cp:我想不出一个好方法让它遍及整个应用程序的所有 .svn 目录。
将查找与 -exec cp 结合使用:我遇到了麻烦,因为找到的文件的路径名的前导部分弄乱了目标路径。我可以使用 -printf '%P' 排除它,但这似乎并没有进入 exec 的 {} 替换。
将 find 与 xargs 一起使用到 cp:我遇到了麻烦,因为 find 在发送父目录之前先发送子目录。遗憾的是,find 没有 --breadth 选项。
有什么想法吗?
其他信息:
- 庆典 3.0.0.14
- rsync 2.6.3 p28
- cp 5.2.1
- svn 1.3.2
最佳答案
使用 tar 和 find 在干净的结帐中捕获 .svn 目录,然后解压到您的应用中。
cd /tmp/
svn co XXX
cd XXX
find . -name .svn -print0 | tar cf /tmp/XXX.tar --null -T -
cd /to/your/app/
tar xf /tmp/XXX.tar
编辑:将 find/tar 命令切换为使用 NUL 终止符以在面对包含空格的文件名时保持稳健性。原始命令是:
tar cf /tmp/XXX.tar $(find . -name .svn)
关于linux - 将 .svn 目录从结帐复制到非结帐以使其成为结帐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1468585/