8

git リポジトリのディレクトリから新しいリポジトリを作成できることを知っています。ここを参照してください: https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/

ただし、ディレクトリの履歴を保持しながら、あるリポジトリから別の完全に異なるリポジトリの新しいディレクトリにディレクトリをコピーするにはどうすればよいですか?

更新: その履歴が git log で表示される可能性はありますか?

4

1 に答える 1

8

でこれを行うことができますgit filter-branch。基本的に、次のことを行います。

  1. 既に見つけたリンクを使用して、最初のプロジェクトのサブパスを新しいリポジトリに分割します。
  2. 一意のブランチの 2 番目のプロジェクトのリモートにプッシュします。
  3. そのブランチを 2 番目のリポジトリに取得し、それを使用git filter-branchして正しいサブディレクトリにインデックス フィルター処理します。

    git filter-branch --index-filter '
        git ls-files -sz | 
        perl -0pe "s{\t}{\tnewsubdir/}" |
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
            git update-index --clear -z --index-info &&
            mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
    ' HEAD
    
  4. 最後にmaster、2 番目のプロジェクトのブランチ (または使用しているブランチ) をチェックアウトし、新しくフィルター処理されたブランチにマージします。

本当にひどい手術ではありません。AlexanderGladysh がコメントで指摘しているように、ステップ 3 と 4 の代わりにサブツリー マージ戦略を使用することもできます。

于 2012-09-08T01:36:30.730 に答える