我正在编写一个脚本来遍历某个文件夹及其子文件夹中的所有Git存储库并执行git log
。
脚本的输出最终保存到CSV日志文件中。
现在我想在git-log结果中包含当前文件夹名称,但我无法在git-log文档中找到如何执行此操作。
我当前的git-log命令如下所示:
git log --branches=master --no-merges --pretty=format:"%H;%an;%ad;%s" --date=format:'%Y-%m-%d %H:%M'
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
我认为你正在使用错误的工具完成任务。当前目录是环境的属性,而不是存储库的属性; git log
并不十分关心它。
因此,您应该获取脚本中的当前目录并将其以某种方式放入git log
的输出中。
如果您需要在git log
返回的每一行上都有repo目录,那么您只需在格式字符串中挤压$(pwd)
:
git log --branches=master --no-merges --pretty=format:"%H;%an;%ad;%s;$(pwd)" --date=format:'%Y-%m-%d %H:%M'
请注意,如果当前路径包含%
,则会产生不需要的结果,因为它是由git log
解释的特殊字符。
为了避免这种情况发生,您可以在将路径插入格式之前使用sed
来转义%
字符:
dir=$(pwd | sed s/%/%%/g)
git log --branches=master --no-merges --pretty=format:"%H;%an;%ad;%s;$dir" --date=format:'%Y-%m-%d %H:%M'
如果当前路径包含"
或;
,它仍然会产生问题,因为它们是shell和CSV格式的特殊字符。如果需要,您也可以尝试在sed
命令中引用它们。
答案 1 :(得分:0)
我不确定我是否理解正确,但你在寻找--dirstat?:
这将为提交消息底部的每个已更改目录添加一定百分比的更改。从联机帮助页:
--dirstat[=<param1,param2,...>] Output the distribution of relative amount of changes for each sub-directory. The behavior of --dirstat can be customized by passing it a comma separated list of parameters. The defaults are controlled by the diff.dirstat configuration variable (see git- config(1)). The following parameters are available: