Je travaille sur un projet de grande envergure qui utilise git en tant que VCS. À tout moment, je travaille à la mise en œuvre de quelques fonctionnalités/corrections de bogues, etc. Pour une fonctionnalité/un bug donné, il serait agréable de créer une hiérarchie de branches - par exemple.
$ git branch
feature1
sub-branch1
sub-branch2
sub-branch3
feature2
sub-brancha
*sub-branchb #<--currently checked out
sub-branchc
bugfix1
sub-branch-foo
$ git checkout sub-brancha
$ git branch
feature1
sub-branch1
sub-branch2
sub-branch3
feature2
*sub-brancha #<--currently checked out
sub-branchb
sub-branchc
bugfix1
sub-branch-foo
Est-il possible de faire quelque chose comme ça, ou dois-je adopter un schéma de nommage plus primitif?
MODIFIER
Pour préciser un peu plus concrètement ce que je recherche, si feature1 est une branche git, dans l'exemple ci-dessus, la sous-branche 1 aurait été créée par git checkout -b sub-branch1
à partir de la branche feature1
(qui est dérivée de master). par exemple.:
$ git checkout master
$ git checkout -b feature1
$ git checkout -b testing
$ git branch
master
feature1
*testing
$ git checkout master
$ git checkout -b feature2
$ git branch
master
feature1
testing
*feature2
Avoir une branche git organiser simplement les branches par leur origine (avec un léger renfoncement) est probablement suffisant pour mes besoins ... Bien que des points super bonus si je peux avoir:
$ git branch
feature1
testing
feature2
testing
bugfix1
sub-branch-foo
Avec un moyen de gérer le conflit de nom entre "feature1/testing" et "feature2/testing"
Vous pouvez utiliser des schémas de dénomination tels que feature1/sub-brancha, feature2/sub-branchb, etc., la barre oblique du nom ne pose pas de problème pour git. Cependant, les branches seront toujours traitées comme des branches normales (mais je ne saurais pas comment on pourrait gérer les sous-branches différemment). La commande git branch listera les branches avec bien sûr son nom complet et non pas comme dans l'exemple.
Fait intéressant, les schémas de dénomination, y compris les barres obliques, créeront une hiérarchie de répertoires dans .git/refs/heads /. Peut-être que cela est utile pour gérer les sous-branches avec des commandes de bas niveau?
Les branches dans Git sont en fait des références symboliques à une clé du magasin d'objets de Git. Pour citer la documentation ("Qu'est-ce qu'une branche") :
Lorsque nous aurons besoin d’être précis, nous utiliserons le mot "branche" pour désigner une ligne de développement, et "tête de branche" (ou simplement "tête") pour désigner une référence au plus récent commit sur une branche. Dans l'exemple ci-dessus, la tête de branche nommée "A" est un pointeur sur une validation particulière, mais nous nous référons à la ligne de trois validations menant à ce point, car elles font toutes partie de "branche A".
Git ne gère qu'une liste de références stockées dans des fichiers sous .git/refs
. Ces références ne sont tout simplement pas conçues comme une structure arborescente.
Je recommande d'utiliser un schéma de nommage de branche qui transmet la hiérarchie.
Une autre possibilité consiste à écrire une extension qui gère l’arbre de branche pour vous.
J'ai personnellement utilisé this dans les versions précédentes de Git, mais il semble que les branches imbriquées ne soient plus supportées dans la version 1.8+.
C'était également agréable de voir le support de l'interface utilisateur dans Git Tower.