历史更改后强制git clone

时间:2017-10-13 12:44:12

标签: git

为了从GIT存储库中删除大文件,我们必须使用BFG更改公共历史记录。

这意味着所有开发人员都应该从头开始克隆它,以避免推动以前的历史记录。

有没有办法用非新鲜的回购来阻止开发商回购的推动?

2 个答案:

答案 0 :(得分:1)

由于没有提供足够的细节,我只想给出一个可能的解决方案。

  1. 查找旧分支上最旧的提交但不在新分支上。
  2. 在远程存储库中写一个pre-receive挂钩。在这个钩子中,你可以获得推动分支的尖端。如果可以从推送的分支中访问最早的提交,则阻止推送和回显为什么推送失败以及如何解决错误。
  3. 例如,如果旧分支为A-B-C-D-E-F且新分支为A-B-C-M-N-O,则D是最早的提交。如果新内容为A'-B'-C'-D'-E'-F',则A是最早的。

    pre-receive钩子中,你可以得到这样的提示:

    #!/bin/bash
    
    OLDEST=xxxx
    
    while read old new name;do
        #$new is the tip of the pushed branch
        if git merge-base --is-ancestor $OLDEST $new;then
            echo "Error: you are pushing commits with the old history."
            echo "Error: please clone the repository with the new history."
            exit 1
        fi
    done
    

答案 1 :(得分:0)

我猜测,自历史发生变化以来,任何推动都会被迫推动。如果这是真的,你可以使用solution mentioned here来阻止所有的推力。它涉及在中央存储库上设置一些配置值。