5

有人做了一个单一的颠覆提交,删除了一个文件,并添加了一个同名的新文件,该文件由原始文件和大约 155 个新行组成。

(我不知道他们是如何做到这一点的。)

现在 'svn log' 只显示返回到该提交的历史记录,如果我想在他们执行此操作的时间点之前和之后区分该文件的修订版,我必须跳过箍。(例如 'svn diff url@oldrev url@newrev' 而不是 'svn diff -rn:m')

发生这种情况后,已对该文件进行了一些提交。(大约 3 个)。

我怎样才能解决这个问题?

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

4

3 回答 3

2

Mightymuke其实是对的:

以下是说明:

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

    svn合并-c-Rd

  7. 将当前文件内容从已删除文件复制到重新启动并提交(在您的提交消息中声明撤消修订版 R2..Rn)。替代方案:您可以重新创建每个旧修订并分别提交(在每个提交消息中说明原始修订 R2...Rn)

于 2012-11-19T20:56:54.780 回答
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
于 2012-11-19T22:57:04.183 回答
0

我意识到这是一个老问题,但似乎还没有一个简单的答案。

最初描述的问题很容易解决。在一次提交中,您删除了一个文件。在以后的提交中,您重新添加该文件。这打破了具有相同名称的两个文件之间的 svn 历史记录。

修复很简单。您需要执行svn rm最新文件、svn cp正确的预删除文件修订,然后使用最新更新手动更新文件并重新签入。

例如,假设 myFile.h 在修订版 1234 中被删除:

$ 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
于 2016-11-29T19:23:32.787 回答