如何在pre-recive hook中找出新GIT分支的父提交?

我尝试在GIT中实现预接收挂钩,以防止大型文件和指定的扩展文件(* .jar,* .zip).

pre-receive hook executes once for the receive operation. It takes no
arguments, but for each ref to be updated it receives on standard
input a line of the format:

(old-value) SP (new-value) SP (ref-name) LF

where (old-value) is the old object name stored in the ref,
(new-value) is the new object name to be stored in the ref and
(ref-name) is the full name of the ref. When creating a new ref,
(old-value) is 40 0.

如果用户更新现有分支中的文件,我们可以使用“git diff”命令获取更新文件列表.然后我只需要检查更新的文件.

但是对于新的分支创建,用户可以基于existig提交创建一个新的分支,并在本地存储库中进行一些更改然后推送.对于这种情况,我只想在现有提交后检查更改使用.任何GIT命令都可以帮助找出新分支的提交来源?

对于exaple,用户创建分支2,基于分支1中的最新提交.之后,创建commit2和commit3.然后推动分支2.

在钩子中,(旧值)是40 0; (new-value)是commit3; (ref-name)是branch2.我想得到commit1.

commit3 –branch2

commit2

commit1 — branch1

最佳答案 我想你正在寻找以前被推过的最近的祖先.但是,如果推送合并,则可能存在多个这样的祖先.所以我想你想检查这个命令输出的每个提交的差异:

git rev-list --boundary <new-commit> --not --all | sed -n 's/^-//p'
点赞