3

私はこのような状況にあります。

git filter-branch でフォルダーを分割できるように、リポジトリを 2 つの src フォルダーにリファクタリングしていました。

src の代わりに AAA と BBB フォルダを作成しました

問題は、サブディレクトリをデタッチ (移動) して別の Git リポジトリに移動した後、履歴のないデタッチされた git コミットを取得することです。

0 | 0 <--- ここで改行 0 | 0 | 0 | 0 ...

私はこれも試しました gitリポジトリを分割してディレクトリの名前を変更する方法?

BBB と AAA を Name1 と Name2 に入れてもうまくいきませんでした..

これに関する任意のヘルプ、私はそれができることを知っています:)

4

2 に答える 2

0

既存のディレクトリのリファクタリングにコマンド「git mv」を使用しましたか? あるディレクトリから別のディレクトリにファイルをどのようにコピーしましたか?

于 2013-07-23T12:21:33.533 に答える
0

問題

私の理解が正しければ、あなたの git 履歴にはsrcAAABBBの 3 つのフォルダーがあります。基本的に穴の歴史については、srcしかありませんでした。最終的に、ファイルをsrcからAAABBBに分けてsrcを削除し、他の 2 つを作成する1 つのコミットを作成しました。

回路図の履歴ビュー (gitk のように、各行がコミットで、最新/最新のコミットが一番上にあります):

AAA, BBB
src
src
src
src
.
.
.

を使用すると、フォルダーAAAgit filter-branch --prune-empty -subdirectory-filter AAA内にない履歴内のすべてのコミットからすべてが削除されます(その後、AAAが新しいルート ディレクトリになります)。フォルダーAAAは、履歴の単一のコミットにのみ存在するため、この単一のコミットのみが残ります。

解決

これを解決するには複数の方法がありますが、最も一般的で、おそらくより複雑な状況に最も適していると思われる方法のみを説明します。

全履歴を書き換えて AAA サブレポを作成する方法
  1. レポをローカルにクローンし、クローンでのみ動作します
  2. ファイルを手動でAAABBBに分割した最後のコミットを削除します。
  3. AAAの一部であってはならないすべてのファイルを削除する (シェル) スクリプトを作成します。たとえば、次を使用します。

    git rm --cached --ignore-unmatch "${fileName}"
    
  4. このスクリプトを使用して、履歴内のすべてのコマンドを次のように書き換えます。

    git filter-branch --prune-empty --index-filter "myCleanupScript.sh" HEAD
    

    (注: この最後のステップには時間がかかる可能性があります!)

于 2015-06-12T06:06:16.647 に答える