将不相关的存储库导入另一个存储库分支

Import unrelated repository to another repository branch

我在 Whosebug 上尝试了很多答案,但似乎没有一个能完全按照我想要的方式工作。基本上我有一个主存储库,我已经创建了一个分支(例如:'feature'),我需要添加另一个完全不相关的存储库作为文件夹到这个 'feature' 分支。我还需要合并导入存储库中的历史记录。我该怎么做?

一个小插图:

"Project to import"
- "XXX folder"
- "YYY file"

"Main repository" - "feature-branch"
- "ABC folder"
- "Feature folder" - #How it should look after merging
-- "Imported files from other repo"

可能的解决方案。

  • 添加导入 远程仓库。 git remote add imported <url_to_imported>.
  • 获取您需要的分支(本例中为impbr)。 git fetch imported impbr:impbr.
  • 切换到基于 imported repo 的 imported 分支的新创建的本地分支。 git checkout -b impbr remotes/imported/impbr.
  • 现在您可以删除 导入 远程,因为其他步骤不需要它。 git remote remove imported.
  • 根据需要修复该分支中的目录结构:创建目标文件夹 "Feature",将所有内容("XXX folder"、"YYY file")移动到该文件夹​​,提交所有这些更改。新提交应该只包含重命名。 git mv . Feature/ && git add --all . && git commit -m 'Moved all files to "Feature" dir.'
  • 切换到feature分支,合并fixed分支impbr进去。 git checkout feature && git merge impbr.
  • 现在您可以安全地删除 impbr 因为它不再需要了。 git branch -d impbr.

我假设您要将合并的存储库添加到新目录。

尝试以下命令

git remote add unrelated <url-of-other-repo>
git fetch unrelated <branch-in-other-repo>
mkdir -p <path/to/new/code>
touch <path/to/new/code/>temp
git add <path/to/new/code/>temp
git commit -m 'Bring in new directory'
git merge --no-ff unrelated/<branch-in-other-repo> -s recursive -Xsubtree=<path/to/new/code>
git rm <path/to/new/code/temp>
git commit --amend --no-edit
git remote remove unrelated 

(您需要添加临时文件,因为 Git 不跟踪空目录。)

这将为您提供包含双方所有历史记录的常规合并提交。