it-swarm.com.ru

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

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

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

245
Noufal Ibrahim

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

 * "git branch --edit-description" может использоваться для добавления описательного текста 
 объяснить, что такое ветка темы .

Вы можете увидеть эту функцию, представленную еще в сентябре 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 в сгенерированную сводку.

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

173
Greg Hewgill

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

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

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

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

38
tta

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

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

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

$ git show myBranch:README

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

28
VonC

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

Вот функция Shell для отображения веток, похожих на 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

25
jsageryd

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

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

Мы решили создать филиал Orphan branches-readme. Ветви-сироты - это ветви с собственной историей - вы можете знать их по веткам gh-pages в Github. Эта ветвь Orphan содержит один файл README. У этого есть содержание как:

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

Это Push-способный и дружественный к слиянию. Просмотрите 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.

10
Peter V. Mørch
git config --global --add alias.about '!describe() { git config branch."$1".description; }; describe'

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

8
Felicio

Вот возможная реализация команды 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";
}
5
Owen

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

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

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

2
Jamey Hicks

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

git branch --list -v

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

git branch --list -vv

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

1
Markus Hartman

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

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
Wayne Burkett

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

0
Chris J

Просто используйте:

git config branch.<branch name>.description

Чтобы оформить кредит там, где он требуется: https://glebbahmutov.com/blog/git-branches-with-description/

0
Caleb Miller

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

0
pajato0