如何将现有的Git存储库导入另一个?

如何将现有的Git存储库导入另一个?

我在一个名为XXX的文件夹中有一个Git存储库,我有第二个名为YYY的 Git存储库。

我想将XXX存储库作为名为ZZZ的子目录导入YYY存储库,并将所有XXX的更改历史记录添加到YYY

文件夹结构之前:

XXX
 |- .git
 |- (project files)YYY
 |- .git
 |- (project files)

文件夹结构后:

YYY
 |- .git  <-- This now contains the change history from XXX
 |-  ZZZ  <-- This was originally XXX
      |- (project files)
 |-  (project files)

可以这样做,还是我必须使用子模块?


狐的传说
浏览 772回答 3
3回答

慕哥6287543

如果您想保留第二个存储库的确切提交历史记录,因此也保留了将来轻松合并上游更改的功能,那么这就是您想要的方法。它导致子树的未修改历史记录被导入到您的仓库中,加上一个合并提交将合并的存储库移动到子目录。git remote add XXX_remote <path-or-url-to-XXX-repo>git fetch XXX_remotegit merge -s ours --no-commit --allow-unrelated-histories XXX_remote/mastergit read-tree --prefix=ZZZ/ -u XXX_remote/mastergit commit -m "Imported XXX as a subtree."您可以跟踪上游更改,如下所示:git pull -s subtree XXX_remote masterGit在进行合并之前会根据其自身的位置计算出来,因此您无需在后续合并中指定前缀。2.9之前的Git版本:您不需要将--allow-unrelated-histories选项传递给git merge。使用read-tree和跳过该merge -s ours步骤的另一个答案中的方法实际上与使用cp复制文件并提交结果没有什么不同。

炎炎设计

git-subtree是一个脚本,专门用于将多个存储库合并为一个同时保留历史记录(和/或拆分子树历史,尽管这似乎与此问题无关)的用例。它自1.7.11发布以来作为git树的一部分进行分发。要将<repo>版本的存储库合并<rev>为子目录<prefix>,请使用git subtree add以下命令:git&nbsp;subtree&nbsp;add&nbsp;-P&nbsp;<prefix>&nbsp;<repo>&nbsp;<rev>git-subtree&nbsp;以更加用户友好的方式实现子树合并策略。对于您的情况,在存储库YYY中,您将运行:git&nbsp;subtree&nbsp;add&nbsp;-P&nbsp;ZZZ&nbsp;/path/to/XXX.git&nbsp;master
打开App,查看更多内容
随时随地看视频慕课网APP