我想知道所有包含(不仅更改)特定文件的提交。
我尝试过的是:
git rev-list --all -- .gitmodules
git log --all --pretty="%H" -- .gitmodules
这些命令仅显示那些已修改特定文件的提交。我也对那些在树中包含未修改文件的提交感兴趣。
我想用它来进一步分析那些提交,以创建子模块使用情况报告。
答案 0 :(得分:0)
一种可能性是创建一个脚本,该脚本列出目录中每个文件的提交:
# !/bin/bash
for f in `ls -f`
do
# Var colors
resaltBlue=$'\033[47m\033[2;34m'
res=$'\033[0m'
# Print the file where you will get your commits
echo -e "$resaltBlue Archive : $f $res"
# Print the commit in oneline
git log --oneline "$f"
done
输出:
该脚本可以根据用户的需要进行改进。
答案 1 :(得分:0)
这些命令[
git log
和git rev-list
在给定文件名时仅显示那些修改了特定文件的提交。我也对那些在树中包含未修改文件的提交感兴趣。
在这种情况下,您将要编写自己的程序,可能是Shell脚本。
从git rev-list
开始,因为它是编写Git脚本的通用管道程序。如您所见,默认情况下,git rev-list
的输出仅为每行一个原始哈希ID。这些是提交的哈希ID:
因此git rev-list --all
查找所有引用都可访问且没有任何约束的提交,并列出所有这些哈希ID。现在,您需要做的只是保留文件所在的提交,而放弃文件不存在的提交。通过脚本执行此操作的最简单方法是:
git rev-list --all | while read hash; do
if git rev-parse --quiet --verify $hash:.gitmodules >/dev/null; then
echo $hash # file .gitmodules exists in $hash
# else
# file .gitmodules does not exist in $hash
fi
done