微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将一个 repo 移动到另一个 repo 文件夹并保留 git 历史记录?

如何解决如何将一个 repo 移动到另一个 repo 文件夹并保留 git 历史记录?

我想将我的项目(例如project-A)移动到monorepo并保留整个git历史。现在当使用

将远程存储库添加到新存储库时
git remote add A <remote-repo-project-A>

并使用

拉取项目
git pull project-A master --allow-unrelated-histories

文件文件夹 monorepo\src 而不是 monorepo\apps\project-A\src

基本上我想将 repo-A 移动到具有以下结构的新仓库:

repo-A
---- src

new repo
---- projects
---- ---repo-A(rename to project-A)
---- ------src

解决方法

在 Git 中,历史就是提交。提交历史。因此,对于您没有问过的问题的字面答案——“我可以在不更改提交内容的情况下更改提交内容吗”——当然是。更重要的是,任何提交都不能被任何人或任何人更改,因为提交是编号,并且数字是其内容的加密校验和。因此,如果您更改有关提交的任何内容,则会更改 编号

然而,一切都没有丢失。您可以将提交复制到新的和改进的提交,它与原始提交的唯一区别是......好吧,让我们以一次提交为例。原始提交说文件被命名为 src/file1src/file2 等,以下是它们的内容:...提交是由____在____上进行的,其父项是... 新的和改进的提交说文件被命名为 projects/A/src/file1projects/A/src/file2 等,这里是它们的内容......提交是由(同一个人)完成的在(同一日期)及其父项是(原始提交的父项的新改进副本)。

这个复制过程繁琐但简单,可以通过 git filter-branchgit filter-repogit move directory to another repository while keeping the history 中所示的各种其他工具(以及许多其他非常相似的问题)来完成。请注意,如果您有其他其他存储库的提交(或者更确切地说,是新的和改进的提交的副本)希望在此存储库中拥有,您必须决定是否转换每组提交一次一个,然后尝试合并(合并)提交以合并它们,或者编写一个更高级过滤器,尝试一次合并所有其他存储库的提交。也就是说,一个新的和改进的提交可能代表来自其他存储库的两个或多个“原始”提交。这是一个困难得多的命题,现有的过滤器程序做简单直接的事情并不适合你。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。