2013-03-10 53 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