为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Git
狐的传说 2019-08-05 16:49:41
如何将现有的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)可以这样做,还是我必须使用子模块?
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

如果您想保留第二个存储库的确切提交历史记录,因此也保留了将来轻松合并上游更改的功能,那么这就是您想要的方法。它导致子树的未修改历史记录被导入到您的仓库中,加上一个合并提交将合并的存储库移动到子目录。


git remote add XXX_remote <path-or-url-to-XXX-repo>

git fetch XXX_remote

git merge -s ours --no-commit --allow-unrelated-histories XXX_remote/master

git read-tree --prefix=ZZZ/ -u XXX_remote/master

git commit -m "Imported XXX as a subtree."

您可以跟踪上游更改,如下所示:


git pull -s subtree XXX_remote master

Git在进行合并之前会根据其自身的位置计算出来,因此您无需在后续合并中指定前缀。


2.9之前的Git版本:您不需要将--allow-unrelated-histories选项传递给git merge。


使用read-tree和跳过该merge -s ours步骤的另一个答案中的方法实际上与使用cp复制文件并提交结果没有什么不同。


查看完整回答
反对 回复 2019-08-05
?
炎炎设计

TA贡献1808条经验 获得超4个赞

git-subtree是一个脚本,专门用于将多个存储库合并为一个同时保留历史记录(和/或拆分子树历史,尽管这似乎与此问题无关)的用例。它自1.7.11发布以来作为git树的一部分进行分发。

要将<repo>版本的存储库合并<rev>为子目录<prefix>,请使用git subtree add以下命令:

git subtree add -P <prefix> <repo> <rev>

git-subtree 以更加用户友好的方式实现子树合并策略

对于您的情况,在存储库YYY中,您将运行:

git subtree add -P ZZZ /path/to/XXX.git master


查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 764 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信