有时我们只想将一小组文件(全部来自提交)放入我们的工作区,所有其他文件都来自HEAD。我看到如何使用“svn log”获取此列表,但我不确定如何最好地让SVN交换这些文件。
看起来在提交修订版上执行“svn update”会将整个repo卷回到那个时间点,这不是我们想要的。我们只希望在提交中更改文件集。
“svn update”看起来它也可以带一个文件列表,所以我读过一些人推荐写一个脚本的帖子,该脚本接受“svn log”的输出并在“svn update”命令中使用它。除非有更好的方法,这是我要尝试的解决方案?如果没有,任何人都可以指向一个完成版本的脚本吗?
答案 0 :(得分:0)
不幸的是,Subversion无法直接实现您的目标(不确定您使用的是哪个版本,但至少1.7不直接支持此版本)。因此,您最好的选择是使用svn log -qv
来获取修订的文件列表。如果你在一个(现代的)Unix环境中就是这样的伎俩(注意svn log
返回存储库路径):
svn log -qv -r <your rev> | \
grep -v -e '\--' -e '^r' -e 'Changed paths' | \
awk '{print $2;}' | \
sed -e 's,^<your repo prefix>,,'
您必须提供<>
括号之间的位。第一行获取具有受影响文件的日志(并且没有提交消息)。随后的三个grep
行会从svn log
输出中删除所有不必要的错误。 awk
仅返回文件名(删除状态指示),sed
行从文件名中删除存储库前缀(您必须检查svn log
输出以查看该内容值适用于您的存储库)。
如果从工作目录的根目录运行此命令,则应获取提交的所有文件。这仅使用Unix / Linux系统上通常可用的实用程序。如果状态指示包含意外的事情,或者您的提交包含已移动或复制的文件,则此脚本可能会使用一些调整(因为某些svn
版本将原点添加到svn log
输出,您将需要删除此也)。
修改:请注意,您仍需要将上述“脚本”(文件列表)中的结果提供给svn up -r <your rev>
。
答案 1 :(得分:0)
我看到grep-BDSM的一些(可能的)原生替代品
手工和更改列表
如果&#34; ......一小组文件......&#34;真的很小,你可以
svn cl CLNAME...
命令中使用此列表和--targets
选项svn up --cl CLNAME
Mercurial,HGSubversion和模板
Mercurial可以(通过一些技巧)读取SVN存储库,它的日志输出更加灵活,它作为本机Windows应用程序存在(TortoiseHG作为GUI和hg
in控制台),SVN的日志可以轻松翻译成Mercurial,并根据需要更改模板。即 - 您可以准备好使用svn st FILE1 FILE2 ... FILEN
hg log -T
命令
这将需要更多的工作和关注,但当| SVN will fail
时,Mercurial的分支合并也可以在将来节省大量的时间和健康。