git filter-branch只获取更改的文件?

时间:2015-12-13 23:49:09

标签: git phpcs

我们希望在重新格式化PHP文件的大型代码库上运行git filter-branch。由于我们有超过21k次提交phpcbf希望每次提交filter-branch时格式化整个代码库。是否有可能只为每个提交获取已更改的文件并具体格式化它们?有点像...

git filter-branch --tree-filter \
 'FILES=$(<something> | grep .php) php /usr/local/bin/phpcbf.phar $FILES || true'

1 个答案:

答案 0 :(得分:1)

我找到了解决方案:

git filter-branch --tree-filter 'phpcbf $(\
  git show $GIT_COMMIT --name-status | egrep ^[AM] |\
    grep .php | cut -f2)' -- --all

只是为了快速概述它正在做什么:

  • git show $GIT_COMMIT --name-status将返回该提交的所有已修改文件。
  • egrep ^[AM]将雕像过滤为仅添加和修改。无需尝试格式化正在删除的文件。
  • grep .php仅格式化PHP文件。
  • cut -f2从列表中删除状态前缀,因此我们只获取原始文件路径。

有关详细信息,请参阅我的博文:https://elliot.land/post/reformatting-your-codebase-with-git-filter-branch