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

时间:2009-09-23 21:24:13

标签: linux svn merge svn-checkout

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

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

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

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

  3. 使用find with -exec cp:我遇到了问题,找到的文件的路径名的前导部分弄乱了目标路径。我可以使用-printf'%P'将其排除,但这似乎不会替换为exec的替换。

  4. 使用find with xargs to cp:在发送父母之前发现通过子目录发送我遇到了麻烦。不幸的是,find没有--bread选项。

  5. 有什么想法吗?

    其他信息:

    • bash 3.0.0.14
    • rsync 2.6.3 p28
    • cp 5.2.1
    • svn 1.3.2

2 个答案:

答案 0 :(得分:6)

使用tar并找到以干净的结帐方式捕获.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)

答案 1 :(得分:0)

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