如何解决将包含多个git存储库的文件夹推送到github
我有一个包含多个git存储库的文件夹。我想将所有git存储库作为一个存储库推送到github,因为我不想在github上拥有太多单独的存储库。
例如,我的项目目录树:
projects
├── .git
├── some files or dir
├── project1
│ ├──.git
│ ├──some files or dir
├── project2
│ ├──.git
│ ├──some files or dir
├── ...
.
.
它有一些问题。一种是,当我在子存储库(例如project1)中进行更改时,我将不得不在project1以及父存储库项目中进行提交。
它会复制子存储库以及父存储库中的所有提交历史记录。
我已经阅读了有关git子模块和git子树的信息。
git子模块:
如果使用git-submodule,我会读到有关它的信息。当我推送父存储库时,子模块不会一起推送。
另外,如何添加本地存储库路径作为git子模块?本地路径是否保存在.gitmodules内部?
如果要更改本地存储库路径,还是要将本地存储库推送到远程并将路径更改为远程URL?以后如何更改参考?
git子树:
如果我使用git子树,似乎会将每个子存储库的所有提交历史记录复制到父存储库,并整体管理所有子存储库,这不是我想要的。
我希望每个项目都有自己的git,因此我可以轻松地添加,删除和移动项目。
有什么简单的方法可以处理这种monorepo?
解决方法
您正确地指出,将回购协议嵌入回购协议会导致复杂性,例如在每个回购协议中提交。
如果出于特定原因它们位于子目录中,并且您希望对其进行单独跟踪,则它们可能是子模块的候选者。
子模块更改必须单独推送。正如phd所指出的,您必须在整体历史或独立历史之间进行选择。
当子模块作为单独的实体维护时,子模块会很有用。例如,来自供应商的代码(不经常更改)或作为超级模块(主仓库)的服务层维护的HAL层。
要回答这个问题:“另外,如何将本地存储库路径添加为git子模块?本地路径是否保存在.gitmodules内部?” git submodule init命令将设置子模块存储库,并在超级模块中创建条目,以使超级模块知道子模块在哪里,以及子模块中的哪些提交被视为当前提交。
这里不是子模块完整教程的地方。它们可能很难使用,因此在决定使用它们之前,应仔细研究它们的文档。
有些人觉得它们非常有用,有些人讨厌它们。我认为这取决于您是否将它们用于适当的目的,并了解正确的程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。