当前生成更改日志的代码:
svn2cl --linelen 78 --reparagraph --include-rev --group-by-day
我能得到的最接近的香草选项是
git shortlog --format='* [%h] %s' -w78,8,10
svn2cl
如何尽可能地模拟输出?
输出示例:
2013-02-19 username
* [r30695] path1: commit message
* [r30691] path2, path3, path4: looooooooooooooooooooooooooooong
commit message
* [r30690] path1, path3: commit message
2013-02-19 other_user
* ...
2013-02-18 username
* ...
仍然存在两个问题:
- 在提交消息之前包含人类可读的路径列表
- 漂亮打印长提交消息
答案1
另一种解决方案给出了正确的方向。到目前为止的结果:
#!/usr/bin/env bash
while read -r -u 9 date name
do
echo "$date $name"
echo
GIT_PAGER=cat git log --no-merges --committer="$name" --since="$date 00:00:00 +0000" --until="$(date --date="$date + 1 day" +%Y-%m-%d) 00:00:00 +0000" --format=' * [%h] %s'
echo
done 9< <(git log --no-merges --format=$'%cd %cn' --date=short | sort --unique --reverse)
午夜时间是必要的。看起来由于某种原因它默认使用当前时间而不是当天的开始时间。
仍然存在两个问题:
- 在提交消息之前包含人类可读的路径列表
- 漂亮打印长提交消息
示例输出:
2013-02-19 username
* [f97bb5f] commit message
* [f0e419d] looooooooooooooooooooooooooooong commit message
* [070e50f] commit message
2013-02-19 other_user
* ...
2013-02-18 username
* ...
答案2
为了让它在 OS X 上工作,我对 l0b0 的解决方案做了一些小的修改:
git-grouped-log () {
while read -r -u 9 since name
do
until=$(date -j -v+1d -f '%Y-%m-%d' $since +%Y-%m-%d)
echo "$since $name"
echo
GIT_PAGER=cat git log \
--no-merges \
--committer="$name" \
--since="$since 00:00:00 +0000" \
--until="$until 00:00:00 +0000" \
--format=' * [%h] %s'
echo
done 9< <(git log --no-merges --format=$'%cd %cn' --date=short | sort --unique --reverse)
}
我还将它包装在一个函数中,因为这样我就可以将它保存在任意文件中。