隐藏git子模块子目录直到子模块初始化调用

时间:2017-07-13 02:07:10

标签: git git-submodules

问题设置,跳到问题的换行符。

我正在研究拥有它自己的git repo的projectA。这个projectA在projectB中有一些可选的工具,它们是它自己独立的git repo。根据我的理解,这听起来像一个git子模块情况,使projectB成为projectA的一个子模块。

要进行此设置,请使用git submodule add projectB。这将在projectA中创建一个子目录,其作用类似于projectB的链接,该信息保存在.gitmodule中。您需要同时提交此文件和"子目录"。我可以继续开发projectA而无需关注projectB。当我对projectB进行更新并推送它们时,我可以使用git submodule update --remote在projectA中更新projectB。这改变了projectA中的projectB子目录,通过更新projectB的当前版本(不是projectA跟踪)和子目录文件本身(由projectA跟踪)。

现在假设第三个用户想要使用projectA并生成projectC,但不需要projectB。他们使用git clone projectA,他们获得projectA和.gitmodule的所有内容以及projectB的空子目录。我希望他们仍然可以获得.gitmodule以便他们将来可以选择,但是有可能他们没有获得projectB的空子目录吗?

我的问题是,在用户执行git submodule init>之前,可以隐藏projectA中子模块projectB的子目录。 git submodule update

我担心这是不可能的,因为该子目录实际上是一个特殊的git文件,它告诉我们想要获取projectB的哪个提交,我认为这个提交保存在.gitmodule中。如果有更好的方法可以实现我想要完成的任务或任何git hacks,我感兴趣。

1 个答案:

答案 0 :(得分:1)

  

我的问题是,在用户执行projectB>之前,可以隐藏projectA中子模块git submodule init的子目录。 git submodule update

是:为第三位用户分支。
除了你需要在之前从提交启动那个分支时,你添加了子模块(这样就没有子目录)。

然后你需要将当前分支合并到该分支without committing:这样,你可以删除.gitmodules和子文件夹(如果它们只保留.gitmodules,Git会抱怨指定路径上没有子模块。) 承诺完成合并。

现在,从该分支到您的任何合并都不会删除.gitmodules和子文件夹,因为新分支删除了自创建以来的那些(因此启动的重要性)在创建子模块之前提交的分支。

如果以后新用户想要获取子模块,他/她可以checkout that file from your branch

git checkout yourBranch -- .gitmodules
git checkout yourBranch -- a/submodule