【问题标题】:Print branch description打印分支描述
【发布时间】:2013-02-10 02:48:32
【问题描述】:

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

【问题讨论】:

  • 当我发出一个“git 分支”时,谁的答案让我得到了分支描述?欧文斯?或者你是说我需要用 README 做点什么?在我决定发布这个问题之前,我正在查看这个问题。
  • @bpw1621 见stackoverflow.com/questions/2108405/…——显然还没有其他内置方式来显示描述。
  • @poke 好的,如果答案是没有办法用内置方法完成我所要求的,那么这就是答案。如果除了您和 number5 看到的问题中的详细信息之外,还有其他方法可以获取我正在寻找的内容,那么这又是有价值的信息。

标签: git


【解决方案1】:

我确认目前无法使用git branch 显示分支的描述。

This thread 包括

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

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

但是,您误会说“显示...的简短摘要”。

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

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

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

因此,pokescript mentioned 仍然是(带有 git 别名)当前唯一的解决方案:

#!/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);
}

【讨论】:

  • 有什么方法可以恢复默认颜色编码?该脚本完成了这项工作,但也消除了控制台 o/p 中的颜色编码。
  • @VonC 补丁“git branch --verbose-format”还在工作中吗?谢谢
  • @Abhinav 从 5 年前开始不确定。你有git branch -vv:git-scm.com/docs/git-branch#git-branch--v
【解决方案2】:

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

第 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. 如果您的分支有描述,将显示描述。

【讨论】:

    【解决方案3】:

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

    关于 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
    

    【讨论】:

    • 我 4 岁的答案的有趣替代方案。 +1
    【解决方案4】:

    我从 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命令是因为当前分支由于星号字符需要特殊处理。

    【讨论】:

    • 迄今为止最好的解决方案,直到“git branch --verbose-format”补丁被实施。您的 soln 还负责处理 @penchant 谈到的 bash 脚本 soln 的问题。谢谢
    【解决方案5】:

    2017年我还是找不到好的解决办法。

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

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

    注意:

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

    【讨论】:

    • $ g alias be 'branch --edit-description'; $ g alias bd '!(export GIT_EDITOR=cat; git be | grep -v "#")' 有效。干杯
    • cat .git/config
    【解决方案6】:

    bash 命令:

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

    如果有别名:

    alias gs='git status && eval "git config branch.`git branch --show-current`.description"'
    

    【讨论】:

      【解决方案7】:

      我的回答也受到了 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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多