我写了一个脚本来重写一个 repo,就好像文件在一个子文件夹中一样。
这个有效:
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) 应该等同于 ([ ] && ...) 不是吗?有人可以解释为什么吗?