为了比较多个版本之间的单个文件,我希望跟踪每个文件中文件更改的第一个版本。
我希望记录当前状态下git文件的第一个标记,这是自上次更改以来的。
例如,我有两个文件:
* file1 - aadfed
* file2 - aadfed每次构建发行版时,我都会在当前提交中添加一个标记,这样我就可以轻松地从GIT重新创建发布。所以,在第一个版本之后,这将是标记
* file1 - aadfed - [release-1]
* file2 - aadfed - [release-1]假设我更改了file1,生成了一个包含file1的新提交。然后构建一个发行版,用release-2标记提交。
这是我目前的状况:
* file1 - bebebe - [release-2]
* file2 - aadfed - [release-1][release-2]我想要以当前的形式有效地告诉第一个标记是在哪里出现的。
目前执行情况
我现在要做的是:
git describe --contains `git rev-list HEAD file1`
git describe --contains `git rev-list HEAD file2`(实际上,git describe在我运行的shell脚本中,如下所示:)
find * -exec bash getgitinfo.sh {} \;getgitinfo.sh:
COMMIT=$(git rev-list -1 HEAD $1)
if [ "${COMMIT}x" != "x" ];
then
RELEASE=$(git describe --contains $COMMIT)
echo $1,$RELEASE
fi 虽然这样很管用,但它觉得应该有更好的方法。有什么暗示吗?
期望产出:
file1,release2
file2,release1发布于 2022-05-14 23:47:56
我不知道有什么更好的方法来做你想做的事。不过,如果您发布了输出以及您希望输出的内容,则可能会有所帮助。
如果只是输入过多,git别名可以解决这个问题。转到~/.gitconfig并添加:
[alias]
file = "!git describe --contains `git rev-list HEAD \"$1\"` #"现在您应该只需键入:
git file file2发布于 2022-05-16 09:32:55
批量处理您的信息获取和整理,您试图使用一个方便的命令的方式,它不是为,所以它是错误的权衡。
与核心对话,这就是你如何建立新的便利。
所有标记名和它们以高效生成、易于解析的格式解析的提交:
git for-each-ref refs/tags --format='%(refname)^{commit} %(refname)' \
| git cat-file --batch-check=$'%(objectname)\t%(rest)'最新的主线承诺触摸每个当前文件:
git log --first-parent -m --pretty=format:%H --name-status \
| awk ' NF==1{commit=$1}
NF==2 && !seen[$2]++ { print commit,$2 } ' FS=$'\t'整理:
( git for-each-ref refs/tags --format='%(refname)^{commit} %(refname:short)' \
| git cat-file --batch-check=$'tag\t%(objectname)\t%(rest)'
git log --first-parent -m --pretty=format:%H --name-status --no-renames
) | awk ' $1=="tag" { tag[$2]=$3; next }
NF==1 && tag[$1] { containing=tag[$1] }
NF==2 && !seen[$2]++ && $1!="D" { print containing, $2 }
' FS=$'\t' OFS=$'\t'当然还有“品尝季节”。
https://stackoverflow.com/questions/72142105
复制相似问题