如何在预接收挂钩中找出新GIT分支的父提交?

时间:2012-10-17 03:38:21

标签: git hook

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

  

预接收挂钩执行一次接收操作。它不需要   参数,但对于每个ref都要更新它接收标准   输入以下格式的行:

     

(旧值)SP(新值)SP(ref-name)LF

     

其中(old-value)是存储在ref中的旧对象名,   (new-value)是要存储在ref和中的新对象名   (ref-name)是ref的全名。在创建新的参考时,   (旧值)是40 0。

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

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

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

挂钩,(旧值)为40 0; (new-value)是commit3; (ref-name)是branch2。我想得到commit1。

  

commit3 --branch2

     

commit2

     

commit1 - branch1

1 个答案:

答案 0 :(得分:2)

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

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