2013-03-10 107 views
3

我试图在我的团队中执行一些编码风格。所以我写了一个git更新钩子,它检查所有被推送的文件。Git Update Hook:查找所有推送到新分支的文件

但是,它适用于远程存在的分支,但它不适用于新分支。

要获取现有分支上的文件列表,我使用git diff --name-status --diff-filter=AM oldrev newrev,其中oldrev和newrev是我作为参数获取的SHA1。

使用同一行新的分支失败,报告0 {40}是一个坏对象。经过一番浏览,我发现我可以使用这个:git diff-tree --root newrev。但是,该命令仅返回中最后一次提交的文件,而不是分支中的所有文件。

有没有办法让的所有名称全部分支中的文件被推送,如果它是一个新的分支?

+0

你在做什么?[git hook](https://www.kernel.org/pub/software/scm/git/docs/githooks.html)? – 2013-03-10 07:35:09

+0

@StuartM在远程服务器上的更新钩子 – Ibolit 2013-03-10 07:39:08

+0

因此,具体而言,您是否使用“更新后”钩子? – 2013-03-10 07:43:55

回答

0

你试过git rev-list --first-parent newrev?它似乎列出了newrev和该分支从哪里来的所有转速。例如,在此回购:

$ 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基础REF(我还没有找到一个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 
+0

这更贴近我的目标,但不完全是我所需要的。 Git rev-list --first-parent为您提供* first first * parent,即整个存储库的第一次提交。但我需要提交,从这个分支分支。我会试着研究rev-list的选项。谢谢。 – Ibolit 2013-03-10 08:34:40

+0

我发现“--simplify-by-decoration”,它只显示树中“有趣”的节点,其中第0个元素将成为你分支的点。但是,它显示了“origin/the_branch”分支中的点,它可能会在您的本地分支“the_branch”之后提交。我想知道,可能会有什么影响。再次感谢您的回复。 – Ibolit 2013-03-10 08:47:19

+0

是的,这给存储库中的第一次提交。对我来说,那是我(和OP)为之痴迷的数千次提交 – 2013-10-02 21:21:57