web-dev-qa-db-fra.com

Comment rattacher un HEAD in GIT détaché)

(Je peux voir qu'il y a beaucoup de questions à ce sujet mais je n'en ai pas trouvé qui résout mon problème exact).

J'utilise gitlab-ci et lorsque le coureur extrait mon code, il le fait en tant que tête détachée. Voici ce que j'obtiens lors de l'exécution d'un git status commande dans le répertoire des coureurs.

git status
# HEAD detached at 847fe59
nothing to commit, working directory clean

Ce que je dois faire pour ce sur quoi je travaille, c'est de rattacher cette tête à ma branche de développement, puis git pull dans le référentiel complet pour une utilisation dans un conteneur Docker. Je suppose que gitlab ci ne vérifie que le dernier commit pour enregistrer le clonage du repo complet, ce qui est compréhensible.

Dans mon .gitlab-ci.yml file J'ai essayé ce qui suit ...

- git checkout Origin/$CI_BUILD_REF_NAME
- git pull

Ce qui donne la sortie suivante dans la console ...

    $ 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.

Existe-t-il un moyen facile de rattacher la tête? La plupart des solutions que j'ai vues traitent du fait qu'un changement a été commis sur la tête détachée, mais ce n'est pas le cas pour moi. Je veux juste avoir ma branche develop complète dans mon conteneur docker avec tout mon historique git.

Ou s'il existe un moyen d'empêcher gitlab ci de vérifier la tête détachée, ce serait également bien.

8
Remotec

Un HEAD détaché est simplement un HEAD contenant l'ID de hachage brut d'un commit. Comme indiqué dans les commentaires, il est généralement assez raisonnable de l'utiliser pour un système de build, que ce soit une sorte d'intégration continue ou non: vous pouvez extraire une validation spécifique par ID de hachage, ou extraire un nom de balise, mais de toute façon HEAD se termine en contenant l'ID de hachage de validation et est maintenant garanti d'être stable.

Si vous voulez avoir une HEAD "attachée" (non détachée), tout ce que vous avez à faire en termes Git est d'exécuter git checkout <branch-name>. Cela écrit le nom de la branche dans HEAD, et maintenant HEAD est attaché à cette branche. Cela signifie que ce n'est pas du tout HEAD, mais plutôt le nom de la branche, qui détermine quel commit est courant. Tout ce qui met à jour le nom de la branche modifie le commit actuel.

Notez que cette propriété niquement s'applique aux noms de branche, c'est-à-dire avec des noms qui vivent dans le refs/heads/ espace de noms. Le nom Origin/branch est généralement un raccourci pour refs/remotes/Origin/branch, qui n'est pas un nom de branche; c'est un nom de suivi à distance (parfois appelé branche de suivi à distance, ce qui est un mauvais ensemble de mots parce que sons comme "branche" ", n'est-ce pas?). Fournir un nom à git checkout que peut être résolu en commit, mais n'est pas un nom de branche, résulte en un HEAD (si le checkout fonctionne) du tout, de toute façon).

Si vous voulez avoir un HEAD attaché, il doit être attaché à un nom de branche, c'est-à-dire une référence dont le nom commence par refs/heads/.

5
torek

Cela a fonctionné pour moi

Commander:

git checkout FETCH_HEAD

Production:

Previous HEAD position was 3cf5de5... Initial commit
HEAD is now at 600ea51... Sample Git Demo
0
Parag Jadhav