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 master
branche. Le contenu de cette branche avait vraiment une origine différente de ce qui avait été développé sur la master
branche, mais ils allaient être fusionnés dans la master
branche 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-tree
nous 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-tree
nous 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 master
succursale 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?