6

こんにちは、履歴の書き換えに成功し、使用して抽出したい 5 つのフォルダーを取得し、git filter-branch -f --prune-empty --tree-filter 'rm -rf <all unwanted dirs>'すべての git 履歴を保持しました。

残っている唯一の問題はサブモジュールです。まだコミットを行っています

Subproject commit <hash>

これらのサブモジュールのコミットをすべて git 履歴から完全に削除したいのですが、どうすればこれを達成できますか?

4

2 に答える 2

2

私はそれをやった

git filter-branch -f --prune-empty --tree-filter '
    git submodule deinit -f .
    git rm -rf lib && rm -rf lib
    find . -name .gitmodules -delete' HEAD

libすべてのサブモジュールがディレクトリにあると仮定します

于 2016-05-17T18:14:19.047 に答える
0

他の解決策は私にはうまくいきませんでした。サブモジュールを削除する方法に関する上位の回答に続いて、次のコマンドを使用しました。これは、複数のフォルダーでサブモジュールを指定できるため、より柔軟です。

git filter-branch -f --prune-empty --tree-filter '
    for SUBMODULE_DIR in submodule-dir-1 lib/submodule-dir-2 lib/submodule-dir-3
    do
        if [ -d $SUBMODULE_DIR ]; then
            git submodule deinit -f $SUBMODULE_DIR
            git rm -rf .git/modules/$SUBMODULE_DIR
            git rm -f $SUBMODULE_DIR
        fi
    done
    git rm -f --ignore-unmatch .gitmodules' HEAD

事実上、各コミットのサブモジュール フォルダーのリストをチェックしています。サブモジュール フォルダーが存在する場合は、サブモジュールを完全に削除します。技術的にはそれだけで十分ですが、ファイルを削除したい場合もあり.gitmodulesます。特定のサブモジュールのみを削除したい場合は、その行に追加の作業が必要になる場合があります。

于 2020-07-08T12:39:17.977 に答える