2017-10-13 147 views
0

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

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

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

+0

Developpers不应该克隆,他们只可以使用武力拉:'混帐拉-f'或'的git拉出身+主'。 – phd

回答

1

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

  1. 查找旧分支上但最新的分支上最旧的提交。
  2. 在远程存储库中编写一个pre-receive钩子。在这个钩子中,你可以得到推送分支的顶端。如果可以从推送的分支中访问最旧的提交,那么可以防止推送并回显推送失败的原因以及如何解决错误。

例如,如果老枝是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 
+0

这将是一个理想的解决方案。然而,我处于企业环境中,只有管理员可以设置预先接收挂钩......只需说服他们让我添加一个 – Bertrand

+0

@Bertrand如果您可以让每个团队成员通过电子邮件知道这些更改,或者面对面谈话。 – ElpieKay

+0

当然,我会但我不相信任何人:p – Bertrand

0

我猜想,任何推动将被迫推动,因为历史改变。如果这是真的,你可以使用solution mentioned here阻止所有的推力。它涉及在中央存储库上设置一些配置值。

+0

其实我试图从预重写仓库中拉出来,并推出了一堆“保持”参考,没有错误。我想这不是无害的,但我更喜欢更清洁的解决方案 – Bertrand