【问题标题】:Concatenate the history of two Git repositories?连接两个 Git 存储库的历史?
【发布时间】:2012-04-27 17:12:11
【问题描述】:

我有一个旧的 Git 存储库,称之为 app。然后,一年后,我想从头开始重建应用程序,所以我做了一个新的 repo,叫它app-2

现在,我意识到我应该创建一个新分支或其他东西,而不是一个新的 repo,因为我想将 app-2 的历史移动到 app 之上,然后摆脱 app-2这样app 现在就拥有了app + app-2 的所有历史记录。

这可能吗?

更新:

我尝试通过删除app.git 目录除外)中的所有文件并提交来“重置”app 存储库。那么:

cd ~/Projects/app-2
git format-patch --stdout --root master > ../app/app-2-patches.txt
cd ../app
git am app-2-patches.txt

但是,我在 app-2 有分支机构的地方遇到了冲突。

是否可以在保留app-2 历史分支结构的同时应用来自app-2 的提交?

【问题讨论】:

  • 是否有理由需要它们在同一个仓库中?如果是这样,他们是否有理由必须在同一个分支中?为什么不单独建立一个分支来存储旧版本的历史记录,然后让您当前的新应用按原样成为主分支?

标签: git merge repository history commit


【解决方案1】:

您可以为此使用 git 的嫁接点。首先将app 的历史从远程拉到app-2,然后按照说明进行操作,例如在this answer

【讨论】:

  • 具体:您可以使用git filter-branch将嫁接的历史变成“真实”的历史,然后去掉嫁接点。请记住,这将更改您的所有提交 ID!
【解决方案2】:

第一步是在一个 repo 中获取两个应用程序;第二步是以某种合理的方式合并它们。

对于第一步,我会说将 app-2 中的所有存储库分支推送到应用程序存储库中的分支:

$ cd /path/to/app-2
$ git remote add app-repo /path/to/app
$ git push app-repo master:app-2-master     # master in app-2 goes to app-2-master in app repo
# repeat for other branches in app-2

现在,在应用程序存储库中,您拥有它的所有分支和所有 app-2 分支。假设您(想要)将 app-2 视为派生自 app.然后你 rebase 所有 app-2 on app :

$ cd /path/to/app
$ git checkout app-2-master
$ git rebase master

这可能涉及解决冲突的大量工作,但 git 也会为您完成大量工作。

【讨论】:

  • nit: git add remote 应该是 git remote add
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2023-03-17
  • 1970-01-01
  • 2012-10-14
相关资源
最近更新 更多