Организация ветвей git - программирование
Подтвердить что ты не робот

Организация ветвей git

У меня есть большой проект, над которым я работаю, который использует git как VCS. В любой момент я работаю над внедрением нескольких функций/исправлений и т.д. Для любой данной функции/ошибки было бы неплохо создать иерархию ветвей - например,

$ 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

Можно ли сделать что-то подобное или мне нужно принять более примитивную схему именования?

EDIT

Чтобы сделать немного более конкретным то, что я ищу, если feature1 является ветвью git, то в приведенном выше примере суб-ветвь 1 была бы создана git checkout -b sub-branch1 из ветки feature1 который разветвлен от мастера). например:.

$ 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

Если ветвь git просто организует ветки, откуда они пришли (с небольшим дополнительным отступом), вероятно, достаточно хороша для моих целей... Хотя супер бонусные очки, если я могу:

$ git branch
  feature1
       testing
  feature2
       testing
  bugfix1
       sub-branch-foo

С каким-то способом управлять конфликтом имен между "feature1/testing" и "feature2/testing"

4b9b3361

Ответ 1

Вы можете использовать схемы именования, такие как feature1/sub-brancha, feature2/sub-branchb и т.д., косая черта в имени не является проблемой для git. Однако ветки по-прежнему будут обрабатываться как обычные ветки (но я не знаю, как можно обрабатывать дочерние элементы по-разному). Команда ветвления git будет перечислять ветки с полным именем, а не способом, указанным в этом примере.

Интересно, что схемы именования, включая слэши, создадут иерархию каталогов в .git/refs/heads/. Может быть, это полезно для обработки subbranches с некоторыми командами низкого уровня?

Ответ 2

Ветви в Git на самом деле символически ссылаются на ключ в хранилище объектов Git. Чтобы привести документацию ( "Что такое ветка" ):

Когда нам нужно быть точным, мы будем использовать слово "ветвь", чтобы обозначить линию развития, а "ветвь ветки" (или просто "голова" ) означает ссылку на самую последнюю фиксацию на ветке. В приведенном выше примере заголовок ветки с именем "А" является указателем на один конкретный коммит, но мы ссылаемся на строку из трех коммитов, ведущих к этой точке, поскольку все они являются частью "ветки А".

Git управляет только списком ссылок, которые хранятся в файлах под .git/refs. Эти ссылки просто не разработаны как древовидная структура.

Я рекомендую использовать схему именования ветвей, которая передает иерархию.

Другая возможность - написать расширение, которое обрабатывает дерево ветвей для вас.

Ответ 3

Я лично использовал этот подход в более ранних версиях Git, но кажется, что вложенные ветки больше не поддерживаются в версии 1.8 +.

Было также приятно видеть поддержку пользовательского интерфейса в Git Tower.

enter image description here