是否有可能只创建那些未提交给SVN的文件的副本?

时间:2012-04-13 08:43:24

标签: file svn copy backup

有时我需要还原许多文件 - 接近20 - 50,但需要保存文件并进行本地更改 - 如果我将来会使用某些内容。
项目很大 - 超过1万个文件 是否可以仅创建未提交的文件的副本?
手动查找更改并复制需要近2个小时 - 项目树有许多嵌套文件夹。

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