确保Git推送来自同一个树

确保Git推送来自同一个树,git,Git,我有一个中央git回购,在其中我删除了它的旧历史记录,导致所有sha ID都被更改。所以我有一个新的第一次承诺。我想防止人们把旧的历史推到新的回购协议上(它将有不同的第一次承诺) 我可以使用以下方法获取第一次提交的sha1: git log --pretty=format:"%H @ %ai (%an)" | tail -1 如何在预接收挂钩中获取克隆的目录?您可以添加一个读取每个接收到的引用的目录 如果第一个收到的头没有父级,这意味着有人正在推主分支的所有历史记录,而不是一些提交 git r

我有一个中央git回购,在其中我删除了它的旧历史记录,导致所有sha ID都被更改。所以我有一个新的第一次承诺。我想防止人们把旧的历史推到新的回购协议上(它将有不同的第一次承诺)

我可以使用以下方法获取第一次提交的sha1:

git log --pretty=format:"%H @ %ai (%an)" | tail -1
如何在预接收挂钩中获取克隆的目录?

您可以添加一个读取每个接收到的引用的目录

如果第一个收到的头没有父级,这意味着有人正在推主分支的所有历史记录,而不是一些提交

git rev-list $new-ref
(如果
$new ref
是根提交,并且没有父提交,则它应该只返回自身)

如果是这种情况,请拒绝提交(
退出1


如果没有,请不要阻止推送。

仅供参考,Git应该自动阻止人们从旧历史中推送,因为sha ID不匹配,使其成为非快进推送。在这种情况下,他们必须强制推送,你也可以在遥控器上禁用。但也许你不想完全禁用强制推送,对吗?是的,我希望保持强制选项的可能性