巨大なGitリポジトリから履歴を削除する

ブルータス

私は現在しようとしている削減サイズの私のGitのリポジトリが、顔の多くの問題を。

前書き

何千ものコミットと10以上のブランチを含む巨大で複雑なGitリポジトリがあります。現在のサイズは2GBを超えています。

私がやりたいこと

サイズをできるだけ小さくするために、リポジトリ履歴クリーンアップしたいと思います新しいルートコミットになりたい特別なコミットを選択しました(それを呼び出します<NEW_ROOT>)。前にすべてのコミット 削除し、後にすべてのコミット<NEW_ROOT>保持したいと思います。

私は保持したいだけmasterで、おそらくdevelop ブランチ、他のブランチはサイズを減らすために履歴から削除する必要があります。

手順の最後に、すべてをリモートプッシュして、更新されたマスターとオリジンのみを保持するようにします(基本的にはローカルの状況を反映している必要があります)。

これまでに試したこと

私はウェブをたくさん閲覧し、多くの解決策を見つけましたが、どれも私にはうまくいきませんでした。特に、私の場合、そのような解決策は完璧だと思いますが、残念ながら、リベースするときに多くの競合発生しました

また、私が見つけた多くのソリューションは、廃止された非推奨のツール/オプション(例git filter-branch)を参照しているため、多くの苦労をしました

抜け道を見つけるのを手伝ってくれませんか。

どうもありがとう!

エンリコカンピドリオ

これは、ローカルの大規模リポジトリの浅いクローンを作成することで達成できることのように思えます。

浅いリポジトリには不完全な履歴があり、そのコミットの一部では親が焼灼されています。[...]これは、上流に記録された実際の履歴がはるかに大きい場合でも、プロジェクトの最近の履歴のみに関心がある場合に役立つことがあります。

アイデアは、新しいルートと見なしたコミットから開始して、ローカルリポジトリを新しいディレクトリに浅く複製することです。このソリューションは、新しいリポジトリに単一のブランチ保持することにのみ関心があることを前提としていることに注意してください(例master)。

最初に行う必要がある<NEW_ROOT>は、既存のリポジトリ内のを指すブランチ参照を作成することです。

cd your-large-repo
git branch new-root <NEW_ROOT>^

浅いクローンのカットオフポイントnew-rootとして使用ます新しいリポジトリに含めたいので、カットオフポイントをその親に設定します。もちろん、から到達可能である必要があります<NEW_ROOT><NEW_ROOT>master

この時点で、次のことを指定して、ローカルリポジトリを新しいディレクトリに複製できます

  1. あなたはmasterブランチにのみ興味があります
  2. 到達可能なすべてのコミット除外たいnew-root

完全なコマンドは次のとおりです。

git clone --branch master --shallow-exclude=new-root file://C:\path\to\your-large-repo C:\path\to\your-new-repo

この--shallow-excludeオプションはnew-root、クローンに至るまでのすべてのコミットを除外するようにGitに指示するものです。

ここで、にcd入るyour-new-repoと、masterブランチのみが含まれ、ルートコミットがであることがわかります<NEW_ROOT>

新しいリポジトリはにorigin設定されfile://C:\path\to\your-large-repoます。したがって、先に進む前に、リモートリポジトリの実際のURLに置き換える必要があります。

git remote set-url origin https://example.com/your-large-repo.git

この時点で、新しい履歴をリモートリポジトリに強制的にプッシュすることができます(強制的にプッシュした場合の結果に関する通常の警告があります)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

リポジトリサイズを減らすためにgit履歴からフォルダを削除する

分類Dev

gitリポジトリから古い履歴を削除するにはどうすればよいですか?

分類Dev

Gitリポジトリのコミット履歴から大きなファイルを削除/削除するにはどうすればよいですか?

分類Dev

履歴なしでgitリポジトリを複製する

分類Dev

MercurialリポジトリからGBの不要な履歴を削除する最も簡単な方法

分類Dev

履歴を保持しながら、特定のファイルをあるgitリポジトリから別のgitリポジトリにコピーする方法

分類Dev

gitは、数回のコミット前に削除された大きなサブディレクトリをリポジトリ履歴から削除します

分類Dev

履歴と一緒にgitリポジトリからファイルを完全に削除します

分類Dev

履歴と一緒にgitリポジトリからファイルを完全に削除します

分類Dev

履歴と一緒にgitリポジトリからファイルを完全に削除します

