这个问题可能已经有人问过了,如果有人能找到合适的重复问题,我将不胜感激。不过,在将其标记为重复之前,请务必仔细阅读问题。
前段时间,我无意中重命名了一组文件,但没有在 TortoiseSVN 中正确重命名文件。我没有将删除的文件与其重命名关联起来,而是提交了删除文件并添加了其他文件。现在我想修复这两个文件之间的关联,以便以前的历史记录显示在该文件的日志中。我有一种想法,即恢复可能会有所帮助,但我承认我对 TortoiseSVN 中的恢复工作原理有些不了解,而且它们可能没有实际上是解决方案。
为了澄清起见,我想:
- 重命名文件,以便 Tortoise SVN
log
包含其以前的历史记录- 我知道这可能是一个多步骤的过程,我的一般理解是该过程将类似于以下内容:
- 恢复更改
- 以正确的方式重命名文件
- 得到后退自原始提交以来的更改
- 使用这特定过程,我不确定如何正确处理步骤 3;理想情况下,我每个旧的单独提交都会以相同的方式累积到相同的文件中,但我不知道该怎么做。或者我可能被误导了,我真的应该只获取最新提交的内容并将其添加为对这些文件的下一个提交。
- 我知道这可能是一个多步骤的过程,我的一般理解是该过程将类似于以下内容:
请注意,我已经引用了以下链接,虽然有帮助,但并未直接回答我的问题:
答案1
关于步骤 3,我认为您可以同时执行您提到的两个步骤。但是,要恢复单个提交,需要一个分支:分支当前主干,在删除/添加之前恢复,执行并提交正确的重命名,将主干中每个感兴趣的提交合并并提交到您的分支,将分支合并到您的主干。这将导致主干中只有一个提交,包括所有更改,但 SVN 将能够在blame
等过程中区分您以前的单个提交。
您可以在主干上执行相同操作,只需在正确重命名后用还原前的内容覆盖感兴趣的文件即可。您可以单独覆盖所有更改,也可以只覆盖文件的最新状态,这取决于您的喜好。请记住,SVN 会始终将您以前的个人提交保留在父目录的历史记录中,因此可能没有必要为您感兴趣的具体文件恢复每个提交。
最后,你可以轻松地尝试所有这些方法,只需创建当前主干的分支,并查看在应用更改之前/之后各个文件、其父目录等的日志是什么样子。现在,你可能甚至不再关心正确的重命名,而倾向于只保留新文件的单个提交。最后,你出于某种原因重命名它们,那么你将来有多大可能关心旧状态?
为了让事情变得更复杂,您甚至可以将当前存储库转储到您删除/添加之前的修订版本,并将其用作新基础,并进行适当的重命名和应用各个更改以再次提交。这样,您就再也不会有任何旧的提交消息,并且历史记录非常干净。不过,不要认为这值得。