Описания веток в Git

Есть ли способ в Git иметь "описание" для веток?

Хотя я пытаюсь использовать описательные имена, работа над одной веткой иногда ослабляет память о том, почему я создал некоторые другие ветки тем. Я пытаюсь использовать описательные имена для веток, но я думаю, что было бы неплохо "описание" (короткое примечание о назначении ветки).

Ответ 1

Git 1.7.9 поддерживает это. Из примечаний к выпуску 1.7.9:

 * "git branch --edit-description" can be used to add descriptive text
   to explain what a topic branch is about.

Вы можете увидеть эту функцию, представленную еще в сентябре 2011 года, с коммитами 6f9a332, 739453a3, b7200e8:

struct branch_desc_cb {
  const char *config_name;
  const char *value;
};

--edit-description::

Откройте редактор и отредактируйте текст, чтобы объяснить, для чего предназначена ветка, которая будет использоваться различными другими командами (например, request-pull).

Обратите внимание, что это не будет работать для отдельной ветки HEAD.

Это описание используется скриптом request-pull: см. Commit c016814783, но также git merge --log.

request-pull - это скрипт, используемый для суммирования изменений между двумя коммитами в стандартный вывод, и включает указанный URL в сгенерированную сводку.

[От @AchalDave] К сожалению, вы не можете отправить описания, поскольку они хранятся в вашей конфигурации, что делает их бесполезными для документирования веток в команде.

Ответ 2

Если вы в конечном итоге используете README, создайте git alias, изменяя git checkout, чтобы ваш README отображался каждый раз, когда вы переключение ветвей.

Например, добавьте это в ~/.gitconfig в разделе [alias]

cor = !sh -c 'git checkout $1 && cat README' -

После этого вы можете запустить git cor <branch_name> для переключения ветки и отображения README ветки, на которую вы переключаетесь.

Ответ 3

Используйте git branch --edit-description для установки или редактирования описания ветки.

Вот функция оболочки для отображения веток, похожих на git branch, но с добавленными описаниями.

# Shows branches with descriptions
function gb() {
  current=$(git rev-parse --abbrev-ref HEAD)
  branches=$(git for-each-ref --format='%(refname)' refs/heads/ | sed 's|refs/heads/||')
  for branch in $branches; do
    desc=$(git config branch.$branch.description)
    if [ $branch == $current ]; then
      branch="* \033[0;32m$branch\033[0m"
     else
       branch="  $branch"
     fi
     echo -e "$branch \033[0;36m$desc\033[0m"
  done
}

Вот как выглядит gb, показанный здесь в виде текста на случай, если изображение гниет:

$ gb
* logging Log order details.  Waiting for clarification from business.
  master 
  sprocket Adding sprockets to the parts list.  Pending QA approval.

И как изображение, чтобы вы могли видеть цвета:

enter image description here

Ответ 4

README, предложенный Chris J, может работать, если он настроен с помощью настраиваемого драйвера слияния определенном в .gitattribute.
Таким образом, локальная версия README всегда сохраняется во время слияния.

"Описание" для ветвей также известно как "комментарий", связанный с этими метаданными, и не поддерживается.

По крайней мере, с файлом README вы можете для любой ветки выполнить:

$ git show myBranch:README

Если ваш README находится в корневом каталоге вашего REPO, он будет работать с любым путем, так как путь, используемый git show является абсолютным из верхнего каталога указанного репо.

Ответ 5

Здесь есть два популярных предложения:

  • git branch --edit-description: Нам это не нравится, потому что вы не можете его подтолкнуть. Может быть, я могу вспомнить, какие ветки я создал, но моя команда не может этого сделать.
  • README файл пр. филиал. Это боль во время слияний: супер-склонный к слиянию конфликтов, и мы будем тянуть README от ветвей, когда мы объединяем ветки функций. Разница между ветвями также является болью.

Мы решили создать ветвь сирота branches-readme. Сиротские ветки - это ветки со своей отдельной историей - вы можете знать их из ветвей Гитуба gh-pages. Эта сиротская ветвь содержит единственный файл README. Он имеет следующее содержимое:

