格式化整个项目,保留git历史记录

时间:2018-08-10 16:09:06

标签: bash git formatting git-rewrite-history

我正在尝试将一堆旧的不良设计和技术债务整合成易于读取的内容,以使其自动化并在将来进行检查。我已经为此努力了几天,并且已经多次阅读了article的内容以及对此的第一条评论。这使我走上了正确的道路,并且对该命令进行了稍微修改的版本似乎也可以正常工作!

git filter-branch --tree-filter 'prettier --no-config --ignore-path /Users/samuraiseoul/.prettierignore --single-quote --use-tabs --print-width=90 --write "**/*.{js,php,scss,ts,md,css}" || echo “Error formatting, possibly invalid code“' -- --all

问题在于,尽管它可以在较小的测试仓库中进行约500次提交,但要在拥有30,000+次提交和100倍文件的毁灭主仓库上运行,则需要花费数周的时间。

因此,我一直试图每次提交仅获取更改的文件,并对它们进行格式化。以下命令的输出似乎应该可以正常工作,但是在小型存储库上运行后,似乎git filter-branch中的所有更改都没有保存。我不确定这里到底出了什么问题。似乎与此SO post中的解决方案相似,但无效。

git filter-branch --tree-filter 'git show $GIT_COMMIT --pretty="" --name-only --diff-filter=AM | grep -e "\.scss$" -e "\.php$" -e "\.css$" -e "\.js$" -e "\.ts$" -e "\.md$" -e "\.yml$" | tr " " "\ " | tr "\n" " " | xargs -t find 2> /dev/null | tr " " "\ " | tr "\n" " " | xargs -t prettier --no-config --single-quote --use-tabs --print-width=90 --write || echo “Error formatting, invalid syntax' -- --all

我不确定问题出在哪里。据我了解,我将传递给树过滤器的命令应用于每个提交,然后重写提交历史以包括该命令的效果。它的输出表明它正在命中文件,并且漂亮的文件正在处理。不幸的是,运行命令后,如果我对存储库中的相同文件和存储库的未修改版本进行了比较,则显示没有差异。

我认为问题出在我写给b filter-branch的bash命令上,但是我现在还不确定100%。任何帮助将不胜感激,如果有更多信息或我应该尝试的其他命令,请告诉我!谢谢。

0 个答案:

没有答案