我尝试在 GIT 中实现预接收挂钩,以防止大尺寸文件和指定的扩展文件(*.jar、*.zip)。
pre-receive 钩子为接收操作执行一次。它不接受任何参数,但对于每个要更新的 ref,它会在标准输入上接收以下格式的一行:
(旧值) SP (新值) SP (参考名称) LF
其中 (old-value) 是存储在 ref 中的旧对象名称,(new-value) 是要存储在 ref 中的新对象名称,(ref-name) 是 ref 的全名。当创建一个新的 ref 时,(旧值)是 40 0。
如果用户更新现有分支中的文件,我们可以使用“git diff”命令获取更新文件列表。然后我只需要检查更新的文件。
但是对于新分支的创建,用户可以基于现有的提交创建一个新的分支,并在本地存储库中进行一些更改,然后推送。对于这种情况,我只想检查现有提交后所做的更改使用。任何 GIT 命令都可以帮助找出新分支的来源?
例如,用户根据分支 1 中的最新提交创建分支 2。之后,创建 commit2 和 commit3。然后推分支 2。
在钩子中,(旧值)是 40 0;(新值)是 commit3;(ref-name) 是 branch2。我想得到commit1。
提交3--分支2
提交2
提交1——分支1