File 是否可以仅创建未提交给SVN的文件的副本?

File 是否可以仅创建未提交给SVN的文件的副本?,file,svn,copy,backup,File,Svn,Copy,Backup,有时我需要还原许多文件—接近20-50个,但需要保存带有本地更改的文件—如果我将来要使用某些东西的话。 项目很大-超过10000个文件。 是否可以仅创建未提交文件的副本? 手动查找更改和复制大约需要2小时-project树有许多嵌套文件夹。您可以使用创建差异,然后使用重新应用差异 然而,这并不是你应该如何使用SVN。如果您可以使用更改创建分支,那么您可以稍后合并该分支并与您的同行共享内容 请注意,在SVN中创建分支相对来说比较简单。在服务器上,将文件链接到原始文件,直到实际更改为止。只有更改的文

有时我需要还原许多文件—接近20-50个,但需要保存带有本地更改的文件—如果我将来要使用某些东西的话。
项目很大-超过10000个文件。
是否可以仅创建未提交文件的副本?

手动查找更改和复制大约需要2小时-project树有许多嵌套文件夹。

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

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

请注意,在SVN中创建分支相对来说比较简单。在服务器上,将文件链接到原始文件,直到实际更改为止。只有更改的文件才会占用服务器上的空间

注意:

svn diff
只保存文件中更改的行,而不保存完整的文件。但是,如果需要重新应用修补程序,这就足够了。

您可以使用创建一个diff,然后使用重新应用diff

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

请注意,在SVN中创建分支相对来说比较简单。在服务器上,将文件链接到原始文件,直到实际更改为止。只有更改的文件才会占用服务器上的空间

注意:

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

如果您确实需要文件的副本(而不是使用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>
#步骤1
svn状态| egrep'^M'| awk'{print$2}'>配方文件
#步骤2
rsync-a--files from=recipe\u file
当然,
可以在远程机器上


据推测,一旦您在上审核了复制文件,您就可以执行
svn revert-R

如果您确实需要文件的副本(而不是使用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>
#步骤1
svn状态| egrep'^M'| awk'{print$2}'>配方文件
#步骤2
rsync-a--files from=recipe\u file
当然,
可以在远程机器上


大概,在审核了复制文件之后,就可以对分支执行
svn revert-R

+1。svn补丁也是1.7+我想-出于某种原因,很多人仍然使用1.6。还有其他补丁工具。另外,OrtoiseSVN已经内置补丁支持很长一段时间了。但您只需将客户端更新为1.7即可访问patch命令。对于branch,+1。svn补丁也是1.7+我想-出于某种原因,很多人仍然使用1.6。还有其他补丁工具。另外,OrtoiseSVN已经内置补丁支持很长一段时间了。但是您只需要将客户端更新到1.7就可以访问patch命令。