1

我有一个托管在 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 开发分支的最新提交中?

此时,我输入git statusMapbox-iOS-sdk 目录,我得到以下内容:

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 是 Mapbox sdk 本身合并的一个 git 子模块。

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

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

4

1 回答 1

0

MapView/Map/SMCalloutView是您的子模块的MapBox-iOS-sdk子模块,因此您有一个嵌套的依赖项。并且更新的是嵌套依赖项。

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

然后,您需要决定是否/如何将这些依赖项作为超级项目的一部分进行更正,因为这会产生同步问题。

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

如果您还要纠正问题,那么您会遇到一个非常棘手的问题,即同时出现在两个地方 - a) 使用已发布的版本,b) 使用您自己的更正版本,并尝试在后面将两者结合起来。

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

于 2012-12-24T12:18:56.230 回答