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 を指定した後でも、これを達成する方法を見つけることができませんでした。誰かが私を助けてくれますか?.
スクリプトの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>/
の使用と同等
path-based filters の一部として、これはパス名変更のように見えます:
cd $REPO_DIR_TMP
git filter-repo --path-rename /:${REPO_NAME}_tmp/
これにより、サブフォルダー内の2番目のリポジトリの履歴が書き換えられます(2番目のリポジトリ内)
次に、gitstのように、それを最初のリポジトリのリモートとして追加し、フェッチしてマージします。