問題タブ [git-rewrite-history]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - index-filterを使用したGitfilter-branchが機能せず、期待どおりにディレクトリが削除されます
マスターブランチのGitリポジトリfooの構造
他の支店refs/
では他の多くの場所にあるかもしれません
ゴール
ディレクトリref(およびそのコンテンツ)のすべてのインスタンスをGit(履歴)環境から削除するには:GitBashを使用するWindows7
参照の削除(Gitは関与していません。これを試して、それ自体が機能することを確認しました)
成功すると、すべてrefs/
とそのコンテンツが削除されます(を使用しない場合-depth
、findは、正しく削除されたにもかかわらず、dirが存在しないというエラーを報告します)。
Gitからの参照の削除
temp/a
写真( asと考えてください)に見られるようにtemp/foo
、コマンドは実行され、すべてのコミットを書き換えますが、refs/
削除されないため、検索の出力がfilter-branch --index-filter
期待どおりに返されません。
同様のことが他の人にも役立つようです。
私は何が欠けていますか?
PS。はい、私はこれについて何時間も何百もの投稿や記事などを読んだことがありますが、とにかくうまくいきません。
git - Git リポジトリ履歴を書き換えた後、古いコミット履歴がまだ表示されている
Git リポジトリのコミット履歴全体のファイル テキスト ( to ) を置き換えるために、git を使用して多くの履歴を効率的に書き換え (rebase -i) ました。動作しますが、古いコミット履歴がまだ表示されています。Copyright <author>
Copyright <company>
以下のスクリーンショットでは、青いブランチの「新しい」履歴が、紫色のブランチの不要な「古い」履歴の後に続きます。「古い」履歴を取り除くにはどうすればよいですか? (なぜそれが 1 つの連続した履歴に「マージ」されないのか、私は圧倒されます!
git - Gitリポジトリが大きすぎます
約12MB相当のコードとアセットを含むプロジェクトがあります。Gitを使用して追跡してきましたが、.git
フォルダが1.83GBを少し超えていることに気付きました。これは、いくつかの小さなファイルと、フォルダーの約1.82GBを構成する1つのパックファイルで構成されています。
私は走りましgit gc --aggressive
たgit gc --prune
。同じサイズです。私はもう試した:
しかし、それでも同じサイズです。私はそれを複製しました(一度は強制的な再パックでローカルに、そしてもう一度Gitから)、しかしそれはまだそれぞれ1.83GBです。それは正常ですか?サイズを小さくする方法はありますか、それとも新しいリポジトリを開始してコードをコピーし、過去のコミットがなくなることを受け入れるだけですか?
git - .git ファイルが巨大なのはなぜですか?
非常に大きな (100MB 以上) PSD ファイルを誤って git ディレクトリに追加してコミットしてしまいました。これらのファイルがディレクトリにある間に、それらのファイルに一連の編集を加えましたが、そこにあるべきではないことに気づき、ディレクトリから削除しました。
次に実行しました:
私のディレクトリ内のファイルは、700MB 以上の .git ファイル自体を除いて、合計で 12 MB 未満になりました。
ここで何が起こっているのですか?削除された .PSD ファイルの古いバージョンは保持されていますか? それは、ファイルを削除することで得られたスペースを git がクリアしないということですか? .git ファイルのサイズを元に戻すことができるように、これらのファイルを完全に忘れさせるにはどうすればよいですか?
git - filter-branch を使用してすべての参照を含む不要なファイルを履歴から削除する
私は最近、いくつかのバイナリが含まれていた SVN リポジトリのクローンを作成しましたが、これらはもはや必要ありません。残念ながら、私はすでにバイナリを含めて Github にプッシュしています。「git filter-branch」を使用してこれらを削除したいのですが、タグとブランチに関してはいくつかの問題に直面しています。
基本的に、次のコマンドで特定されたファイルのリストを削除する簡単なシェル スクリプトを作成しました。
削除のスクリプトは次のようになります。
いくつかのタグ (すべて .git/packed-refs にリストされています) と 1 つの .git/refs/remotes/origin (Github リポジトリを指す) があります。上記のスクリプトを使用してファイルを削除しても、.git/packed からすべての参照を手動で削除するまでは、必要な効果が得られません (「du -cm」は同じサイズを出力したままです。「git rev-list」はファイルを一覧表示したままです)。 -refs および .git/refs/remotes/origin ディレクトリ。
当然のことながら、このアプローチでローカルの変更を Github に戻す可能性だけでなく、すべてのタグを失います。見逃したものはありますか、それとも履歴を破棄せずにすべてのブランチ/タグからファイルを削除する別の方法はありますか?
前もって感謝します、マティス
git - Git リポジトリを線形履歴に結合するにはどうすればよいですか?
1995 年から 1997 年と 1999 年から 2013 年の 2 つの製品開発期間からのコミットを含む2 つの git リポジトリR1
とがあります。R2
(既存の RCS および CVS リポジトリを Git に変換して作成しました。)
プロジェクトの線形履歴の正確なビューを含む単一のリポジトリに 2 つのリポジトリを結合するにはどうすればよいですか?
R1
と の間のR2
ファイルが追加、削除、および名前変更されていることに注意してください。
空のリポジトリを作成して、その内容をマージしてみました。
ただし、これにより、リビジョンD
ではなくリビジョンにあった最後のファイルが残りK
ます。合成コミットを作成して、マージ間の余分なファイルを削除することもできますが、これは私にはエレガントではないようです。さらに、このアプローチにより、最終結果には実際には発生しなかったマージが含まれます。
git - すべての git メッセージのコミットで特定の文字列を変更する方法は?
Github にプッシュされるすべてのメッセージで、特定の文字列を grep して変更したいと考えています。出来ますか?どのように?最後のメッセージバイを変更する方法は知ってgit commit --amend
いますが、すべてのコミットのすべてのメッセージを変更したいです。
git - git 履歴の書き換えを再開するにはどうすればよいですか?
を使用してかなり大きなレポの履歴を書き直していますgit filter-branch --tree-filter
が、数時間かかります。git が一時ディレクトリを使用して、進行中の中間作業を保存していることがわかります。中断された場合、書き換えを再開できるということですか?もしそうなら、どのように?
編集
私が行っている操作は、いくつかのディレクトリを移動することです。これらは現在サブディレクトリにありますが、ルートにある必要があります。
例えば
になる
もちろん、私のディレクトリ構造はそれよりもはるかに複雑ですが、それが私がやろうとしていることの要点です。
git - 最新バージョンのみを残して、git で 1 つのファイルの履歴を削除するにはどうすればよいですか?
いくつかのコミットで変更された git リポジトリに大きなバイナリ ファイルがあります。これらのコミットには、他のファイルへの変更も含まれていました。バイナリ ファイルの最新バージョンのみをリポジトリに保持したいのですが、これらのコミットで変更された他のファイルの履歴を保持したいと考えています。
問題のすべてのコミットは、すでに github にプッシュされており、チームの他のメンバーによってプルされています。
これどうやってするの?
編集:これは、参照されている他の質問と重複しているとは思いません。以下のコメントに記載されているように、私はその質問を見てきましたが、最新のものを除くすべてのバージョンのファイルを削除したいと考えています。この基準は、他の質問への回答では扱われていません。