在我的SVN中继中,我删除了一个目录,并在一次提交中将其重新添加。现在,尝试获取“ svn日志”,我只看到该提交的历史记录,而没有我过去所做的所有更改。我知道这是有道理的,因为删除和重新添加了文件,但是我想还原整个内容并恢复我的历史记录。我怎样才能做到这一点?
其他信息和详细信息:我正在SVN中进行中继的分支。为了从主干更新分支,我不使用“ svn merge”命令而使用普通差异手动更新了文件。对于添加到主干的新文件,我在分支中手动“ svn添加”它们,对于删除来说也是如此(svn rm)。当我想将分支合并回主干时,我的一位同事建议我“ svn合并”分支(并且我解决了此过程中的许多冲突),然后“ svn merge --reintegrate”分支的主干和承诺到后备箱。除了所有冲突之外,我还删除了整个目录,将其提交到分支,再将其重新添加到分支,然后再次提交。现在,“ merge --reintegrate”带来了该目录的delete-readdition,提交导致所有历史记录消失。我真的只是想还原整个内容,所以我可以开始清理(我已经知道这一次如何使提交正确,但是我不知道如何还原和还原历史记录)。
编辑:我试图获取一些我知道已从此问题中删除的文件的日志。修订版4129是删除后重新添加的版本,修订版4120是我上次编辑其中一个文件的时间。“ svn log -r4129文件”仅列出我的最新提交,而没有历史记录。“ svn log -r4120文件”返回一行“ --------”。我认为与该问题的主要区别在于,我还在同一提交中重新添加了文件,而不仅仅是删除了文件。
在我的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] 删除。
我来说两句