6

我在生产环境中有一个大型应用程序,我试图在版本控制下移动。因此,我创建了一个新的 repo 并导入了应用程序,减去了不应受版本控制的各种目录和文件。现在,我需要将已安装的副本结帐(但仍保留额外的文件)。此时,在最新版本的 SVN 中,我只需使用 --force 选项对现有目录进行检查。但可悲的是,我有一个古老的 SVN 版本,从添加 --force 选项之前(并且还不能升级......长篇大论)。

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

  1. 使用 rsync:我似乎无法正确组合 include 和 exclude 指令来递归捕获所有 .svn 目录,但仅此而已。

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

  3. 将 find 与 -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
4

2 回答 2

6

使用 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)
于 2009-09-23T21:35:55.367 回答
0

(5) 你不能只签出到另一个目录,然后将额外的文件复制到那个目录,在切换到从新目录运行应用程序之前验证一切正常吗?

于 2009-09-23T21:28:20.340 回答