Git中有没有办法为分支提供“描述”?
虽然我尝试使用描述性名称,但在单个分支上工作一段时间有时会削弱我对为什么创建其他一些主题分支的记忆。我尝试为分支使用描述性名称,但我认为“描述”(关于分支目的的简短说明)会很好。
Git中有没有办法为分支提供“描述”?
虽然我尝试使用描述性名称,但在单个分支上工作一段时间有时会削弱我对为什么创建其他一些主题分支的记忆。我尝试为分支使用描述性名称,但我认为“描述”(关于分支目的的简短说明)会很好。
Git 1.7.9 支持这一点。从1.7.9 发行说明:
* "git branch --edit-description" 可用于添加描述性文本 解释一个主题分支是关于什么的。
您可以看到 2011 年 9 月引入的该功能,提交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。
[来自@AchalDave] 不幸的是,您无法推送描述,因为它们存储在您的配置中,这对于记录团队中的分支而言毫无用处。
如果您最终使用了 README,请创建一个git 别名修改git checkout
,以便每次切换分支时都会显示您的 README。
例如,将其添加到 ~/.gitconfig 中的[alias]下
cor = !sh -c 'git checkout $1 && cat README' -
在此之后,您可以运行git cor <branch_name>
切换分支并显示您要切换到的分支的 README。
用于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
}
这是gb
看起来的样子,在这里显示为文本,以防图像腐烂:
$ gb
* logging Log order details. Waiting for clarification from business.
master
sprocket Adding sprockets to the parts list. Pending QA approval.
作为图像,您可以看到颜色:
Chris JREADME
建议的方法可以工作,只要它使用.
这样,在合并期间始终保留本地版本。.gitattribute
README
分支的“描述”也称为与该元数据关联的“评论”,并且不受支持。
至少,使用README
文件,您可以对任何分支执行以下操作:
$ git show myBranch:README
如果您的 README 位于您的 REPO 的根目录中,它可以从任何路径运行,因为所使用的路径git show
是来自所述 repo 的顶级目录的绝对路径。
这里有两个流行的建议:
git branch --edit-description
: 我们不喜欢这个,因为你不能推动它。也许我可以记住我创建的分支是做什么的,但我的团队肯定不能。README
文件公关 分支。这是合并期间的痛苦:超级容易合并冲突,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
缺点是当你想要更新时你需要检查奇怪的孤立分支,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
同样,如果个人团队成员愿意,他们也可以创建自己的 branches-$user
孤立分支来描述他们自己的私有分支,只要他们不将它们推送给团队即可。
通过进一步的工具,这也可以与git branch
. 为此,也许README.yaml
可以考虑使用文件而不是普通的README
.
git config --global --add alias.about '!describe() { git config branch."$1".description; }; describe'
命令将定义一个全局选项alias.about
作为 shell 表达式。如果设置,在存储库中运行git about <branch>
将显示分支的描述。
这是一个git
alias
可以让您在当前分支上设置和阅读描述的方法:
git config --global --add alias.about '!describe() { msg="$1"; git config branch."$(git rev-parse --abbrev-ref HEAD)".description ${msg:+"$msg"}; }; describe'
用法/示例:
(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
特别感谢@Felicio 的回答让我开始了。
git branches
这是Greg 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";
}
假设你想创建一个分支
git branch branch-20200328
git notes add branch-20200328 -m "This branch is for whatever"
git notes show branch-20200328
您可以将注释附加到标签:
git tag -m 'this was a very good commit' tag1
按照惯例,您可以拥有与您的分支名称相关的标签,或者您可以使用 tag -f 在主题分支的头部保留一个注释标签。
您可以使用
git config --get-regexp "branch.*.description"
我很确定当前不支持该功能。我认为你最好的选择是在包含你想要的信息的分支中创建一个描述文本文件,基本上是一个 README。
选择的答案对我来说似乎有点矫枉过正。我倾向于维护一个每个分支的描述文件,它是一个正常的源代码控制文件,比如master.txt
,dev.txt
等,如果有一个笨拙的数字或分支,我会创建一个层次结构来更好地组织它。
只需使用:
git config branch.<branch name>.description
在信用到期时给予信用: https ://glebbahmutov.com/blog/git-branches-with-descriptions/
采用
git branch --list -v
显示上游分支:
git branch --list -vv
添加-r
以仅显示遥控器或-a
显示遥控器和本地。