有人提出了一个删除文件的subversion提交,并添加了一个同名的新文件,该文件由原始文件和~155个新行组成。
(我不知道他们是如何设法做到的。)
现在'svn log'只显示回到该提交的历史记录,如果我想在他们这样做的时间点之前和之后对该文件进行差异修改,我必须跳过箍。 (例如'svn diff url @ oldrev url @ newrev'而不是'svn diff -r n:m')
发生这种情况后,已对此文件进行了少量提交。 (大约3)。
我该如何解决这个问题?
我在Linux上使用命令行'svn'客户端。
答案 0 :(得分:2)
Mightymuke实际上是对的:
以下是说明:
如果使用tortoiseSVN,请使用show log并在历史记录中找到Rd,单击它并右键单击已删除的文件并选择“从此修订版还原更改”不要在整个修订版本上使用此项,因为那样的话也会撤消其他变化。在其他操作系统上使用反向合并(“ - c-Rd”表示例如“-c-50”,如果50是对已删除文件的修订):
svn merge -c-Rd
将当前文件内容从已删除的文件复制到revived on和commit(在提交消息中声明撤消的Revisions R2..Rn)。替代方案:您可以重新创建每个旧版本并单独提交它们(在每个提交消息中声明原始版本R2 ... Rn)
答案 1 :(得分:0)
以下是命令:
$ svn log affected # Find the last rev that is good, and write it down.
$ svn rm affected
$ svn ci -m'Reverting to save.' affected
$ svn cat -rGOOD_REV affected > affected
$ svn up # important
$ svn add affected
$ svn ci -m'Readding damaged file.' affected
$ svn up # important
# Get revisions after bad import
$ svn diff -rBAD_REV:BAD_REV_PLUS_ONE > diff1.txt
$ patch -p0 < diff1.txt
$ svn ci -m'Rescued -rBAD_REV_PLUS_ONE.' affected
$ svn diff -rBAD_REV_PLUS_ONE:BAD_REV_PLUS_TWO > diff2.txt
$ svn ci -m'Rescued -rBAD_REV_PLUS_TWO.' affected
答案 2 :(得分:0)
我意识到这是一个老问题,但它似乎还没有一个简单的答案。
最初描述的问题很容易实现。在一次提交中,您删除了一个文件。在稍后的提交中,您将重新添加该文件。这会破坏具有相同名称的两个文件之间的svn历史记录。
修复很简单。您需要执行svn rm
最新文件svn cp
正确的预删除文件修订,然后手动更新包含最新更新的文件并将其重新签入。
例如,假设在修订版1234中删除了myFile.h:
$ cp myFile.h myFile.h.latest # save copy of latest edits.
$ svn rm myFile.h # remove file from svn
$ svn cp myFile.h@1233 myFile.h # restore the pre-deleted revision (along with history)
$ cp myFile.h.latest myFile.h # overwrite local copy with latest edits
$ svn ci myFile.h # save to SVN