在git中分支描述

git中有一种方法可以对分支进行“描述”吗? 当我尝试使用描述性名称时,在单个分支上工作了一段时间,有时会减less我为什么做出其他主题分支的记忆。 我尝试使用分支的描述性名称,但是我认为“描述”(关于分支目的的简短说明)会很好。

Git 1.7.9支持这个。 从1.7.9发行说明 :

  *“git branch --edit-description”可以用来添加描述性文本
   解释一个主题分支是关于什么的。

你可以看到在2011年9月推出的function,提交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。

如果您最终使用自述文件,请创build一个修改git checkout的git别名,以便每次切换分支时显示您的自述文件。

例如,在〜/ .gitconfig,在[别名]

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

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

由Chris Jbuild议的README可以工作,只要.gitattribute定义一个自定义合并驱动程序.gitattribute
这样, README本地版本始终在合并期间保留。

分支的“描述”也被称为与该元数据关联的“评论”,并且不被支持。

至less,使用README文件,您可以为任何分支执行:

 $ git show myBranch:README 

如果你的自述文件在你的REPO的根目录下,它可以从任何path上运行,因为git show使用的path是从上述目录的绝对path。

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

而作为一个形象,所以你可以看到的颜色:

在这里输入图像描述

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

命令将定义一个全局选项alias.about作为shellexpression式。 在仓库中运行git about <branch>将显示分支的描述(如果设置的话)。

这里有两个stream行的build议:

  1. git branch --edit-description :我们不喜欢这个,因为你不能推它。 也许我可以记住我创build的分支是做什么的,但我的团队肯定不能。
  2. README文件pr。 科。 这是合并过程中的一个痛点:超级倾向于合并冲突,当我们合并特征分支时,我们将从分支中提取README 。 树枝之间的差异也是一种痛苦。

我们决定创build一个孤儿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 

同样,个别团队成员也可以创build自己的branches-$user孤立分支机构,如果他们想要的话,描述他们自己的私人分支机构,只要他们不推动他们到团队。

随着进一步的工具,这也可以与git branch的输出集成。 为此,可能会考虑使用README.yaml文件而不是简单的README

下面是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"; } 

您可以附加评论标签:

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

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

使用:

 git branch --list -v 

显示上游分支:

 git branch --list -vv 

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

我很确定这个function目前不支持。 我认为你最好的select是创build一个描述文本文件,基本上就是一个自述文件,它包含你想要的信息。

所选的答案似乎对我来说是矫枉过正的。 我倾向于维护每个分支描述文件,这是一个普通的源代码控制文件,说master.txtdev.txt等,如果有一个难以处理的数字或分支我会创build一个层次结构,以更好地组织它。

Interesting Posts