bash - 格式化整个项目,保留git历史
问题描述
我正在尝试将糟糕的设计和技术债务的旧单体格式化为类似于可读的东西,以便将其自动化并在将来进行检查。这几天我一直在锤炼这个,并且已经阅读了这篇文章的内容,以及对它的第一个评论,很多次。这使我走上了正确的道路,并且该命令的略微修改版本甚至似乎可以工作!
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 倍文件的 doom 主存储库上运行。
结果,我一直试图在每次提交时只获取更改的文件,并格式化这些文件。以下命令的输出似乎应该可以正常工作,但是在小型 repo 上运行后,git filter-branch
似乎没有保存任何更改。我不确定这里到底出了什么问题。它似乎类似于this 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
我不确定到底哪里出了问题。据我了解,我传递到树过滤器的命令,被应用于每个提交,然后重写提交历史以包含该命令的效果。它的输出表明它正在访问文件,并且更漂亮的正在处理它们。不幸的是,在运行命令后,如果我对来自 repo 和未修改版本的 repo 的同一文件进行比较,它不会显示任何差异。
我认为问题出在我编写的要传递给filter-branch的 bash 命令上,但此时我还不能 100% 确定。任何帮助将不胜感激,如果有更多信息或我应该尝试的其他命令,请告诉我!谢谢。
解决方案
推荐阅读
- python-3.x - Python ElasticSearch 查询显示多重匹配的误报
- java - 带有有关 CGSEventRecord 消息的 Java 键侦听器错误
- php - MySQL DELETE 语句无法识别 PHP $id 变量中的 empid 数字
- shopware - 在 Shopware 5.4.6 中更改原色
- apache-camel - Camel IMAP 端点:“FailedToCreateRouteException ...无法解析端点:...由于:必须指定主机且不能为空”
- javascript - 以正确的顺序单击 div
- c# - Excel VSTO - 编辑过滤单元格 - 奇怪的行为
- spring - 为什么 AOP 在我的 Spring Boot 应用程序中不起作用?
- reactjs - 如何在 React-select 中更改focusedOption
- java - 尝试将字符串 S 转换为字符串 1,如果为真则返回 1,否则返回假