2013-07-06 24 views
11

在我們的項目中(託管在GitHub上),有人偶爾會偶爾強行推送主服務器。沒有人知道如果這樣做,我想知道是誰做的,以及它背後有什麼樣的錯誤配置工具或壞習慣。在github上查找強制推送的提交者

所以問題是,如何識別誰推動的用戶?當我拉我看到這樣的事情:

# git pull --prune 
(.....) 
+ 4c0d44c...138b9ed master  -> origin/master (forced update) 

138b9ed只是最新提交原產/主,任何人都可能會在力推後已承諾;甚至有可能的是,推動者自己沒有做任何事情,只是重新發明,所以他的名字甚至不在作爲作者的原作/主人歷史的改寫部分中。

我也試過git reflog origin/master,但它只是給出了同樣的信息:有一個記錄,指出git pull --prune (forced update)與提交ID 138b9ed,但仍然會爲最後的提交者到主人,而不是一個誰做的力推。在原始服務器上運行git reflog master可能會有幫助,但GitHub不會爲您提供這種訪問AFAIK。

是否有任何可靠的方法來找出誰推(誰)的起源?

回答

11

您可以將webhook添加到您的Github存儲庫,並讓它將推送通知提交給某個服務器或像requestb.in這樣的服務。

通知負載有一個pusher密鑰,該密鑰標識用於推送更新的Github用戶帳戶。這樣你應該能夠識別出「壞人」。

編輯:有效負載也有一個布爾值forced鍵,它告訴你如果偶是--force推或不。它是未顯示在Github的示例有效載荷[截至2013-07-06],但在this other example中可見。

編輯:這是唯一可能的,因爲Github是一個集成解決方案,可識別推送器並在webhook有效負載中提供該信息。使用純粹的Git服務器(例如僅使用SSH進行授權)或不同的Git服務解決方案(Gitolite,Gitlab等),這可能是不可能的。 Git本身沒有辦法識別推送的用戶(Git只保存提交和標記對象中的用戶信息),所以這個信息必須由連接的授權部分提供(這可以是SSH或HTTPS或類似的;它也可能完全丟失,例如在本地推送到同一文件系統上的回購時)。

+0

所以基本上我會檢查'before'是否是[post-receive webhook](https://help.github.com/articles/post-receive-hooks)有效載荷中的'after'的祖先,如果不是,這是一種推動力? – Tgr

+0

是(+1),...或者是答案,或者使用測謊器;)如http://stackoverflow.com/a/15030429/6309中所述。 – VonC

+0

@Tgr,有效負載有一個'強制'鍵,告訴你是否強制推送;) –