git子模块丢失上游远程

时间:2014-02-04 22:49:45

标签: git github git-submodules

我的android项目有一个非常有趣的git布局......一切都运行得很漂亮。

该结构基本上是一个具有几个内部子模块的主项目。其中一个内部子模块本身有一个子模块。

我可以在克隆项目时抛出--recursive标志,或者我可以定期克隆它,然后遍历子模块文件夹并执行

git submodule init
git submodule update

我最近决定将我在github上使用的子模块分叉是一个更好的主意。原点是我的帐户Github url到我的分叉回购,我添加了一个“上游”遥控器,指向项目创建者的主人,以便我可以不时提取他们的最新信息。

我刚刚使用--recursive标记在新擦除的计算机上克隆了我的项目,这是因为分支每个子模块并且一切都运行良好。

所以这就是问题......

我对整个过程的唯一问题是我的每个子模块都没有跟上那里的上游...我可以cd进入每个子模块并执行git remote show并且仅{ {1}}可见。

通过并重新添加origin遥控器并不是什么大不了的事,但我想知道我的问题是什么。

另一个小问题:有没有办法在每个子模块上upstream的单个递归克隆命令中添加一个内联标志?

任何想法?

2 个答案:

答案 0 :(得分:2)

  

有没有办法在每个子模块上git checkout master的单个递归克隆命令中添加一个内联标志?

不是完全你问的是什么,但你可以配置一个子模块来跟随主人:见git submodule tracking latest

git submodule update --init --recursive之后,git submodule update --remote --recursive会将已分离的HEAD更新为上次提取的远程HEAD。

要真正检查并更新子模块,您需要一个别名,如blog post中所示:

git config --global alias.up-sub '!f() { cd $1 && git checkout master && git pull && git submodule update --init --recursive; }; f'
  

现在,要更新'框架'子模块,我们可以这样做:

git up-sub framework
  

使用&&代替;,以防止在错误输入子模块名称时丢失工作。

答案 1 :(得分:0)

我联系了Github上的好人来回答分叉存储库的问题,而不是跟踪添加的上游,这就是我得到的回复:

  

每个克隆都有自己的遥控器列表。因此,每次创建新克隆时,您都需要添加自己喜欢的遥控器。出于这个原因,通常最好在您使用的每台计算机上安装一个存储库,然后在发布时提取更改和更新,而不是为每个任务创建新的克隆。