有没有一种方法可以收集存储库中分支的列表以及最后的提交日期?
换句话说,我想在标准输出上打印如下内容:
branch_name_1 date1
branch_name_2 date2
branch_name_3 date3
有可能吗?
编辑:我尝试使用以下步骤:
git log --pretty=format:"%ad:%an:%d:%B" --date=short --branches
git branch -a
git ls-remote –heads
其中每个都给了我当前所在存储库的分支。 但是现在我想检查是否可以从每个目录(到特定的仓库)运行命令。也以特殊格式打印。仍在尝试了解如何获取上次提交的日期。
另一个编辑:我考虑过,最好使用git ls-remote –heads
,因为我想检查非本地存储库。如何查看git ls-remote –heads
输出中每个分支的日期?
答案 0 :(得分:1)
如果您的Git版本> = 2.13,则可以使用相同的git branch
命令来执行此操作。
它有一个--format
参数,您可以根据需要使用它来格式化输出。像这样运行即可获得所需的输出。
git branch --format='%(refname:short)%09%(committerdate)' --sort=-committerdate
您可以添加一些颜色使其清晰。
git branch --format='%(color:bold green) %(refname:short) %(color:white) %(committerdate)' --sort=-committerdate
输出:
Development Fri Jun 29 10:32:43 2018 +0530
feat-2180 Fri Jun 8 18:01:36 2018 +0530
master Wed May 16 17:19:21 2018 +0530
以下是它支持的字段名称列表-https://github.com/git/git/blob/v2.17.0/ref-filter.c#L328
================================================ =====================
正如您在评论中提到的那样;我认为您不能仅使用ls-remote
命令来获得提交详细信息。只是在这里查看了命令的源代码,除了ref和commit哈希值,它似乎没有返回任何其他值。因此,我认为无法使用此功能(如果我输入错了,请纠正我)。
https://github.com/git/git/blob/maint/builtin/ls-remote.c
如果您适合进行临时克隆,建议您创建一个shell脚本或某种脚本来进行克隆并获取摘要。
这是一个例子:
#!/usr/bin/env bash
REMOTE_URL=$1
git clone -q --depth 1 --bare --no-single-branch $REMOTE_URL /tmp/temp-git-clone
cd /tmp/temp-git-clone
git branch --format='%(color:bold green) %(refname:short) %(color:white) %(committerdate)' --sort=-committerdate
rm -rf /tmp/temp-git-clone
我在clone
命令中使用了以下参数,使其变得更快一些。
--depth 1
=将仅获得最后一次提交
--bare
=创建一个裸仓库,这意味着将没有任何仓库 工作目录,它不会复制文件。
--no-single-branch
=需要此命令来告诉clone命令获取所有内容 分支机构
如果您运行脚本:./summary.sh <your repo url>
它将按您期望的显示摘要!
希望它会有所帮助:)
答案 1 :(得分:0)
如果需要处理引用列表,最好的起点是git for-each-ref
。如果您只想处理某些引用,则可以提供描述所需内容的模式。例如:
git for-each-ref refs/heads
将仅列出本地分支机构
git for-each-ref refs/heads refs/remotes
将列出本地分支机构和远程跟踪参考。要列出所有内容(分支,标签,远程引用以及可能存在的其他更奇特的东西),只需
git for-each-ref
您还可以提供format
选项。例如
git for-each-ref --format='%(refname)%09%(committerdate)` refs/heads
将显示每个本地分支以及相应提交的提交日期。 (您还可以使用%(authordate)
,例如,在重写历史记录后,提交日期通常会发生变化,但作者的日期则留在原处。)
稍等一下,但是上面的内容看起来有点过头,因为您询问了“最后提交日期”。奇怪的是,对于git,分支只是指向一个提交的指针-提交的日期通常是该分支的最后提交日期,从直觉上来说,它“应该”是它,并且它是git中最接近“真实”的东西到分支的最后提交日期-尽管如果已通过多种方式操纵了分支,则可能有所不同。
答案 2 :(得分:0)
只需将--no-walk
添加到您的日志命令中即可。
git log --no-walk --branches --date=short --format="%ad:%d"
答案 3 :(得分:0)
您可以在任何目录中显示远程分支名称和相关日期(但必须在git repo内,因为git命令需要在git repo内执行)。
详细步骤如下:
使用以下命令检查git repo中的权限是否存在:
git rev-parse --show-toplevel
在步骤1中检查后,如果目录不在git repo中,请通过git init
创建一个git repo。
否则,请跳过此步骤。
使用以下命令获取远程分支和日期:
git remote add myremote <remote repo URL> -f
for branch in `git branch -r | grep myremote | grep -v HEAD`;do echo -e $branch \\t\\t`git show --format="%ci" $branch | head -n 1`; done | sort -r
答案 4 :(得分:-1)