Tout en aidant un ami avec un problème git aujourd'hui, j'ai dû introduire une branche qui devait être totalement séparée de la masterbranche. Le contenu de cette branche avait vraiment une origine différente de ce qui avait été développé sur la masterbranche, mais ils allaient être fusionnés dans la masterbranche ultérieurement.
Je me suis souvenu de la lecture de Git de John Wiegley de bas en haut comment les branches sont essentiellement une étiquette pour un commit qui suit une certaine convention et comment un commit est lié à une arborescence de fichiers et, éventuellement, aux commit parents. Nous sommes allés créer un commit sans parent dans le dépôt existant en utilisant la plomberie de git:
Nous nous sommes donc débarrassés de tous les fichiers de l'index ...
$ git rm -rf .
... extrait les répertoires et fichiers d'une archive tar, ajouté ceux-ci à l'index ...
$ git add .
... et créé un objet arbre ...
$ git write-tree
( git-write-treenous a indiqué le sha1sum de l'objet arbre créé.)
Ensuite, nous avons validé l'arborescence, sans spécifier les validations parentales ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-treenous a indiqué le sha1sum de l'objet commit créé.)
... et créé une nouvelle branche qui pointe vers notre commit nouvellement créé.
$ git update-ref refs/heads/other-branch $COMMIT
Enfin, nous sommes retournés à la mastersuccursale pour continuer à travailler là-bas.
$ git checkout -f master
Cela semble avoir fonctionné comme prévu. Mais ce n'est clairement pas le genre de procédure que je recommanderais à quelqu'un qui commence tout juste à utiliser git, c'est un euphémisme. Existe-t-il un moyen plus simple de créer une nouvelle branche sans aucun rapport avec tout ce qui s'est passé dans le référentiel jusqu'à présent?