(私はこれについて多くの質問があるのを見ることができますが、私の正確な問題を解決するものを見つけていません)。
私はgitlab-ciを実行しています。ランナーが私のコードをチェックアウトすると、分離したヘッドとして実行されます。 runnersディレクトリでgit status
コマンドを実行すると、次のようになります。
git status
# HEAD detached at 847fe59
nothing to commit, working directory clean
私が取り組んでいることのために私がする必要があるのは、このヘッドを開発ブランチに再接続し、Dockerコンテナーで使用するために完全なリポジトリでgit pull
を使用することです。私はgitlab ciが最後のコミットをチェックアウトするだけで、理解できる完全なレポの複製を保存できると思います。
私の.gitlab-ci.yml
ファイルで、次のことを試しました...
- git checkout Origin/$CI_BUILD_REF_NAME
- git pull
コンソールで次の出力が得られます...
$ git checkout $CI_BUILD_REF_NAME
Switched to a new branch 'develop'
Branch develop set up to track remote branch develop from Origin.
$ git pull
You are not currently on a branch. Please specify which
branch you want to merge with. See git-pull(1) for details.
頭を再接続する簡単な方法はありますか?私が見たソリューションのほとんどは、取り外したヘッドに変更がコミットされたという事実を扱っていますが、これは私には当てはまりません。私の完全なdevelop
ブランチをすべてのgit履歴とともにdockerコンテナーに取得したいだけです。
あるいは、gitlab ciが切り離されたヘッドをチェックアウトしないようにする方法があればそれも素晴らしいでしょう。
detached HEADは、コミットの生のハッシュIDを含むHEADです。コメントに記載されているように、ビルドシステムでこれを使用することは、ある種の継続的な統合であるかどうかにかかわらず、一般的にかなり合理的です。特定のコミットをハッシュIDでチェックアウトするか、タグ名をチェックアウトしますが、HEAD
コミットハッシュIDを含むようになり、安定していることが保証されます。
ただし、「アタッチされた」(デタッチされていない)HEADが必要な場合は、Gitで行う必要があるのは_git checkout <branch-name>
_を実行することだけです。これにより、ブランチの名前がHEAD
に書き込まれ、HEAD
がそのブランチにアタッチされます。つまり、現在のコミットを決定するのはHEAD
ではなく、ブランチ名です。ブランチ名を更新すると、現在のコミットが変更されます。
このプロパティonlyはブランチ名、つまり_refs/heads/
_名前空間に存在する名前に適用されることに注意してください。 _Origin/branch
_という名前は通常、ブランチ名ではない_refs/remotes/Origin/branch
_の省略形です。 リモートトラッキング名(リモートトラッキングブランチと呼ばれることもありますが、これは確かにサウンド "ブランチ"、そうではありませんか?) _git checkout
_にcanコミットに解決される任意の名前を指定すると、is notブランチ名となり、デタッチHEAD(とにかくチェックアウトがまったく機能する場合)。
HEADをアタッチする場合は、ブランチ名、つまり名前が_refs/heads/
_で始まる参照にアタッチする必要があります。
これは私のために働いた
コマンド:
git checkout FETCH_HEAD
出力:
Previous HEAD position was 3cf5de5... Initial commit
HEAD is now at 600ea51... Sample Git Demo