Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git:日复一日的变更日志_Git_Bash_Logging_Changelog - Fatal编程技术网

git:日复一日的变更日志

git:日复一日的变更日志,git,bash,logging,changelog,Git,Bash,Logging,Changelog,如何生成按日期分组的提交的更改日志,格式为: [date today] - commit message1 - commit message2 - commit message3 ... [date day+3] - commit message1 - commit message2 - commit message3 ... (skip this day if no commits) [date day+1] - commit message1 - commit message2 - com

如何生成按日期分组的提交的更改日志,格式为:

[date today]
- commit message1
- commit message2
- commit message3
...
[date day+3]
- commit message1
- commit message2
- commit message3
...
(skip this day if no commits)

[date day+1]
- commit message1
- commit message2
- commit message3
... 
[date since]
- commit message1
- commit message2
- commit message3
#!/bin/bash
# Generates changelog day by day
NEXT=$(date +%F)
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
    NEXT=$DATE
done

任何git log命令或smart bash脚本?

git log
都有
——从
到,围绕它包装一些东西应该不难。

这肯定需要某种脚本。
#!/bin/bash
# Generates changelog day by day
NEXT=$(date +%F)
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
    NEXT=$DATE
done
有点像这样

#!/bin/bash
# Generates changelog day by day
NEXT=$(date +%F)
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
    NEXT=$DATE
done
(不完全是你想要的,但可以给你一个想法)

#!/bin/bash
# Generates changelog day by day
NEXT=$(date +%F)
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
    NEXT=$DATE
done
我知道哪些也有按日期组织的数据(但不包括提交消息)

#!/bin/bash
# Generates changelog day by day
NEXT=$(date +%F)
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
    NEXT=$DATE
done

注意:此命令的
git分支
部分不适合作为注释编写脚本。

git for each ref
git show ref
是脚本命令的自然候选对象,是管道命令。

这里是脏的,但我提出的脚本的工作版本是:

#!/bin/bash
# Generates changelog day by day
NEXT=$(date +%F)
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
    NEXT=$DATE
done

我无法得到接受的答案来处理今天的提交,因为我的设置在第一次迭代中没有正确处理下一个变量。Git的日志参数也将接受一个时间,这样就不需要下一个日期:

#!/bin/bash
# Generates changelog day by day
NEXT=$(date +%F)
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
    NEXT=$DATE
done
#!/bin/bash
# Generates changelog day by day
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since="$DATE 00:00:00" --until="$DATE 24:00:00"
done

我用python编写了一个脚本来创建一个每周的git日志

#!/bin/bash
# Generates changelog day by day
NEXT=$(date +%F)
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
    NEXT=$DATE
done
通过更改时间差,您可以轻松地将其更改为天、月等

#!/bin/bash
# Generates changelog day by day
NEXT=$(date +%F)
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
    NEXT=$DATE
done

感谢您提供了这一信息丰富的答案。我还需要知道一件事:如何列出特定一天的所有提交:
git log--since=“2010-06-02”--till=“2010-06-02”
不列出任何内容。@takeshin:您是否尝试过
git log--since=“2010-06-02”--till=“2010-06-03”
?(从一天-02-到另一天-03-)@VonC,是的,但在简单的循环中,我只知道日期,不知道下一个日期。@VonC,我的计划是:生成唯一的日期列表:
git log--pretty=“format:%ad”--date=short | uniq
,并在循环中迭代它们,与您的答案类似。不要使用
git分支
output编写脚本;它是用户界面命令,其输出可以更改。使用
git show ref
git为每个用于脚本编写的ref
使用。如果commitdate是非单调的,由于其中一个参与者的时钟倾斜/时钟配置错误,该怎么办?只需在循环中使用管道:
product and sort dates | while read DATE;做…;完成
。顺便说一句,您可能希望第二个脚本使用
GIT\u PAGER=cat GIT log…
(以防止GIT log在整个脚本输出到终端时使用寻呼机)。另外,您可能希望与
--无合并
,保持一致,否则如果一天的所有提交都是合并的,您可能会得到没有任何提交的
[date]
头。谢谢Chris。我已经更新了代码。(之前我试图在循环的末尾添加管道)@takeshin很棒的脚本。但是,日期有问题。具体而言,它将今天的承诺聚合到昨天。我用这个替换了GIT_PAGER行,它是固定的:
GIT_PAGER=cat GIT log——无合并——格式=“*%s”--begin=“$DATE 00:00”--til=“$DATE 23:59”
在这次更改后不需要
$NEXT
变量这真是太好了。唯一的问题是echo[$DATE]不起作用,因为它试图计算表达式或其他任何内容。所以只要拆下支架就好了
#!/bin/bash
# Generates changelog day by day
NEXT=$(date +%F)
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
    NEXT=$DATE
done