代码之家  ›  专栏  ›  技术社区  ›  Arnold Roa

复制一个没有历史记录的git存储库,并且仍然兼容两种合并方式?

git
  •  1
  • Arnold Roa  · 技术社区  · 7 年前

    我有一个 original 对历史上第一次提交的机密信息进行硬编码的存储库。

    我想创造一个 new 存储库,其他开发人员可以在其中工作,而不必查看历史记录,我希望能够从中合并 新的 存储库到 起初的 还有维切弗萨。

    我试着克隆 起初的 具有 depth=1 然后试着用 -f 新的 仓库,但我得到了 shallow update not allowed 错误。

    我试着用嫁接点 git filter-branch -- --all 但是后来 unrelated histories 出现错误。

    我怎样才能做到这一点?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Justice    7 年前

    我建议你用 BFG 我知道它救了我一两次。

    这里有一个快速的 how-to 为你:

    1. 确保已安装Java
    2. 安装 BFG
    3. 将存储库整体克隆到新的repo中:

      $ git clone --mirror url/to/your/repo.git
      
    4. 为要删除的每个字符串创建一个带有新行的文件(每个字符串将重写为 远离的 默认情况下):

      $ echo "my_secret_API_key" >> secret.txt
      $ echo "glob:AWS_*" >> secret.txt (search by glob pattern)
      $ # search by regex pattern and change default rewritten text
      $ echo "regex:password=\w+==>password=" >> secret.txt
      
    5. 从回购历史记录中删除上面定义的字符串 BFG 以下内容:

      $ bfg --replace-text secret.txt repo.git
      $ cd repo.git
      

    现在是检验你的历史并确保一切顺利的时候了。

    1. 使用我们所做的所有更改清理存储库

      $ git reflog expire --expire=now --all && git gc --prune=now --aggressive
      
    2. 推动更改(不需要强制,因为您更新了每个引用)

      $ git push
      

    对于其他使用repo的人来说,它应该是一个简单的更新,如下所示:

    $ git fetch origin/branch
    $ git checkout -B branch origin/branch
    

    让我知道,如果我需要澄清任何事情,我不得不为客户做一两次。