Git中的分支描述

时间:2010-01-21 10:26:17

标签: git branch task-tracking

Git中有没有办法对分支进行“描述”?

当我尝试使用描述性名称时,在一个分支上工作一段时间有时会使我记忆中为什么我会创建一些其他主题分支。我尝试为分支使用描述性名称,但我认为“描述”(关于分支目的的简短说明)会很好。

15 个答案:

答案 0 :(得分:182)

Git 1.7.9支持这一点。来自1.7.9 release notes

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

您可以看到2011年9月推出的该功能,其中包含提交6f9a332739453a3b7200e8

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]不幸的是,你不能推送描述,因为它们存储在你的配置中,这使得它无法用于记录团队中的分支。

答案 1 :(得分:39)

如果您 最终使用自述文件,请创建git alias修改git checkout,以便每次切换分支时都会显示自述文件。

例如,在 [alias]

下的〜/ .gitconfig中添加
cor = !sh -c 'git checkout $1 && cat README' -

在此之后,您可以运行git cor <branch_name>来切换分支显示您要切换到的分支的自述文件。

答案 2 :(得分:28)

Chris J建议的README可以使用,只要设置为 custom merge driver defined in a .gitattribute
这样,README本地版本在合并期间始终保留。

分支的“描述”也称为与该元数据相关联的“注释”,并且不受支持。

至少,使用README文件,您可以为任何分支执行以下操作:

$ git show myBranch:README

如果你的README位于你的REPO的根目录下,它将在任何路径上工作,因为git show使用的路径是所述仓库的顶层目录中的绝对路径。

答案 3 :(得分:26)

使用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

答案 4 :(得分:11)

这里有两个受欢迎的建议:

  1. git branch --edit-description:我们不喜欢这样,因为你无法推动它。也许我记得我创建的分支机构做了什么,但我的团队肯定不会。
  2. README file pr。科。这在合并期间是一个痛苦:超级倾向于合并冲突,当我们合并特征分支时,我们将从分支中提取README。分支之间的差异也是一种痛苦。
  3. 我们决定创建一个孤儿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

答案 5 :(得分:9)

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

命令将全局选项alias.about定义为shell表达式。如果设置,则在存储库中运行git about <branch>将显示分支的描述。

答案 6 :(得分:5)

以下是Greg Hewgill提到的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";
}

答案 7 :(得分:2)

您可以为评论添加评论:

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

按照惯例,您可以使用与您的分支名称相关的标记,或者您可以使用标记-f将注释标记保留在主题分支的开头。

答案 8 :(得分:1)

使用

git branch --list -v

显示上游分支:

git branch --list -vv

添加-r仅显示遥控器或-a显示遥控器和本地。

答案 9 :(得分:1)

这是一个bootstrap-vue git,可让您设置和读取当前分支上的描述:

alias

用法/示例:

git config --global --add alias.about '!describe() { msg="$1"; git config branch."$(git rev-parse --abbrev-ref HEAD)".description ${msg:+"$msg"}; }; describe'

特别感谢@Felicio的回答,这使我入门。

答案 10 :(得分:1)

说要创建分支

git branch branch-20200328
git notes add branch-20200328 -m "This branch is for whatever"
git notes show branch-20200328

答案 11 :(得分:1)

你可以使用

git config --get-regexp "branch.*.description"

答案 12 :(得分:0)

我很确定目前不支持该功能。我认为你最好的办法是在拥有你想要的信息的分支中创建一个描述文本文件,一个基本的自述文件。

答案 13 :(得分:0)

选择的答案对我来说似乎有些过分。我倾向于维护一个每分支描述文件,这是一个普通的源控制文件,比如master.txtdev.txt等等。如果有一个笨重的数字或分支,我会创建一个层次结构更好地组织它。

答案 14 :(得分:0)

只需使用:

git config branch.<branch name>.description

在信用到期时给予信贷: https://glebbahmutov.com/blog/git-branches-with-descriptions/