当前版本的git branch --list
主要是有效的,但是它很慢而笨拙。虽然可以轻松地将其固定在git本身中,但是实际上拒绝了试图改善用户界面的每个补丁。
外部命令git branch-list
是解决方案。
为什么git branch-list
更好?
git branch --list
假设您有一个跟踪远程分支的master
分支,但并非总是最新的(我们将使用Linux的存储库)。
在这种git branch
下
* master
这不会提供太多信息。如果您使用--verbose
选项,则会得到:
* master 9f4ad9e425a1 [behind 16592] Linux 5.12
好的,我们在16592年的投入下落后了,但是在什么之后呢?我们可以从提交标题中猜出,但这并不清楚。
如果我们使用--verbose --verbose
我们会得到:
* master 9f4ad9e425a1 [origin/master: behind 16592] Linux 5.12
最后,我们有一些有用的信息,但是花费了两个级别的详细信息,而且通常有很多信息通常没有用。
git branch-list
另一方面,带有git branch-list
:
* master origin/master
繁荣!马上,我们看到了最有用的信息: master
轨道origin/master
。
然后,如果我们想知道分支机构何时最新,我们使用-t
:
* master origin/master<
我们是否真的在乎我们是否在16592年落后,而不是在14386年的落后?不,我们所关心的是我们是<
符号所代表的贝德。这是与GIT_PS1_SHOWUPSTREAM=auto
一起使用__git_ps1
时获得的相同信息。
如果您需要更多信息,则可以指定-v
选项:
* master [origin/master<] Linux 5.12
我们在各个级别上获得所有最有用的信息(谁在乎对象ID是什么?)。
You can get some of the advantages of git branch-list
from the official git branch
, whoever, you need to know specifically which options to enable.
例如,假设您有几个分支机构,可以更新以doc-
的限制。使用官方的git branch
您可以做类似的事情:
git branch --list doc-*
但是,这起作用,1)除非您指定--list
,否则它不起作用,2)您需要添加星号( *
)。
另一方面, git branch-list
:
git branch-list doc
您不需要任何选择,也不需要星号。它只是直接起作用。
另一个例子;您可以启用具有以下配置的有用分支的有用分类:
[branch]
sort = -committerdate
但是,对于git branch-list
您不需要;默认情况下已排序。
为了测试性能,我将使用一个真实的存储库:Linux。在过去的10年中,我在完全随机的位置创建了100个分支。
加热缓存后:
git branch --list --verbose
21.804 seconds
21.614 seconds
21.415 seconds
git branch-list
0.104 seconds
0.107 seconds
0.107 seconds
还有一个问题吗?
git branch-list
与git branch --list
...但是更好。
Copy the script anywhere in your $PATH
and make it executable, or run make install
which will install it by default to your ~/bin/
directory (make sure it's in your $PATH
).