ファイルがサブフォルダーにあるかのようにリポジトリを書き換えるスクリプトを作成しました。
これはうまくいきました:
git filter-branch --tree-filter 'd="subfolder"; [ ! -f "$d" ] && mkdir -p "$d" && for file in *; do if [ "$file" != "$d" ]; then mv "$file" "$d"; fi; done' -- test
これはエラーを返しましたが、Rewrite a92e7d6bd57d523fdffa227bffdc76d7b9eb7c7a (1/5)tree filter failed
git filter-branch --tree-filter 'd="subfolder"; [ ! -f "$d" ] && mkdir -p "$d" && for file in *; do [ "$file" != "$d" ] && mv "$file" "$d"; done' -- test
リビジョン a92e7d6bd57d523fdffa227bffdc76d7b9eb7c7a でさらにテストを行ったところ、期待どおりに動作しました。
d="subfolder"; [ ! -f "$d" ] && mkdir -p "$d" && for file in *; do [ "$file" != "$d" ] && mv "$file" "$d"; done
私は混乱しています: (if [ ]; then ...; fi) は ([ ] && ...) と同等でなければなりませんね? 誰かが理由を説明できますか?