シンプルなgitコマンドを使用した手動ステップ
計画は、個々のディレクトリを独自のリポジトリに分割してから、それらをマージすることです。次の手動の手順では、オタクを使用するスクリプトを使用せず、理解しやすいコマンドを使用し、余分なN個のサブフォルダーを別の単一リポジトリーにマージするのに役立ちました。
割る
元のリポジトリが次のとおりだとします:original_repo
1-アプリを分割:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2-分割ライブラリ
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
2つ以上のフォルダがある場合は続行します。これで、2つの新しい一時的なgitリポジトリが作成されます。
アプリとライブラリをマージして征服する
3-新しいリポジトリを準備します。
mkdir my-desired-repo
cd my-desired-repo
git init
そして、少なくとも1つのコミットを行う必要があります。次の3行をスキップする必要がある場合、最初のリポはリポのルートのすぐ下に表示されます。
touch a_file_and_make_a_commit # see user's feedback
git add a_file_and_make_a_commit
git commit -am "at least one commit is needed for it to work"
一時ファイルがコミットmerge
されると、後のセクションのコマンドは期待どおりに停止します。
ユーザーのフィードバックから、のようなランダムファイルを追加する代わりに、などa_file_and_make_a_commit
を追加することを選択できます。.gitignore
README.md
4-最初にアプリリポジトリをマージします。
git remote add apps-repo ../apps-repo
git fetch apps-repo
git merge -s ours --no-commit apps-repo/master # see below note.
git read-tree --prefix=apps -u apps-repo/master
git commit -m "import apps"
これで、新しいリポジトリー内にappsディレクトリーが表示されます。git log
関連するすべての履歴コミットメッセージを表示する必要があります。
注:クリスはコメントで以下のように、gitの新しいバージョン(> = 2.9)のためには、次のように指定する必要が--allow-unrelated-histories
でgit merge
5-次にlibs repoを同じ方法でマージします。
git remote add libs-repo ../libs-repo
git fetch libs-repo
git merge -s ours --no-commit libs-repo/master # see above note.
git read-tree --prefix=libs -u libs-repo/master
git commit -m "import libs"
マージするリポジトリが3つ以上ある場合は続行します。
リファレンス:gitを使用して別のリポジトリのサブディレクトリをマージする