Git中的分支描述

Nou*_*him 263 git branch task-tracking

在Git中有没有办法对分支进行"描述"?

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

Gre*_*ill 189

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年9月推出回到这个功能,以提交6f9a332,739453a3,b7200e8:

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

--edit-description::
Run Code Online (Sandbox Code Playgroud)

打开编辑器并编辑文本以解释分支的用途,以供各种其他命令(例如request-pull)使用.

请注意,它不适用于分离的HEAD分支.

脚本request-pull使用该描述:请参阅commit c016814783,但也可以git merge --log.

request-pull 是一个脚本,用于汇总两次提交到标准输出之间的更改,并在生成的摘要中包含给定的URL.

[来自@AchalDave]不幸的是,你不能推送描述,因为它们存储在你的配置中,因此为了记录团队中的分支而没用.

  • 不幸的是,你不能推送描述,因为它们存储在你的配置中,因此为了记录团队中的分支而没用. (156认同)
  • 有没有办法显示分支的描述? (47认同)
  • @Owen:我目前唯一知道的方法是使用`git config branch.topic.description`来显示分支`topic`的描述.它存储在`.git/config`文件中. (17认同)
  • @GregHewgill谢谢.有一些别名,实际上并不是一个查看它的坏方法.现在,如果只有`git branch`将显示列表中的描述... (12认同)
  • 目前,之前评论中引用的要点似乎不可用,但这似乎是相似的:https://gist.github.com/carlosayam/5316969 (4认同)
  • **查看**描述的标准方法是什么?只需再次运行“gitbranch--edit-description”? (3认同)
  • 遗憾的是@PedroRodrigues你的主旨链接被破坏了 (2认同)

小智 39

如果最终使用的自述中,创建一个git的别名修改git checkout,以便您的README显示每次转换分支的时间.

例如,在[alias]下的〜/ .gitconfig中添加它

cor = !sh -c 'git checkout $1 && cat README' -
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以运行git cor <branch_name>切换分支显示您要切换到的分支的README.


jsa*_*ryd 29

使用git branch --edit-description设置或编辑一个分支描述.

这是一个shell函数,用于显示类似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
}
Run Code Online (Sandbox Code Playgroud)

这是gb看起来像,在这里显示为文本,以防图像腐烂:

$ gb
* logging Log order details.  Waiting for clarification from business.
  master 
  sprocket Adding sprockets to the parts list.  Pending QA approval.
Run Code Online (Sandbox Code Playgroud)

作为图像,您可以看到颜色:

在此输入图像描述

  • 这与已接受的答案(一年多前发布)有何不同? (2认同)
  • *["不幸的是,你不能推送描述,因为它们存储在你的配置中,因此为了记录团队中的分支机构而无用."](/sf/ask/147588381/说明功能于混帐#comment26551641_8858853)* (2认同)

Von*_*onC 28

Chris JREADME建议可以工作,前提是它设置了一个定义的自定义合并驱动程序. 这样,在合并期间始终保留本地版本..gitattribute
README

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

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

$ git show myBranch:README
Run Code Online (Sandbox Code Playgroud)

如果您的自述文件位于您的REPO的根目录,它将在任何路径上工作,因为所使用的路径git show是所述回购的顶层目录中的绝对路径.

  • 团队中的每个人都必须意识到这一点并且如果他们想要的话,将它们单独设置在.gitattribute中吗?如果是这样的话,在我看来这将很难管理,人们实际做这件事的可能性很小. (3认同)

Pet*_*rch 15

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

  1. git branch --edit-description:我们不喜欢这个,因为你无法推动它.也许我能记住我创建的分支机构做了什么,但我的团队肯定不能.
  2. README档案公关 科.这在合并期间是一种痛苦:超级倾向于合并冲突,README当我们合并功能分支时,我们将从分支机构中拉出来.分支之间的差异也很痛苦.

我们决定创建一个孤儿branches-readme分支.孤儿分支是具有各自独立历史的gh-pages分支- 您可以从Github的分支中了解它们.此孤立分支包含单个README文件.它的内容如下:

master:
    The default branch
mojolicious:
    Start using Mojolicious
branch-whatever:
    Description of the whatever branch
Run Code Online (Sandbox Code Playgroud)

它是可推送和合并友好的.README从以下任何分支查看:

git show branches-readme:README
Run Code Online (Sandbox Code Playgroud)

缺点是当你想要更新时需要检查奇怪的孤立分支,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
Run Code Online (Sandbox Code Playgroud)

类似地,个别团队成员也可以创建他们自己的 branches-$user孤儿分支,如果他们愿意,可以描述他们自己的私人分支,只要他们不将他们推送到团队.

通过进一步的工具,这也可以与输出集成git branch.为此,也许README.yaml可以考虑使用文件而不是普通文件README.

  • @ PeterA.Schneider:当然,但是然后添加一个新的分支需要提交才能掌握,即使更改与master没有任何关系.此外,当从master分支出来时,你将在所有分支中拥有README的副本,这是一团糟. (2认同)

Fel*_*cio 9

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

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

  • 谢谢!我改变它所以它只是看着我正在的分支 - ""!describe(){git config branch.\"$(git symbolic-ref --short -q HEAD)\".description;}; describe "` (4认同)

Way*_*ett 7

这是一个git alias允许您在当前分支上设置和读取描述的代码:

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

用法/例子:

(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
Run Code Online (Sandbox Code Playgroud)

特别感谢@Felicio 的回答让我开始了。


小智 6

假设你想创建一个分支

git branch branch-20200328
git notes add branch-20200328 -m "This branch is for whatever"
git notes show branch-20200328
Run Code Online (Sandbox Code Playgroud)


Owe*_*wen 5

以下是git branchesGreg Hewgill提到的命令的可能实现:

#!/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";
}
Run Code Online (Sandbox Code Playgroud)