如何在Git日志中包含当前文件夹名称

时间:2017-01-13 08:48:32

标签: git git-log

我正在编写一个脚本来遍历某个文件夹及其子文件夹中的所有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'

关于如何做到这一点的任何想法?

2 个答案:

答案 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: