我正在尝试在我的团队中强制执行一些编码风格。所以我写了一个git update hook,它检查所有被推送的文件。
但是,它适用于遥控器上现有的分支,但它对新分支无法正常工作。
要获取现有分支上的文件列表,我使用git diff --name-status --diff-filter=AM oldrev newrev
,其中oldrev和newrev是我获取的SHA1作为参数。
对 new 分支使用相同的行失败,报告0 {40}是一个坏对象。经过一番浏览,我发现我可以使用它:git diff-tree --root newrev
。但是,此命令仅返回最后一次提交的文件中的文件,而不返回分支中的所有文件。
如果它是一个新的分支,是否有办法让分支中的文件的所有全部被推送?
答案 0 :(得分:0)
你试过git rev-list --first-parent newrev
吗?它似乎列出了newrev
和分支来自的ref之间的所有转速。例如,在这个回购中:
$ git log --all --graph --decorate
* commit 03f6357bdcacfc8c8253ccb140f25010810c4433 (HEAD, origin/new_branch, new_branch)
| Fifth
* commit 291d88908fefa94eab0c9483ad6b8ab5ebca21f6
| Third
* commit 3ff20b8998d037cd9c9bb1ff53b1887837d9ed8e
| Second
| * commit e9c2e99de892499d2b6037c8c0913a52dbade4c0 (origin/master, master)
|/ Fourth
* commit 9574226673ffe2d04ae4e36b4d7976399320e29f
First
rev-list
提供以下内容:
$ git rev-list --first-parent 03f6357bdcacfc8c8253ccb140f25010810c4433
03f6357bdcacfc8c8253ccb140f25010810c4433
291d88908fefa94eab0c9483ad6b8ab5ebca21f6
3ff20b8998d037cd9c9bb1ff53b1887837d9ed8e
9574226673ffe2d04ae4e36b4d7976399320e29f
您可以使用tail -1
限制基础参考(我还没有找到更优雅的CLI选项):
$ git rev-list --first-parent 03f6357bdcacfc8c8253ccb140f25010810c4433 | tail -1
9574226673ffe2d04ae4e36b4d7976399320e29f
从那里,您可以使用原始的git diff
命令:
$ origrev=`git rev-list --first-parent 03f6357bdcacfc8c8253ccb140f25010810c4433 | tail -1`
$ git diff --name-status --diff-filter=AM $origrev 03f6357bdcacfc8c8253ccb140f25010810c4433
A bar