对 git 中同一文件的每个版本运行 shell 命令

Ame*_*ina 0 git shell zsh

my_file考虑git 存储库中的一个文件。我想在给定分支(例如 master)中针对该文件的每个最新版本运行 shell 命令(例如) 。wc -l $FILE_VERSIONK

我所说的版本是指文件的唯一快照(即文件更改时)。更具体地说,例如,最新K=4版本:

master   <file_changed>       v4
master~1 <file_not_changed>   
master~2 <file_changed>       v3
master~3 <file_changed>       v2
master~4 <file_not_changed>   
master~5 <file_changed>       v1
Run Code Online (Sandbox Code Playgroud)

我该如何用 git 解决这个问题?

Nou*_*him 5

我会这样做

for i in $(git log --pretty='%h' -- my_file)
do
   echo "$i $(git show ${i}:my_file | wc -l)"
done
Run Code Online (Sandbox Code Playgroud)

这实际上并没有签出文件。简单地显示它。如果需要,您可以将其重定向到文件中并对其运行更复杂的命令。对于wc,这已经足够了。它还使用--prettygit log 的参数,以便我们只获得我们需要的内容,而不是整个提交信息。

这将一直追溯到,但您可以使用 a 将其缩小到只有几个提交head

  • 考虑一下:`while read -ri; 做 ...; 完成 &lt;&lt;(git log --pretty=%h -- my_file)` (2认同)