1

私は git の初心者で、主にソース ツリーなどの GUI ツールに依存しているので、ご容赦ください。

私たちの git リポジトリには、非常によく似たコア コードベースに依存する複数の製品があります。これは、製品ごとにブランチを持つことで実現します。最初に開発を開始したとき、これをワークフローとして確立していなかったので、ブランチの履歴は次のようになります。

 master
   |
B  |  C
 \ | /
  \|/
   |
   |  A
   | /
   |/
   2
   |
   |
   1
   |
   |

A、B、および C は製品固有のブランチであり、A はクライアントにとって最初の製品です。

問題

残念ながら、(1) の時点ですでに A に取り組んでおり、大量の .png ファイル (約 100MB 相当) をコミットし始めていましたが、別のプロジェクトとして分岐することはまだ考えていませんでした。これらの大きなファイルを B と C (および master ブランチ) のリポジトリから削除しようとしましたが、もちろん、ポイント (1) と (2) の間の git commit 履歴に残っています。

それで、ブランチ A が実際にポイント 1 から始まり、その製品に固有のすべてのファイルをそのブランチに移動するように、履歴を書き直す方法はありますか? ありがたいことに、製品 A に関連するファイルはほとんどが別のディレクトリにあるため、フィルタで簡単に除外できます。

マスター ブランチは主にコードで構成されているため、理論的には最大 10 MB で済みます。つまり、ユーザーは特定の製品ブランチのみをチェックアウトし、実際に必要なファイルのみを github からダウンロードできます。

ありがとう!

編集: 注、これは同様の質問です: git: Split history of some files into a separate branch

4

2 に答える 2

1

以下はトリックを行う必要があります:

git checkout A
git rebase 2 --onto 1
于 2012-09-02T18:10:50.903 に答える
1

まずはバックアップ!

次に、これを行います。

git filter-branch -f --prune-empty --tree-filter 'rm -rf PATH/TO/FILE-OR-FOLDER' HEAD

その後

git gc --aggressive

http://www.simplicidade.org/notes/archives/2009/04/merging_two_unr.html経由

于 2013-07-24T13:34:10.707 に答える