6

もう存在しない 2 つのファイルを git リポジトリから削除したいと考えています。

私はそれらを入れ、コミットし、プッシュしようとしましたが、大きすぎました. それで私はそれらを取り出し、作業を続け、コミットしてプッシュしようとしましたが、それでも同じエラーが発生しました。彼らはまだ歴史のどこかに残っていると思いました。

私はそのブランチで作業を続け、さらに 1 つのコミットを行ったため、問題を悪化させたと思います。次に、そのブランチを master ブランチにマージしました。

そこで、解決策を探してbfgを見つけました。

しかし、ページの指示は私には意味がありません。

最初に、

$ git clone --mirror git://example.com/some-big-repo.git

どこからクローンを作成すればよいですか? github.com のリモート リポジトリには、大きなファイルを追加した後に行ったコミットとマージがありません。しかし、指示は、とにかくそこから取得することになっているように思わせます. (ローカルリポジトリから複製しました。)

次、

$ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git

some-big-repo.gitミラーリングされたリポジトリですか、それとも通常のローカル リポジトリですか? (これにはミラー化されたリポジトリを使用しました。)

そして、履歴が更新されていることを確認して試してみたところ、

$ cd some-big-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive

(私はこれのためにミラー化されたクローンにいました) エラーが発生しました。

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error: 
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To /home/cole/main_repo
 + 94b9a0d...c7c4317 work -> work (forced update)
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to '/home/cole/main_repo'

これは私には理にかなっています。ええ、私は現在masterチェックアウトしています。しかし、それでは、私は他に何をすべきだったのでしょうか? 別の方法で試した場合にのみ、問題が発生することがわかります。

4

2 に答える 2

2

BFG での最初の 3 ステップ:

  1. ターミナルで次のコマンドを使用して BFG をダウンロードします。brew install bfg
  2. --mirrorフラグを使用して、リポジトリの新しいコピーを複製します。

    git clone --mirror git://example.com/some-big-repo.git
    

    mirror フラグを使用すると、リポジトリのファイルを実際にコピーしなくても、Git データベースの完全なコピーを作成できます。

  3. bfg --the-options-you-want the-mirror-repo-you-just-cloned.git

IBM エンジニアによってこのマニュアルから改作されました。ステップ 3 で説明されているようにリポジトリにアクセスしないcdでください。そうしないと、「the-mirror-repo-you-just-cloned.git は有効な Git リポジトリではありません」というエラーが表示されます。

于 2019-01-22T23:48:58.867 に答える