将包含多个git存储库的文件夹推送到github

时间:2020-08-11 05:42:46

标签: 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?

1 个答案:

答案 0 :(得分:0)

您正确地指出,将回购协议嵌入回购协议会导致复杂性,例如在每个回购协议中提交。

如果出于特定原因它们位于子目录中,并且您希望对其进行单独跟踪,则它们可能是子模块的候选者。

子模块更改必须单独推送。正如phd所指出的,您必须在整体历史或独立历史之间进行选择。

当子模块作为单独的实体维护时,

子模块会很有用。例如,来自供应商的代码(不经常更改)或作为超级模块(主仓库)的服务层维护的HAL层。

要回答这个问题:“另外,如何将本地存储库路径添加为git子模块?本地路径是否保存在.gitmodules内部?” git submodule init命令将设置子模块存储库,并在超级模块中创建条目,以使超级模块知道子模块在哪里,以及子模块中的哪些提交被视为当前提交。

这里不是子模块完整教程的地方。它们可能很难使用,因此在决定使用它们之前,应仔细研究它们的文档。

有些人觉得它们非常有用,有些人讨厌它们。我认为这取决于您是否将它们用于适当的目的,并了解正确的程序。

相关问题