我有一个托管在Bitbucket上的iOS项目,它使用MapBox,我把它合并为一个git子模块。我跟踪的提交位于开发分支上,而不是发布分支上。比如说,一些时候,当我试图从Bitbucket重新克隆我的项目时(通过git克隆--递归)。我也喜欢我使用的子模块MapBox被更新为来自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目录中键入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的一个新版本,随后在我自己的项目中,我将标记这个特定的提交,而这个提交不在官方源代码上。我的同事谁试图拉我的项目是不是有问题,因为提交是找不到的?
编辑: SMCalloutView是Mapbox本身包含的一个git子模块。
编辑2:所有命令都是在pwd位于Mapbox基本目录(我的项目的子目录)时发出的。
发布于 2012-12-24 04:18:56
MapView/Map/SMCalloutView
是MapBox-iOS-sdk
子模块的子模块,因此您有一个嵌套的依赖项。已经更新的是嵌套依赖关系。
如果这些更正和更新对您的项目很重要,您将需要递归地更新子模块,以确保您拥有所有的更新。
然后,您需要决定是否/如何将这些依赖项更正为您的超级项目的一部分,因为这将导致同步问题。
如果您只是使用特定的版本,并且偶尔更改为更新的发布版本,那么递归更新就不难了(这可能更容易,请参阅手册;-)
如果你也在纠正问题,你有一个非常棘手的问题,那就是同时出现在两个地方--( a)使用已发布的版本,( b)使用自己的修正版本,并试图将两者连接起来。
考虑制作自己的分叉,并将分叉上的子模块重新定位,这样您就可以在同一个公共回购中拥有两个变体,并添加一个上游回购。但是你必须用两个变体来维护你的叉子..。
https://stackoverflow.com/questions/14018836
复制