18

Git 支持一个名为 --edit-description 的分支命令选项,它声明它被“各种”其他命令使用。一个不使用的命令(至少默认情况下)是 git branch (当用于简单地列出本地分支时)。有没有办法让 git branch 显示分支描述(详细选项看起来只是添加了分支上的最后一次提交)?

为了清楚起见,我想要以下内容

> git branch
* master      I am the alpha and the omega
  bugfix1     This is the fix to that thing
  future      Transition to the new architecture
4

7 回答 7

9

我确认现在无法显示分支的描述git branch(而不是git config,请参阅下面此答案的最后一部分)。

该线程包括

即将到来的 v1.7.9 将引入分支描述,主要用于集成过程。我认为我们可以使它对不广泛使用 request-pull/format-patch 的用户有用。在“”中显示一个简短的摘要以及分支名称git branch会很好。

我同意即使分支最终被您合并到主分支并且永远不会自行离开您的存储库,让用户访问信息也会很好。

但是,您被误导说“沿...显示简短摘要”。

分支描述支持是为用户提供一个记录有关分支的详细说明的地方,其大小类似于您通常放置在提交的日志消息或系列的求职信中的内容。
对于(1)在开发过程中本质上是一个移动目标并且(2)与标签和注释不匹配的分支,没有任何方便的地方可以这样做。

已经有一个简短的总结的好地方,它被称为“分支名称”。像命名函数一样命名分支。

建议的补丁“ git branch --verbose-format”尚未完成。

因此poke提到脚本 仍然是(带有)一种可能的解决方案:git alias

#!/bin/perl
 
$output= `git branch`;
 
foreach my $line (split(/^/, $output)) {
  my ($is_current, $name) = split(/\s+/, $line);
  my $description = `git config branch.$name.description`;
 
  $description =~ s/\s+$//;
  printf("%1s %-22s %s\n", $is_current, $name, $description);
}

菲利普奥克利在评论中建议:

您可以使用git config命令显示分支描述。

为了显示所有分支描述,我有别名

brshow = config --get-regexp 'branch.*.description'

,对于当前的 HEAD 我有

brshow1 = !git config --get "branch.$(git rev-parse --abbrev-ref HEAD).description". 
于 2013-02-25T07:53:45.723 回答
5

在终端上点击这个。如果您的分支有一些描述,这将显示带有描述的分支。

第1步:

vi ~/.bashrc

第2步: 把这个

alias git-describe-branches='for line in $(git branch); do 
     description=$(git config branch.$line.description)
     if [ -n "$description" ]; then
       echo "$line     $description"
     fi
done'

第 3 步:

source ~/.bashrc

第4步:

git-describe-branches

或者

for line in $(git branch); do 
     description=$(git config branch.$line.description)
     if [ -n "$description" ]; then
       echo "$line     $description"
     fi
done

笔记:

  1. 在 git 工作目录中运行它。

  2. 如果您的分支有描述,将显示描述。

于 2017-03-07T04:48:12.680 回答
2

我知道自从被问到这个问题已经很久了,但我刚开始使用分支描述,并在寻找展示创意时遇到了这个问题。

关于 bash 脚本答案:它只打印具有描述的分支。我想模仿git branch输出,但也有描述。

关于 perl 脚本答案:格式化失败,分支名称较长。如果您处于分离的 HEAD 状态,它也会输出螺旋度。

我尝试了python,这就是我想出的。它用以前的答案解决了我的问题。

#!/usr/bin/python
import subprocess
import sys


def git(*args):
    return subprocess.check_output(['/usr/bin/git'] + list(args)).strip()


try:
    branches = git('branch').split('\n')
except subprocess.CalledProcessError:
    sys.exit(1)

longest = len(max(branches, key=len))
for branch in branches:
    active = '*' if branch[0] == '*' else ''
    branch = branch.lstrip(' *')
    try:
        desc = git('config', 'branch.'+branch+'.description')
    except subprocess.CalledProcessError:
        print '{:2}{}'.format(active, branch)
    else:
        print '{:2}{:{}}  {}'.format(active, branch, longest, desc)

展品 A

[user|host ~/git/repo((HEAD detached at origin/master))]% git bd
* (HEAD detached at origin/master)
  branch_a
  delete_this_after_a_little_while_pls_thx_bye    long branch description
  other_branch
  yay_branches_amirite                            PR under review

展品 B

[user|host ~/git/repo(other_branch_name)]% git bd
  branch_a
  delete_this_after_a_little_while_pls_thx_bye    long branch description
* other_branch
  yay_branches_amirite                            PR under review

展品 C

[user|host ~/non_git_repo]% git bd
fatal: Not a git repository (or any of the parent directories): .git
于 2017-06-14T17:58:44.560 回答
1

我从 Sahil Gulati 那里得到灵感并做了这个:

alias git-describe-branches='git branch | while read line; do 
     description=$(git config branch.$(echo "$line" | sed "s/\* //g").description)
     echo "$line     $description"
done'

例子:

$ git-describe-branches 
bugfixdatum     
feat32     
feat53     
feat56     
* feat57     Projektlista
feat65     
feat72     
feat75     Prevent replacing lager with empty inventering
master     
referens     

这也打印了没有描述的分支,而 sed 命令是因为当前分支由于星号字符需要特殊处理。

于 2018-01-24T10:45:22.167 回答
0

我在 2017 年仍然找不到好的解决方案。

不过,我想出了另一个解决方案。更改当前分支后需要第一行以更新 BRANCH_DESCRIPTION 文件。它只是使用“无操作编辑器”运行编辑描述工具。然后您可以简单地从文件中获取描述.git/BRANCH_DESCRIPTION

(export GIT_EDITOR=':';git branch --edit-description); 
cat $GITREPOSITORY/.git/BRANCH_DESCRIPTION

笔记:

这可能不是记录/稳定的行为。

于 2017-08-29T16:13:49.967 回答
0

bash 命令:

eval "git config branch.`git branch --show-current`.description"

如果有别名:

alias gs='git status && eval "git config branch.`git branch --show-current`.description"'
于 2021-10-10T07:07:47.547 回答
0

我的回答也从 Sahil Gulati 那里获得了灵感。我希望脚本还包括没有描述的分支,让它看起来像往常一样漂亮git branch,所以我添加了一些颜色和填充。

所以你可以做这样的事情。

创建一个脚本,例如~/git-branch-show-descriptions.sh并添加执行权限。

branches=$(git branch --format="%(refname:short)")
current=$(git branch --show-current)
no_color='\033[0m'
green='\033[0;32m'
pad="                               "
pad_length=31

for line in $branches
    do
        description=$(git config branch.$line.description)
        padded_line="${line}${pad}"
        formatted_line="${padded_line:0:pad_length} ${description}"
        [ $line = $current ] \
            && echo -e "* ${green}${formatted_line}${no_color}" \
            || echo    "  $formatted_line"
    done

将别名添加到~/.bashrc

alias git-branch-show-descriptions=~/git-branch-show-descriptions.sh

并获取它或重新启动 bash。

source ~/.bashrc

这应该显示对所有拥有它们的分支的描述,以及那些没有的分支的名称。选定的分支将显示为绿色。

于 2022-01-07T09:53:11.577 回答