恢复SVN中已删除文件的历史记录

伊扎基

在我的SVN中继中,我删除了一个目录,并在一次提交中将其重新添加。现在,尝试获取“ svn日志”,我只看到该提交的历史记录,而没有我过去所做的所有更改。我知道这是有道理的,因为删除和重新添加了文件,但是我想还原整个内容并恢复我的历史记录。我怎样才能做到这一点?

其他信息和详细信息:我正在SVN中进行中继的分支。为了从主干更新分支,我不使用“ svn merge”命令而使用普通差异手动更新了文件。对于添加到主干的新文件,我在分支中手动“ svn添加”它们,对于删除来说也是如此(svn rm)。当我想将分支合并回主干时,我的一位同事建议我“ svn合并”分支(并且我解决了此过程中的许多冲突),然后“ svn merge --reintegrate”分支的主干和承诺到后备箱。除了所有冲突之外,我还删除了整个目录,将其提交到分支,再将其重新添加到分支,然后再次提交。现在,“ merge --reintegrate”带来了该目录的delete-readdition,提交导致所有历史记录消失。我真的只是想还原整个内容,所以我可以开始清理(我已经知道这一次如何使提交正确,但是我不知道如何还原和还原历史记录)。

编辑:我试图获取一些我知道已从此问题中删除的文件的日志修订版4129是删除后重新添加的版本,修订版4120是我上次编辑其中一个文件的时间。“ svn log -r4129文件”仅列出我的最新提交,而没有历史记录。“ svn log -r4120文件”返回一行“ --------”。我认为与该问题的主要区别在于,我还在同一提交中重新添加了文件,而不仅仅是删除了文件。

大卫·W

在我的SVN中继中,我删除了一个目录,并在一次提交中将其重新添加。

不好,程序员!没有甜甜圈适合您!

您要做的是创建一个完全不同的目录,但是名称相同。对您来说,它们看起来一样。对于Subversion,这两个目录彼此无关。

为什么要删除旧目录并创建一个具有相同名称的新目录?

您要还原吗?在中找到您删除并添加目录的版本,svn log然后尝试以下操作:

$ svn merge -c -$rev

哪里$rev是你删除并重新添加在目录中的日志中的修订。这样可以删除您在Subversion中所做的任何更改。

您可以-c $rev在命令中指定多个如果这产生了冲突,则可能必须采取略有不同的方法。在那个版本中,您将必须使用钉扎来固定目录修订,就像在先前发行版中那样。假设您的日志显示您删除foo了版本12345中的目录,现在您需要将其取回:

首先,删除当前目录foo

$ svn delete foo

现在,当该目录仍然存在时,将其foo先前的修订复制删除。由于它是在12345版中删除的,因此我们需要从12344版中进行复制:

$ svn cp $REPO_URL/trunk/foo@12344 .

这应该还原旧副本。

其他信息和详细信息:我正在SVN中进行中继的分支。为了从主干更新分支,我不使用“ svn merge”命令而使用普通差异手动更新了文件。对于添加到主干的新文件,我在分支中手动“ svn添加”它们,对于删除来说也是如此(svn rm)。

我要喝一杯

您正在执行的是合并,但没有告诉Subversion您进行了合并。如果您现在在Subversion中进行合并,则会遇到一堆合并冲突,因为Subversion会在分支和主干中看到文件更改的同一区域。

当您向分支添加新文件时,它与中继中的文件完全不同。它可能是相同的名称,并且在同一目录中,但是由于您将其添加到了分支中,因此您无法将该文件的主干中的更改合并到该分支中。

如果可能,请删除分支上的文件,然后从中继中复制它。这样,干线中的更改可以合并到分支中。

这使我们了解到非常非常重要的内容:不要通过添加操作来创建分支。始终从主干(或从何处分支)复制分支。否则,该分支和主干不会共享相同的历史记录。如果尚未完成该初始副本,则永远无法使用Subversion合并。分支和主干没有共同的历史记录。

有时,将更改手动添加到分支中比将其从主干合并起来要容易得多。例如,分支上的更改与主干上的更改不同。在这种情况下,您可以使用--record-only来让Subversion知道您是否进行了合并:

 $ svn merge --record-only -r12345 $REPO/trunk .

上面的记录将记录更改集合12345的合并已在分支上完成,并且Subversion不会尝试再次进行合并。

合并是您的朋友。不要试图绕开它。一旦您了解Subversion在分支与要合并的分支/主干之间需要一个共同的祖先,那么Subversion就可以很好地进行合并。使用svn cp设置这种关系。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

恢复带有git历史记录的已删除文件

检查已删除文件的历史记录

从git历史记录中删除已删除的文件夹

在TFS中还原已移动文件的历史记录

Git:如何在项目提交历史记录中查找已删除的文件?

如何在项目提交历史记录中查找已删除的文件?

如何在Perforce中查看已删除文件/目录的历史记录?

如何清除 Google Chrome 桌面中仅已删除文件的下载历史记录

清除已删除文件的git历史记录,保留重命名的文件历史记录

Git-从分支的历史记录中删除文件

从所有git历史记录中删除文件

如何从Git历史记录中删除文件?

从 git 历史记录中删除文件的某些内容

从Git历史记录中删除大文件

如何从git历史记录中删除“太大”文件?

如何从CVS历史记录中永久删除文件

从GIT历史记录中删除文件

从Bash历史记录文件中删除某行

缺少删除文件历史记录中的行 (git)

从 git 历史记录中永久删除文件

如何恢复被另一个文件替换的文件的 SVN 历史记录?

TFS删除文件的历史记录

如何恢复删除历史记录的分叉的 git 历史记录?

从历史记录中删除大文件/在本地完全删除历史记录,然后将其推送到源

删除历史记录文件后,为什么在历史记录中仍然有较旧的命令?

GitKraken中的文件历史记录

SVN-删除后从文件还原历史记录并重新创建它

在Jupyter Notebook中恢复命令历史记录?

如何在zsh中修复和恢复“损坏的历史记录文件”?