1

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

4

2 回答 2

4

您可以使用创建差异,svn diff然后使用 重新应用差异svn patch

然而,这并不是你应该如何使用 SVN。如果您可以使用您的更改创建分支,则更好,然后您可以稍后合并该分支并与您的同行共享内容。

请注意,在 SVN 中创建分支相对便宜。在服务器上,链接到原始文件的文件直到实际更改。只有您更改的文件会占用服务器上的空间。

注意:
svn diff只保存文件的更改行,而不是完整的文件。但是,如果您需要重新应用补丁,这就足够了。

于 2012-04-13T08:50:42.133 回答
1

如果你真的想要文件的副本(而不是使用 svn diff 或做一个分支),tne 方法(我们用于服务器配置文件备份的版本)是检查哪些文件被修改。下面的注释假设您处于回购的顶层。

例如,如果您运行,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.

于 2012-04-14T13:13:35.427 回答