我们正在尝试更新已安装的软件,该软件已由 subversion 控制。该软件的更新说明要求替换其中包含 .svn 目录的几个目录。
由于我们无法直接替换这些目录,我一直在尝试想出一种方法来替换这些目录的内容(以及递归替换所有子目录的内容),而不是替换目录本身。我认为必须有一个解决方案,使用一些标志组合来cp,但我不知道该组合是什么。
我研究过使用cp -aR 目录/现有目录/,但我不能使用-A因为时间戳对于更新来说是不可信的。我可以毫无问题地替换所有文件。另外,我不相信结尾的斜杠会以递归方式穿过子目录。
如果有人能给我指明正确的方向,我将不胜感激。谢谢!
答案1
.svn
这听起来很乱。当你删除目录时,Subversion 会变得很乱。
我这样做的方法是创建一个副本,.svn
从副本中删除所有目录,在副本上运行升级,然后将rsync
所有这些更改从副本复制到原始副本。
该序列看起来应该是这样的:
cp -R software/ software-copy/
cd software-copy/
find . -type d -name .svn -delete
./upgrade-script.sh
cd ..
rsync -avtl software-copy/ software/
-n
如果你想进行试运行并查看结果,可以添加这些 rsync 选项会无需实际操作即可复制。