感谢亚历山大。起初,他的方法在我的情况下不起作用。我确定所有新文件在svn status
中都是A
,但是,diff文件仍然是空的。最后,我发现在svn status
输出的不同,在我的情况下,第四列都填充了+
,如:
$ svn st
M .
A + New.java
这意味着该项目定于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
也可以删除目录路径中/tmp/add_list
以避免在下一步的警告。
接下来,除去他们的历史由svn remove
提交信息:
xargs -r -d '\n' svn remove --keep-local --force < /tmp/add_list
然后,回到亚历山大的解决方案,并重新加入颠覆和获得差异。
参考文献:
[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
如何是一个问题吗?使用SVN准备补丁就像准备提交一样。你运行`svn status`和`svn diff`来查看你需要的所有片段是否在那里,并*还原*,*添加*,* rm *并编辑这些文件,直到你对你的修改满意为止。 – 2010-11-22 19:20:48
@Alexandre,我想要一个_scriptable_方法来捕获我的本地更改,以便我可以稍后使用info“this delta,应用于修订号XYZ”或类似的东西来重新创建工作空间的状态。 – 2010-11-23 06:28:56