【发布时间】:2021-09-19 02:32:15
【问题描述】:
我对 git 很陌生,只将它用于简单的项目提交等,所以我可能会犯错误!
我最近开始在最初未版本化的代码上使用 git。我在 Visual Studio 2017 中使用 git。如果我没记错的话,Visual Studio 创建了存储库,我没有手动创建它们。
我在 Visual Studio 的同一解决方案中有 4 个项目。我最近注意到 1 个特定项目没有通知我未提交的更改(Visual Studio 将图标放在文件旁边),它不会让我提交更改,但我能够看到提交历史记录。使用 Git GUI 或 Bash,我可以看到未暂存的更改等并提交它们。
查看文件资源管理器,我可以看到解决方案根目录中有一个 git repo,而 3 个正在工作的项目目录中没有 git repo。但是在无法正常工作的项目中,它有自己的 git repo。我不确定这是怎么发生的。
我认为这导致了冲突,导致 Visual Studio 无法识别我的更改。我想基本上删除项目目录中的“子”git repo,并让“父”repo 管理整个解决方案。
我尝试按照这种方法合并两个 repos(来自Git GUI on Windows: merging conflicts):
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 看看是否有帮助,但没有改变。
我需要遵循一个流程来合并两个 repo,并让解决方案级别的 git repo 管理所有项目吗?
如果可能,最好保留子项目的提交历史。
【问题讨论】:
-
存储库由提交(不是文件)组成。一个存储库不能包含另一个存储库:相反,它将具有对另一个存储库的引用。 Git 将此称为 子模块。如果您已经有一个子模块,并且想要“去子模块化”它,这往往很困难:据我所知,没有工具可以做到这一点。
-
感谢您的帮助。我发现我可以使用以下命令取消初始化子模块:git submodule deinit。这个程序可能对我的情况有所帮助吗?
-
如果你取消初始化子模块,然后完全删除内部
.git,你可以将子模块中的文件添加到超级项目中。这不会将子模块中的 commits 添加到超级项目中,因此您实际上已经丢弃了子模块中的所有历史记录。如果没问题,那就是摆脱这种困境的简单方法。如果没有,就没有简单的出路。 -
感谢您的帮助,我按照本文的建议尝试从子模块中获取一些历史记录。
标签: git visual-studio version-control visual-studio-2017 git-merge