linux - 将 .svn 目录从结帐复制到非结帐以使其成为结帐

标签 linux svn merge svn-checkout

我在生产环境中有一个大型应用程序,我正试图在版本控制下移动它。因此,我创建了一个新的存储库并导入了应用程序,删除了不应受版本控制的各种目录和文件。现在,我需要将已安装的副本结帐(但仍保留额外的文件)。此时,在最新版本的 SVN 中,我会使用 --force 选项在现有目录之上简单地进行 check out 。但遗憾的是,我有一个旧版本的 SVN,从之前添加 --force 选项开始(现在还不能升级……长话短说)。

因此,我将应用程序 check out 到另一个目录,并想简单地将所有 .svn 目录复制到原始目录中,从而将原始目录变成 check out 目录,同时保留额外的文件。现在,也许我只是度过了艰难的一天并且错过了普通网站上的一些东西,但我似乎无法弄清楚这一点。以下是我迄今为止尝试过的方法:

  1. 使用 rsync:我似乎无法找到 include 和 exclude 指令的正确组合来递归捕获所有 .svn 目录,但没有别的。

  2. 使用 cp:我想不出一个好方法让它遍及整个应用程序的所有 .svn 目录。

  3. 将查找与 -exec cp 结合使用:我遇到了麻烦,因为找到的文件的路径名的前导部分弄乱了目标路径。我可以使用 -printf '%P' 排除它,但这似乎并没有进入 exec 的 {} 替换。

  4. 将 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/

相关文章:

apache - 带有 LDAP 身份验证的 SVN 无法正常工作

datetime - 在 R 中合并聚合数据

linux - 在 Linux 上从源代码构建 OpenCV 和 OpenCV_Contrib 时出现构建错误

linux - 脚本中的if-elif无法正常工作

c++ - 使用 g++ 编译多线程代码(-Wl,--no-as-needed 不工作)

svn - 如何调试 Subversion 预提交 Hook 脚本?

svn - TortoiseSVN 在 Windows Vista 上不断导致资源管理器崩溃

mercurial - 尝试在 Mercurial 中从分支 merge 回主分支并关闭分支

java - 归并排序错误

linux - Gstreamer 错误 : Pipeline could not be constructed: syntax error