在subversion中,有人删除了一个文件并将其添加回一次提交中的更改,我该如何解决这个问题?

时间:2012-11-19 18:55:42

标签: svn

有人提出了一个删除文件的subversion提交,并添加了一个同名的新文件,该文件由原始文件和~155个新行组成。

(我不知道他们是如何设法做到的。)

现在'svn log'只显示回到该提交的历史记录,如果我想在他们这样做的时间点之前和之后对该文件进行差异修改,我必须跳过箍。 (例如'svn diff url @ oldrev url @ newrev'而不是'svn diff -r n:m')

发生这种情况后,已对此文件进行了少量提交。 (大约3)。

我该如何解决这个问题?

我在Linux上使用命令行'svn'客户端。

3 个答案:

答案 0 :(得分:2)

Mightymuke实际上是对的:

以下是说明:

  1. 记下新创建文件的所有修订版(我称之为R1 ..到Rn)
  2. 注意删除原始文件时的修订(我称之为Rd)
  3. 查看至少包含此文件的工作副本
  4. 删除新文件并在提交消息中提交更改和状态,提交文件在提交R1中添加错误(说明修订版并确保每个人都能理解添加错误的原因)
  5. 更新您的工作副本('svn update')
  6. 如果使用tortoiseSVN,请使用show log并在历史记录中找到Rd,单击它并右键单击已删除的文件并选择“从此修订版还原更改”不要在整个修订版本上使用此项,因为那样的话也会撤消其他变化。在其他操作系统上使用反向合并(“ - c-Rd”表示例如“-c-50”,如果50是对已删除文件的修订):

    svn merge -c-Rd

  7. 将当前文件内容从已删除的文件复制到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