master:
    The default branch
mojolicious:
    Start using Mojolicious
branch-whatever:
    Description of the whatever branch

Он работает с возможностью нажатия и слияния. Просмотрите README из любой ветки с помощью:

git show branches-readme:README

Недостатки в том, что вам нужно проверять странную сиротскую ветку, когда вы хотите обновить README, а README не будет автоматически обновляться по мере того, как ветки будут переименованы, приходят или уходят. Это прекрасно для нас.

Сделайте это как:

git checkout --orphan branches-readme
# All the files from the old branch are marked for addition - skip that
git reset --hard
# There are no files yet - an empty branch
ls
vi README
# put in contents similar to above
git add README
git commit -m "Initial description of the branches we already have"
git push origin branches-readme
# get all your original files back
git checkout master

Аналогично, отдельные члены команды также могут создавать свои собственные дочерние сироты branches-$user, описывающие свои собственные частные ветки, если они этого хотят, до тех пор, пока они не подталкивают их к команде.

С дополнительными инструментами это также можно было бы интегрировать с выходом git branch. С этой целью вместо простого README можно рассмотреть файл README.yaml.

Ответ 6

git config --global --add alias.about '!describe() { git config branch."$1".description; }; describe'

Команда будет определять глобальную опцию alias.about как выражение оболочки. Запуск git about <branch> в репозитории отобразит описание ветки, если установлено.

Ответ 7

Здесь возможная реализация команды git branches Грег Хьюджилл ссылается на:

#!/usr/bin/perl

sub clean {
    map { s/^[\s\*]*\s// } @_;
    map { s/\s*$// } @_;
    return @_;
}

sub descr {
    $_ = `git config [email protected]_.description`;
    s/\s*$//;
    return $_;
};
sub indent {
    $_ = shift;
    s/^/      /mg;
    return $_;
};

my @branches = clean `git branch --color=never --list`;
my %merged = map { $_ => 1 } clean `git branch --color=never --merged`;

for my $branch (@branches) {
    my $asis = `git branch --list --color=always $branch`;
    $asis =~ s/\s*$//;
    print "  $asis";
    print " \033[33m(merged)\033[0m" if ($merged{$branch} and $branch ne "master");
    print "\n";

    print indent descr $branch;
    print "\n";
    print "\n";
}

Ответ 8

Вот git alias, который позволяет вам устанавливать и читать описания в текущей ветки:

git config --global --add alias.about '!describe() { msg="$1"; git config branch."$(git rev-parse --abbrev-ref HEAD)".description ${msg:+"$msg"}; }; describe'
Использование

/примеры:

(develop) $ git about
(develop) $ git about message
(develop) $ git about
message
(develop) $ git about "this is a new message"
(develop) $ git about
this is a new message
(develop) $ git checkout -b test_branch
Switched to a new branch 'test_branch'
(test_branch) $ git about
(test_branch) $ git about "this is the test branch"
(test_branch) $ git about
this is the test branch
(test_branch) $ git checkout -
Switched to branch 'develop'
Your branch is up to date with 'origin/develop'.
(develop) $ git about
this is a new message

Особая благодарность @Felicio за ответ, с которого я начал.

Ответ 9

Вы можете прикреплять комментарии к тегам:

git tag -m 'this was a very good commit' tag1

По соглашению вы можете иметь теги, связанные с вашими именами ветвей, или вы можете использовать tag -f, чтобы оставить комментарий во главе ваших ветвей.

Ответ 10

Я уверен, что функция в настоящее время не поддерживается. Я считаю, что лучше всего создать текстовый файл описания, в основном README, в ветке, которая имеет необходимую информацию.

Ответ 11

Выбранный ответ кажется мне излишним. Я был бы склонен поддерживать файл описания ветвлений, который является обычным файлом с контролируемым источником, например master.txt, dev.txt и т.д., И если есть громоздкое число или ветки, я бы создал иерархию, чтобы лучше ее организовать.

Ответ 12

использование

git branch --list -v

показать ветку вверх по течению:

git branch --list -vv

Добавьте -r чтобы показать только пульты, или -a чтобы показать пульты и локальные.