私は、複数のサブモジュールを備えた十分な大きさのレポに取り組んでいます。我々はCI処理中に正しい状態にしていることを確認するために、我々は、サブモジュールを初期化のようなものをプリントアウトなぜ、 "git checkout origin/branch"が "origin at master/master"の代わりに "<SHA>にデタッチされました"という結果になるのですか?
$ git submodule init
$ git submodule sync
$ git submodule update --force
、
Synchronizing submodule url for 'android/public'
Synchronizing submodule url for 'ios/public'
...
Submodule path 'android/public': checked out 'asdf1234'
Submodule path 'ios/public': checked out 'bsdf2345'
私たちは、その後通過し、いくつかの異なるをチェックアウトした場合私たちは、その後
$ for platform in android ios
$ do
$ (cd $platform/public; git fetch --all; git checkout origin/master)
$ done
を実行し、git branch
でこれらのフォルダをチェックすると枝が、それらはすべて(HEAD detached at origin/master)
を言います。
しかし、我々は上部のサブモジュールの初期化をやり直し、そして
$ for platform in android ios
$ do
$ (cd $platform/public; git fetch --all; git reset --hard origin/master; git checkout origin/master)
$ done
を実行し、git branch
で再びこれらをチェックすると、彼らは(HEAD detached at <some SHA>)
として表示されます。それは変更することができるよう
これは、私たちのCIでのレガシー手順の一種であるが、私はまだorigin/master
で切り離さHEADを表示git branch
にgit checkout origin/master
なりません常に結果を実行している理由を知りたいのです。
@torekの説明をいただきありがとうございます。私はハッシュを持っているだけの古いバージョンのgitについて言及したことに全く気づいたことはありません。そして、新しいバージョンでは「切り離された」と言われていますが、全体的には基本的にバグですね。私がどこから来たのかは問題ではありません。どこに行くの?私はそれが "分離された"状態であればこの状況を理解するだろうが、それが "離れたところ"になると、そのブランチに行くことができれば、それ以上の情報は必要ないはずである。 – seaders
"detached at foo"から "fooから切り離されました"に進むという(主な)考えは、新しいコミット*を元のハッシュに追加しても、新しい匿名ブランチ。あなたがそれを離れた場合、このブランチはあなたが名前をつけない限り放棄されるので、あなたが今やこのやや危険な状態にあることを指摘することはいいことです。 – torek
それは、はい、あなたが "ハッシュ"から "名前"に移動せずに切り替えると、生のハッシュを名前に置き換えるといいかもしれないと言っています。しかし、1つのコミットのために多くの名前があるかもしれません。記録されるべきものは 'git checkout'に与えられたものです:' git checkout origin/master'と 'git checkout v2.3'と同じコミットの場合、タグ:v2.3 "これをバグ*と呼ぶかどうかは、Gitの人たちの責任です。 – torek