web-dev-qa-db-ja.com

git-filter-repoを使用して1つのリポジトリをサブディレクトリとして別のリポジトリにマージする方法

git filter-branchを使用して、これを使用してリポジトリをマージしようとすると、 Gist になります。問題の関連スニペットのみを追加します。

git filter-branch -f --Prune-empty --tree-filter '
        mkdir -p "${REPO_NAME}_tmp"
        git ls-tree --name-only $GIT_COMMIT | xargs -I{} mv {} "${REPO_NAME}_tmp"
        mv "${REPO_NAME}_tmp" "$REPO_NAME"
    '

Gitから次のような警告が表示されました。

WARNING: git-filter-branch has a glut of gotchas generating mangled history
     rewrites.  Hit Ctrl-C before proceeding to abort, then use an
     alternative filtering tool such as 'git filter-repo'
     (https://github.com/newren/git-filter-repo/) instead.  See the
     filter-branch manual page for more details; to squelch this warning,
     set FILTER_BRANCH_SQUELCH_WARNING=1.

だから、私はgit filter-repoを見て、 説明 は次のように述べています:

ファイルレイアウトの再構築(すべてのファイルを別のリポジトリとマージする準備としてサブディレクトリに移動するなど).

これは、この問題はgit filter-repoで解決できることを示しましたが、ドキュメントを確認して examples を指定した後でも、これを達成する方法を見つけることができませんでした。誰かが私を助けてくれますか?.

5
Aaghaaz

スクリプトのfilter-branchコマンドを置き換えます

git filter-branch -f --Prune-empty --tree-filter '
        mkdir -p "${REPO_NAME}_tmp"
        git ls-tree --name-only $GIT_COMMIT | xargs -I{} mv {} "${REPO_NAME}_tmp"
        mv "${REPO_NAME}_tmp" "$REPO_NAME"
    '

これとともに

git filter-repo --to-subdirectory-filter "$REPO_NAME"

パスのショートカットセクションを参照してください ここ

--to-subdirectory-filter <directory>

プロジェクトルートを代わりに<directory>の下に置く

--path-rename :<directory>/の使用と同等

1

path-based filters の一部として、これはパス名変更のように見えます:

cd  $REPO_DIR_TMP
git filter-repo  --path-rename /:${REPO_NAME}_tmp/

これにより、サブフォルダー内の2番目のリポジトリの履歴が書き換えられます(2番目のリポジトリ内)

次に、gitstのように、それを最初のリポジトリのリモートとして追加し、フェッチしてマージします。

1
VonC