Git 从其他存储库中删除历史信息?
Git remove history information from other repositories?
我试着解释一下我的问题。
在 2015 年之前,我们有一个大的 SVN 存储库,然后有人认为将一些项目移动或复制到一个较小的存储库中会很好。
现在我们开始从 SVN 转到 GIT 并转换存储库,GIT 中的历史记录从项目移动或复制的那一天开始。
因为我们还需要旧的历史记录,所以我搜索并发现可以将新存储库的历史记录与旧存储库的历史记录合并。
为此,我使用“git replace”将新存储库中的第一个历史记录条目替换为大存储库历史记录的前不久的条目,这是新历史记录的来源。
这项工作和我只丢失了新存储库的第一个条目和项目从旧历史中移出之前的最后一个条目。
但是现在我有了大型存储库中所有项目的历史记录,并且 GIT 存储库现在非常大。
有什么方法可以删除不在此存储库中的项目的历史记录和所有项目吗?
感谢您的帮助!
是的。通常从存储库中删除内容是非常有问题的,但由于您刚刚开始使用它(因此可能很少有克隆或对当前提交的引用)这可能是您的最佳选择。
您可以使用 rebase --interactive
并按您想要的方式编辑历史记录,但实际上,由于您刚刚开始使用该存储库,您可能应该抓住机会删除 replace
(这是一个可能有问题的 hack)。
所以你应该重新开始重新转换存储库,只接受(和所有)你想要的提交。
如果你不熟悉这些东西你最好找人来进行转换,你已经在学习过程中遇到标准的操蛋了git,如果您还从一个混乱的存储库开始,您正在寻找未来几个月和几年的地狱般的体验。
另一方面,如果您已经在 git 存储库上完成了重要的新工作,并且您不想更改该历史记录,好吧,保留它并仅重新转换旧历史记录.
然后删除之前的 replace
并添加一个新的到 link 重新转换的历史记录。
请注意,使用 replace 时,您不需要丢失任何提交。更好地研究它或请更有经验的人来做。我不想在这里做一个详细的逐步解释,但你基本上必须用它的相同副本替换历史的最近部分的第一次提交,除了它的父编辑为最后一次(最近)旧历史的提交(当然,这是在您将旧历史的对象导入到较新的存储库之后)。
我试着解释一下我的问题。 在 2015 年之前,我们有一个大的 SVN 存储库,然后有人认为将一些项目移动或复制到一个较小的存储库中会很好。 现在我们开始从 SVN 转到 GIT 并转换存储库,GIT 中的历史记录从项目移动或复制的那一天开始。 因为我们还需要旧的历史记录,所以我搜索并发现可以将新存储库的历史记录与旧存储库的历史记录合并。 为此,我使用“git replace”将新存储库中的第一个历史记录条目替换为大存储库历史记录的前不久的条目,这是新历史记录的来源。 这项工作和我只丢失了新存储库的第一个条目和项目从旧历史中移出之前的最后一个条目。 但是现在我有了大型存储库中所有项目的历史记录,并且 GIT 存储库现在非常大。 有什么方法可以删除不在此存储库中的项目的历史记录和所有项目吗? 感谢您的帮助!
是的。通常从存储库中删除内容是非常有问题的,但由于您刚刚开始使用它(因此可能很少有克隆或对当前提交的引用)这可能是您的最佳选择。
您可以使用 rebase --interactive
并按您想要的方式编辑历史记录,但实际上,由于您刚刚开始使用该存储库,您可能应该抓住机会删除 replace
(这是一个可能有问题的 hack)。
所以你应该重新开始重新转换存储库,只接受(和所有)你想要的提交。
如果你不熟悉这些东西你最好找人来进行转换,你已经在学习过程中遇到标准的操蛋了git,如果您还从一个混乱的存储库开始,您正在寻找未来几个月和几年的地狱般的体验。
另一方面,如果您已经在 git 存储库上完成了重要的新工作,并且您不想更改该历史记录,好吧,保留它并仅重新转换旧历史记录.
然后删除之前的 replace
并添加一个新的到 link 重新转换的历史记录。
请注意,使用 replace 时,您不需要丢失任何提交。更好地研究它或请更有经验的人来做。我不想在这里做一个详细的逐步解释,但你基本上必须用它的相同副本替换历史的最近部分的第一次提交,除了它的父编辑为最后一次(最近)旧历史的提交(当然,这是在您将旧历史的对象导入到较新的存储库之后)。