Ale*_*min 41
要svn diff
包含本地工作副本中的所有未版本控制的文件,您必须先添加这些文件.svn diff
输出svn commit
将使用的相同变更集.
如果您确定应该在此处添加所有未版本控制的文件,那么您可以执行此操作.
通过从以svn status
问号开头的所有行的输出中准备未编译文件的列表:
svn status | grep ^? | sed -r 's/^\? +//' > ../unversioned_files_list.txt
Run Code Online (Sandbox Code Playgroud)
然后,您可以将该文件列表传递给svn add
使用xargs
:
xargs -r -d '\n' svn add < ../unversioned_files_list.txt
Run Code Online (Sandbox Code Playgroud)
然后生成补丁:
svn diff > ../my_patch.patch
Run Code Online (Sandbox Code Playgroud)
如果您不想保留这些文件,请使用文件列表取消添加:
xargs -r -d '\n' svn rm --keep-local < ../unversioned_files_list.txt
Run Code Online (Sandbox Code Playgroud)
gui*_*wuu 12
谢谢亚历山大.起初,他的方法在我的案例中不起作用.我肯定是maked所有新文件A
中svn status
,但是,diff文件还空着.最后,我发现了svn status
输出的差异,我的案例中的第四列都填充了+
,如:
$ svn st
M .
A + New.java
Run Code Online (Sandbox Code Playgroud)
这意味着该项目安排在addition-with-history
[1].这通常发生在您svn move
或svn copy
文件或目录[2]时.在我的情况下,New.java
是svn merged
从另一个分支,包括以前提交历史在该分支.我们删除了这些历史信息.
首先,找到所有addition-with-history
项目:
svn status | grep ^A | sed -r 's/^A[ +]+//' > /tmp/add_list
Run Code Online (Sandbox Code Playgroud)
(可选)删除目录路径/tmp/add_list
以避免在下一步中出现警告.
接下来,删除他们的历史提交信息svn remove
:
xargs -r -d '\n' svn remove --keep-local --force < /tmp/add_list
Run Code Online (Sandbox Code Playgroud)
然后,回到Alexandre的解决方案,再次将它们添加到subversion并获得差异.
参考文献:
[1]http://svnbook.red-bean.com/nightly/en/svn.ref.svn.c.status.html
[2]http://www.linuxtopia.org/online_books/programming_tool_guides/version_control_with_subversion/svn.ref.svn.c.status.html
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24022 次 |
最近记录: |