git - 将“子”git repo 合并/移动到“父”git repo
问题描述
我对 git 很陌生,只将它用于简单的项目提交等,所以我可能犯了错误!
我最近开始在最初未版本化的代码上使用 git。我在 Visual Studio 2017 中使用 git。如果我没记错的话,Visual Studio 创建了存储库,我没有手动创建它们。
我在 Visual Studio 的同一解决方案中有 4 个项目。我最近注意到 1 个特定项目没有通知我未提交的更改(Visual Studio 将图标放在文件旁边),它不会让我提交更改,但我可以看到提交历史记录。使用 Git GUI 或 Bash,我可以看到未暂存的更改等并提交它们。
查看文件资源管理器,我可以看到解决方案根目录中有一个 git repo,而 3 个正在工作的项目目录中没有 git repo。但是在无法正常工作的项目中,它有自己的 git repo。我不确定这是怎么发生的。
我认为这会导致冲突,阻止视觉工作室识别我的更改。我想基本上删除项目目录中的“子”git repo,并让“父”repo 管理整个解决方案。
我尝试按照这种方法合并两个存储库(来自Windows 上的 Git GUI:合并冲突):
cd path/to/project-b
git remote add project-a /path/to/project-a
git fetch project-a --tags
git merge --allow-unrelated-histories project-a/master # or whichever branch you want to merge
git remote remove project-a
我可以在我的提交历史中看到“子”回购的历史似乎已被合并,但在有问题的项目中仍未检测到更改。
我重命名了子 git repo 以查看是否有帮助,但没有改变。
我需要遵循一个流程来允许我合并两个存储库,并让解决方案级别的 git repo 管理所有项目吗?
如果可能,最好保留子项目的提交历史。
解决方案
我在这里找到了一个合理的解决方案:How To: Merge a Git submodule into its main repository
我会在这里放一些摘录,以防将来删除该文章。本文将引导您将 src/models 中脚本的子模块合并到主存储库中。
主要思想是在子模块目录的根目录下建立一个新的目录结构,就好像它是父目录一样,将所有跟踪的文件移动到该目录中,然后推送到远程。
在模型目录中:
mkdir -p src/models git ls-tree master --name-only | xargs -I{} git mv {} src/models git commit -m 'Move all files into src/models directory' git push
然后删除对子模块的所有引用,并删除目录:
Git 子模块元数据存储在 .gitmodules 文件中:
从该文件中删除子模块。
git add .gitmodules
.git/config 有一个类似的条目,也可以编辑该文件。
git rm --cached models
rm -rf .git/modules/models
git commit -m 'Remove models submodule'
rm -rf models
然后从远程合并子模块文件:
在主存储库中运行命令:
git remote add models-origin git@github.com/exampleUser/models git fetch models-origin git merge --allow-unrelated-histories models-origin/master git remote remove models-origin
对我自己来说,我遇到了一个奇怪的情况,大多数子模块引用都不存在,我得到了错误:
No submodule mapping found in .gitmodules for path 'submodule/path'
这个答案帮助了我:https : //stackoverflow.com/a/13394710/1324919 删除缓存的子模块后,我必须运行子模块更新:
git rm --cached submodule-name
git submodule update --init
现在我有来自子模块的历史记录,主仓库正在跟踪文件。看起来它并不容易/不可能恢复。至少我有那里的历史,我可以阅读并在必要时复制/粘贴。
推荐阅读
- laravel - 如何从选择标签中的嵌套数组中获取数据
- ruby-on-rails - has_one 关系在当前对象中添加另一个对象
- python-3.x - 如何使用熊猫从 CSV 文件中删除行数据?
- node.js - 如何改进池的错误处理
- websocket - 暮光之城
websocket流到signalR asp.net core 3.0 - c++ - 如何让它看起来像飘落的雪花?
- asp.net-core - ¿ 有没有办法在每个控制器动作上调用一个类方法?
- oracle - 插入了奇怪的 SNAPTIME$$ 值
- algorithm - 给定一个矩阵,如果行除列,则单元格称为好单元格
- sql - 如何找出查询的哪一部分导致错误?