web-dev-qa-db-fra.com

Organiser des branches

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"

18
mgilson

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?

16
jgosmann

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.

3
migu

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.

enter image description here

0
zkolnik