有时我需要还原许多文件 - 接近20 - 50,但需要保存文件并进行本地更改 - 如果我将来会使用某些内容。
项目很大 - 超过1万个文件
是否可以仅创建未提交的文件的副本?
手动查找更改并复制需要近2个小时 - 项目树有许多嵌套文件夹。
答案 0 :(得分:4)
您可以使用svn diff
创建差异,然后使用svn patch
重新应用差异。
然而,这并不是你应该如何使用SVN。如果您可以使用更改创建分支,那么最好能够在以后合并该分支并与同行共享内容。
请注意,在SVN中创建分支相对较差。在服务器上,文件链接到原始文件,直到实际更改为止。只有您更改的文件才会占用服务器上的空间。
注意:强>
svn diff
仅保存文件的更改行,而不保存完整文件。但是,如果您需要重新应用补丁,那就足够了。
答案 1 :(得分:1)
如果你真的想要文件的副本(而不是使用svn diff或做一个分支),那么方法(我们用于服务器配置文件备份的一个版本)就是检查修改了哪些文件。以下注释假设您处于回购的顶层。
例如,如果您运行svn status
,可能会得到如下输出:
? plans/software/intro_jan12.log
? plans/software/intro_jan12.dvi
? plans/software/data.txt
? plans/software/intro_jan12.nav
M plans/software/intro_jan12.pdf
M plans/software/jan12.tex
? plans/software/jan12/flowRoot9298.png
? plans/software/jan12/viewE_comments.pdf
? plans/software/jan12/team.ps
? plans/software/jan12/team.png
? plans/it/plan.log
(显示未知文件,M显示修改过的文件。)
然后,您可以轻松地提取已修改的文件,并通过执行svn status | egrep '^M'
。
将其转换为将修改后的文件复制到其他地方的简短shell脚本非常简单:
# step 1
svn status | egrep '^M' | awk '{ print $2 }' > recipe_file
# step 2
rsync -a --files-from=recipe_file <repo> <dest>
当然<dest>
可以在远程计算机上。
据推测,一旦您审核了复制文件,就可以进行svn revert -R
。