分類Dev

GitHubリポジトリを削除すると、プロフィールページのグラフからGit投稿履歴も削除されますか?

分類Dev

履歴のないgitリポジトリをコピーする

分類Dev

GITリポジトリの履歴を修正する

分類Dev

履歴が異なる別のリポジトリからコミットをリベースする方法は?

分類Dev

Gitリポジトリを新しいリポジトリに複製する-コミット履歴なし

分類Dev

無関係なリポジトリからの履歴をマージする方法

分類Dev

リポジトリに存在しなくなったファイルの履歴からコミットを削除する方法

分類Dev

履歴のない別のリポジトリからのGitプル

分類Dev

履歴を失うことなくローカルgitリポジトリをPCからMacに移動する方法

分類Dev

リポジトリ履歴に関連する適切な Git マージ

分類Dev

Git:ファイルの履歴をあるリポジトリから別のリポジトリにコピーします

分類Dev

履歴をgitリポジトリからサブツリーに移動します

分類Dev

gitリポジトリで、Gitの履歴を失うことなく、名前が変更された古い「大文字」フォルダを削除する方法

分類Dev

Gitリポジトリを組み合わせ、履歴とREFSを保存する

分類Dev

間違ったsvn移行からのgit履歴を組み合わせる方法-古いリポジトリ

分類Dev

コミット履歴がないgitリポジトリを、履歴を保存したリポジトリにマージします

分類Dev

古いgit履歴を新しいリポジトリに追加する

分類Dev

gitリポジトリの履歴で大きなファイルを見つけるのに失敗する

分類Dev

コミット履歴を保持しながらgitリポジトリを元に戻すにはどうすればよいですか?

Related 関連記事

  1. 1

    リポジトリサイズを減らすためにgit履歴からフォルダを削除する

  2. 2

    gitリポジトリから古い履歴を削除するにはどうすればよいですか?

  3. 3

    Gitリポジトリのコミット履歴から大きなファイルを削除/削除するにはどうすればよいですか?

  4. 4

    履歴なしでgitリポジトリを複製する

  5. 5

    MercurialリポジトリからGBの不要な履歴を削除する最も簡単な方法

  6. 6

    履歴を保持しながら、特定のファイルをあるgitリポジトリから別のgitリポジトリにコピーする方法

  7. 7

    gitは、数回のコミット前に削除された大きなサブディレクトリをリポジトリ履歴から削除します

  8. 8

    履歴と一緒にgitリポジトリからファイルを完全に削除します

  9. 9

    履歴と一緒にgitリポジトリからファイルを完全に削除します

  10. 10

    履歴と一緒にgitリポジトリからファイルを完全に削除します

  11. 11

    GitHubリポジトリを削除すると、プロフィールページのグラフからGit投稿履歴も削除されますか?

  12. 12

    履歴のないgitリポジトリをコピーする

  13. 13

    GITリポジトリの履歴を修正する

  14. 14

    履歴が異なる別のリポジトリからコミットをリベースする方法は?

  15. 15

    Gitリポジトリを新しいリポジトリに複製する-コミット履歴なし

  16. 16

    無関係なリポジトリからの履歴をマージする方法

  17. 17

    リポジトリに存在しなくなったファイルの履歴からコミットを削除する方法

  18. 18

    履歴のない別のリポジトリからのGitプル

  19. 19

    履歴を失うことなくローカルgitリポジトリをPCからMacに移動する方法

  20. 20

    リポジトリ履歴に関連する適切な Git マージ

  21. 21

    Git:ファイルの履歴をあるリポジトリから別のリポジトリにコピーします

  22. 22

    履歴をgitリポジトリからサブツリーに移動します

  23. 23

    gitリポジトリで、Gitの履歴を失うことなく、名前が変更された古い「大文字」フォルダを削除する方法

  24. 24

    Gitリポジトリを組み合わせ、履歴とREFSを保存する

  25. 25

    間違ったsvn移行からのgit履歴を組み合わせる方法-古いリポジトリ

  26. 26

    コミット履歴がないgitリポジトリを、履歴を保存したリポジトリにマージします

  27. 27

    古いgit履歴を新しいリポジトリに追加する

  28. 28

    gitリポジトリの履歴で大きなファイルを見つけるのに失敗する

  29. 29

    コミット履歴を保持しながらgitリポジトリを元に戻すにはどうすればよいですか?

ホットタグ

アーカイブ