Git子模块在分支上

时间:2012-12-24 08:13:31

标签: git git-submodules

我有一个在Bitbucket上托管的iOS项目,它使用MapBox-iOS-sdk,我将其作为git子模块加入。我跟踪的提交是在开发分支上,而不是发布分支。比如说,有些时候我试图将我的项目重新克隆到Bitbucket(通过git clone --recursive)。而且我也喜欢我使用子模块MapBox-iOS-sdk从MapBox更新到最新版本。所以我想拉。但首先它是一个“没有分支”,所以我进入了我自己项目的MapBox-iOS-sdk目录并做了一个

git checkout -b develop remotes/origin/develop

它给了我输出:

M   MapView/Map/SMCalloutView Previous HEAD position was 6c6be52... closes #148: incorporate @tmalloy's RMShape bezier curve enhancements
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'

然后,我做了一个git pull,它告诉我,我已经是最新的了。在这一点上,我的第一个问题是:我已经在Mapbox开发分支的最新提交中了吗?

此时,我在Mapbox-iOS-sdk目录中输入git status,我得到以下内容:

git status
# On branch develop
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   MapView/Map/SMCalloutView (new commits)
#
no changes added to commit (use "git add" and/or "git commit -a")

这是我的第二个问题:这究竟是什么意思?无论如何我都不想修改mapbox-ios-sdk,我想做的就是使用官方版本,但为什么要求我提交呢?如果我确实提交,在我看来我将修改一个新版本的Mapbox sdk,随后在我自己的项目中,我会标记这个特定的提交,这不在官方来源。试图拉我的项目的同事不会因为无法找到提交而遇到问题吗?

修改 SMCalloutView是一个git子模块,Mapbox sdk本身就是这个子模块。

编辑2: 当pwd位于Mapbox-ios-sdk基目录(我的项目的子目录)时发出所有命令。

编辑3: 该项目位于https://bitbucket.org/t2wu/container-bug

1 个答案:

答案 0 :(得分:0)

MapView/Map/SMCalloutViewMapBox-iOS-sdk子模块的子模块,因此您具有嵌套依赖项。而且是已更新的嵌套依赖项。

如果这些更正和更新对您的项目很重要,则需要递归更新子模块以确保您拥有所有更新。

然后,您需要决定是否/如何在超级项目中对这些依赖项进行更正,因为这会产生同步问题。

如果您只是使用特定版本,并且偶尔更改为较新的已发布版本,则递归更新并不困难(可能更容易,请参阅手册; - )

如果你也在纠正问题,你有一个非常棘手的问题:一次进入两个地方 - a)使用已发布的版本,b)使用你自己的更正版本,并尝试将两者连接起来。

考虑制作自己的fork并在fork中重新分配子模块,以允许您在同一个公共仓库中拥有这两个变量,并添加回上游仓库。但是你必须用两种变体维护你的叉子......