2010-01-21 126 views
220

git中有一种方法可以为分支提供“描述”吗?虽然我尝试使用描述性名称,但在单个分支上工作一段时间有时会减弱我为什么创建其他主题分支的记忆。我尝试使用分支的描述性名称,但我认为'描述'(关于分支目的的简短说明)会很好。git中的分支描述

+2

你为什么不按你的想法命名分支?林不知道,但一个功能应该描述在一个复合词 – fyr 2011-07-20 12:16:22

+2

这将是一个非常有用的功能。 git分支-a可以显示分支名称旁边的描述。也许git笔记将支持分支的注释以及未来的提交? – jhabbott 2011-10-31 13:55:31

+1

我有一个[类似的问题](http://stackoverflow.com/questions/1876142/git-how-to-keep-a-file-common-across-all-branches)。我使用该文件来记录分支,以及它们为什么存在(等等)。 – themis 2010-01-23 01:13:27

回答

155

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。

+38

有没有办法显示分店? – Owen 2012-04-03 18:38:22

+14

@Owen:我现在唯一知道的方法是使用'git config branch.topic.description'来显示branch'topic'的描述。它存储在'.git/config'文件中。 – 2012-04-03 19:23:01

+10

@GregHewgill谢谢。有几个别名实际上并不是一个很好的查看方法。现在,如果只有'git branch'会显示列表中的描述... – Owen 2012-04-04 20:10:30

0

我很确定该功能当前不受支持。我认为你最好的选择是在分支中创建一个描述文本文件,一个README文件,它有你想要的信息。

+4

我不得不担心(不)在跨分支合并此文件。我不是吗? – 2010-01-21 10:40:59

+1

@KaspervandenBerg:也许只是留下评论而不是拔出-1张牌,然后等待一段时间,如果提问者不愿意改变帖子,但你看到他/她/它同时访问了这个网站, 把它拼出来。或者_you_定期检查你的答案,看看他们是否仍然正确? – 2012-08-15 08:12:02

+1

@phresnel:好点;我的意图是帮助未来的这个问题的提问者,并且有良好的反应能力和不正确的反应能力,但并不是为了“惩罚”克里斯J并导致他失去声誉。不幸的是,该网站表示我的投票被锁定:(。 – 2012-08-15 10:26:38

27

README通过Chris J建议可以工作,只要它是建立一个custom merge driver defined in a .gitattribute
这样,本地版本的README始终保留在合并期间。

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

至少,有README文件,你可以为任何一间分行,做:

$ git show myBranch:README 

如果你的自述是在你的REPO的根目录下,它会从任何路径工作,因为由使用的路径是来自所述回购的顶部目录的绝对路径。

+1

团队中的每个人都必须意识到这一点,并将其设置在他们的.gitattribute中,如果他们想要它吗?如果是这样,在我看来,这将是难以管理的,并且实际上人们很可能会这样做。 – 2015-07-15 22:26:15

0

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

+4

然后你不得不担心将这些文件合并到其他分支,或者记得使用' git show master:dev.txt',它不比选择的答案简单。 – 2010-12-23 22:40:45

3

您可以将意见标签:

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

按照惯例,你可以有与您的分支名称标签或者你可以使用标签-f保持注释标记在您的主题分支的头。

+8

这是不理想的,因为它不跟踪分支的头部 – AndyL 2011-05-27 19:42:01

36

如果使用README做末起来,创建一个git alias修改git checkout,使您的README显示每次转换分支的时间。

例如,在〜/的.gitconfig添加此,下[别名]

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

在此之后,可以运行git cor <branch_name>切换分支显示你是分支的自述切换到。

+1

+1。这是一个很好的提示,但你不是指'.gitconfig'而不是'.gitignore'? – 2010-11-03 10:39:33

+0

有趣的提示(不知道为什么它downvoted)。 +1 – VonC 2010-11-03 11:55:04

+4

当人们没有理由地倒退时,我讨厌它。整个练习的重点要学习和提高。 – 2010-11-03 16:21:51

5

这里是一个可能实现的git branches命令格雷格Hewgill提到的:

#!/usr/bin/perl 

sub clean { 
    map { s/^[\s\*]*\s// } @_; 
    map { s/\s*$// } @_; 
    return @_; 
} 

sub descr { 
    $_ = `git config [email protected]_.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"; 
} 
19

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

3

使用:

git branch --list -v 

显示上游分支:

git branch --list -vv 

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

+0

这些都很有用,我正在寻找一些自定义的东西。附有参考文件的某种说明。 – 2015-08-07 09:36:30

5

有两种流行的建议在这里:

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

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

缺点是,你需要签出怪异的孤儿分支,当你想更新READMEREADME不作为分支机构获得改名不自动更新,来或去。不过,这对我们来说很好。

不喜欢它:

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

+0

只有*可以*拥有master中的自述文件。这会增加混乱,但始终可以访问。 – 2017-07-11 12:14:27

+0

@ PeterA.Schneider:当然,但是然后添加一个新的分支需要一个提交,即使这个改变与master没有任何关系。另外,当分离主人时,你将在所有分支中有一份自述文件,这是一团糟。 – 2017-07-12 04:32:42

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

命令将定义一个全局选项alias.about作为shell表达式。在存储库中运行git about <branch>将显示分支的说明(如果设置)。

+3

谢谢!我改变了它,所以它只是看着我在 - “”!(描述)()(git配置分支。“$(git符号ref -short -q HEAD)\”。描述;}描述“' – aug 2017-03-23 23:40:32

+0

@aug - 我需要在参数引号前面放置反斜杠以使其起作用:'git config --global --add alias.about'!describe(){git config branch。”$(git symbolic-ref --short -q HEAD)“。描述; }; describe'' – 2017-04-26 13:40:55

0

只需使用:

git config branch.<branch name>.description 

要给予信贷,信贷是由于: https://glebbahmutov.com/blog/git-branches-with-descriptions/

+0

这是在添加问题后发布的git版本中添加的。接受的答案提到了这一点。 – 2017-11-27 15:17:48

+0

啊是的。它在评论中被提及。 – 2017-11-28 13:45:02