子模块分叉存储库获取父存储库的分支

时间:2016-04-29 21:35:46

标签: git

TLDR:我可以查看作为git子模块的分叉存储库的分支吗?现在它似乎只是检查父repo的分支,即使它与我的所有分叉repo的最近提交分离HEAD。

我添加了一个名为TheLibrary的开源库,我将其添加为git子模块。然后我需要修改库并将其用作git子模块,所以我在github上分叉它,添加了一个新的分支modifications并在那里进行了修改。然后我更新了项目的.gitmodules文件以包含我的分叉库的URL,如下所示:

[submodule "libs/TheLibrary"]
    path = libs/TheLibrary
    url = https://github.com/myUsername/TheLibrary.git
    branch = modifications

然后我在终端做了git submodule sync,结果是:

Synchronizing submodule url for 'libs/TheLibrary'

然后我进入了终端上的libs/TheLibrary目录,当我做git fetch时,它给了我来自父回购的分支(master,feature / FeatureA)。但是,我的分叉存储库应该只有这些分支:(主,修改)。

当我git remote -v时,它给出了这个结果:

origin  https://github.com/myUsername/TheLibrary.git (fetch)
origin  https://github.com/myUsername/TheLibrary.git (push)

当我git branch时,它有:

* (HEAD detached at a1b2c3def)
feature/featureA
master

但是,feature / featureA只是我在父存储库上执行的pull请求。我的分叉存储库应该有我添加的modifications分支。

当我执行git log时,它会显示来自modifications分支的所有最近提交。

如何查看modifications分支,以便继续向分叉库添加更改,并将其推送到远程仓库?目的是我希望它仍然能够将来自父repo的更新合并到我们自己的更改中。这甚至可能吗?谢谢!

1 个答案:

答案 0 :(得分:0)

TLDR:我无法更新现有模块以使其正常工作。我必须使用-b标志运行此命令并且它有效: git submodule add -b modifications https://github.com/myUsername/TheLibrary.git

因此,手动修改现有的子模块似乎无法正常工作,即使我删除了整个库文件夹(libs/TheLibrary)并召回了git submodule initgit submodule update(其中) - 克隆它)。

但是当我这样做时:

git submodule add -b modifications https://github.com/myUsername/TheLibrary.git

它错误地将它放在当前文件夹中(我想我应该把正确的路径作为最后一个参数),但当我进去看看它是否检查出正确的分支时(我做了{{1}它说:

git status

这意味着它有效!为了更好的衡量,我做On branch modifications Your branch is up-to-date with 'origin/modifications'. nothing to commit, working directory clean 以确定它是否有正确的分支:

git branch

它确实做到了!所以我认为总是需要这样做,使用带有 master * modifications 标志的命令,而不是我尝试手动更新子模块的方式。

注意:即使有效,它也会在-b中添加:

.gitmodules

即使它与我之前输入的完全相同(除了不同的路径),它之前也没有用过。运行命令时可能会发生一些其他的幕后事件,我想手动修改这几个文件是不够的。

注2:当我最终得到正确的文件夹时,我得到了这个git错误:

[submodule "TheLibrary"]
        path = TheLibrary
        url = https://github.com/TheLibrary/TheLibrary.git
        branch = modifications

所以我使用A git directory for 'libs/TheLibrary' is found locally with remote(s): origin https://github.com/myUsername/TheLibrary.git If you want to reuse this local git directory instead of cloning again from https://github.com/myUsername/TheLibrary.git use the '--force' option. If the local git directory is not the correct repo or you are unsure what this means choose another name with the '--name' option. 选项运行此命令并验证它是否有效:

--force