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

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

257 голосов
/ 21 января 2010

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

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

Ответы [ 13 ]

183 голосов
/ 14 января 2012

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.

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

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

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

39 голосов
/ 03 ноября 2010

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

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

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

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

28 голосов
/ 21 января 2010

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

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

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

$ git show myBranch:README

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

26 голосов
/ 23 мая 2013

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

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

# Shows branches with descriptions
function gb() {
  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 == $(git rev-parse --abbrev-ref HEAD) ]; 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

11 голосов
/ 04 августа 2016

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

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

Мы решили создать сиротскую ветвь branches-readme. Ветви-сироты - это ветви с собственной историей - вы можете знать их по веткам Github 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.yaml вместо простого README.

9 голосов
/ 05 октября 2016
git config --global --add alias.about '!describe() { git config branch."$1".description; }; describe'

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

5 голосов
/ 21 апреля 2012

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

#!/usr/bin/perl

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

sub descr {
    $_ = `git config branch.@_.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";
}
2 голосов
/ 22 января 2010

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

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

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

1 голос
/ 19 апреля 2019

Вот 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

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

1 голос
/ 07 августа 2015

Используйте

git branch --list -v

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

git branch --list -vv

Добавьте -r для отображения только удаленных или -a для отображения удаленных и локальных.

...