2016-04-29 3 views
0

TLDR: gitサブモジュールである分岐したリポジトリのブランチをチェックアウトすることはできますか?今は、親リポジトリのブランチをチェックアウトしているように見えます。ただし、すべての私のフォークされたリポジトリの最近のコミットでHEADが分離されています。サブモジュールフォークされたリポジトリが親リポジトリのブランチをフェッチする


私はgitのサブモジュールとして追加私はTheLibraryと呼ばれる管理しないオープンソースのライブラリがありました。その後、ライブラリを修正してgitサブモジュールとして使用する必要があったので、githubにフォークして、新しいブランチmodificationsを追加し、そこに変更を加えました。

[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に行ってきましたので、は次のようにそれから私は、私のフォークライブラリのURLを含むように私のプロジェクトの.gitmodulesファイルを更新します私が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 

しかし、機能/ featureAは私がやったプルリクエストです親リポジトリ分岐したリポジトリには、私が追加したmodificationsブランチが必要です。

git logを実行すると、modificationsブランチからの最新のコミットがすべて表示されます。

modificationsブランチをチェックアウトすると、フォークされたライブラリに変更を加え続け、リモートのリポジトリにプッシュすることができますか?目的は、親リポジトリからの更新を自分の変更にマージできるようにすることです。それも可能ですか?ありがとう!

答えて

0

TLDR:既存のモジュールを更新できませんでした。私は-bフラグを付けてこのコマンドを実行しなければならなかった、それが働いた: git submodule add -b modifications https://github.com/myUsername/TheLibrary.git

ので、既存のサブモジュールを手動で私は全体のライブラリフォルダ(libs/TheLibrary)を削除し、git submodule initをリコールしても、動作していないようでした修正するとgit submodule update(再クローン化)。

しかし、私はやったときに、この:

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

それは(私は最後のパラメータとして正しいパスを入れている必要がありますね)誤って現在のフォルダに入れて、私はそこに行った時それは右のブランチをチェックアウトしたかどうかを確認するために(私は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でこれを追加しました:

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

それはまさに私が(別のパス以外)の前に入っていたものと同じであっても、以前はうまくいかなかった。このコマンドを実行すると、何かの裏にあることが起こるかもしれません。私は、これらの少数のファイルを手動で変更するだけでは不十分だと思います。


注2:は私が最終的に右のフォルダを得たとき、私はこのGitのエラーを得た:

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オプションを指定してこのコマンドを実行し、それが働いていることが確認さ:

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

関連する問題