2012-07-10 73 views
3

有沒有工具,這使得拉請求和組合評論防呆和安全的混帳?這個基於評論的Git工作流可以被Gerrit強制執行嗎?

我知道有幾個相關的問題已經在github上提出過了(參見:Using git for Code Reviews,Online Code Review Tool with Git Integration)。

人們一直在暗示使用gerritgist

在前面的問題中提出的解決方案具有很好的接口,但是在訪問控制方面它們會失敗。我們公司太小,不能強迫一個人審查代碼或有專門的維護人員。因此,我們正在尋找一種工具來確保(或至少鼓勵)代碼在被推送到我們的中央存儲庫之前進行審查。

注意事項:絕對用戶訪問控制不是必需的,因爲我們通常信任我們的員工。但是,我們希望禁止直接推送到我們的中央存儲庫,而不會限制推送給單個人的權限。

這樣的工具(或工具和腳本的組合)應至少實現這些任務:在web界面上顯示

  • 化妝引入請求。 (gerrit達到這一點)
  • 中央存儲庫鏈接到該工具,以便只讀訪問是可能的,但推送至少需要另一個人來檢查和確認更改集。
  • 負責審查和確認的人員可以是開發團隊中的任意人員。
  • 該工具必須自動檢測(並拒絕)導致合併衝突的請求。
  • 它不應該使用已知可以改變提交的SHA1哈希的git函數。

我提出這個解決方案:

  • 使用格里特的拉請求和審查處理。
  • gerrit應該始終擁有主人的克隆。
  • 對於每個請求,gerrit檢查這些補丁是否適用於沒有衝突的主機(這將是一個腳本鉤子,我不知道gerrit是否具有這些特性)。
  • 中央存儲庫由具有shell訪問權的特權用戶(此處名爲gerrit)擁有,並通過http公開。
  • 每當其他人查看代碼時,Web界面中都會有一個應用按鈕,它會自動將更改推送到中央存儲庫。

不幸的是,我不知道gerrit和文檔是稀缺的。有沒有可能在gerrit中實現這個工作流程?是否有另一種工具可以滿足這些要求?

+0

你的購物清單應該用gerrit覆蓋。安裝並使用它,它並不瘋狂。 – 2012-07-10 20:01:50

+0

我只是建議讓jenkins標誌在gerrit中構建爲'看起來不錯',這樣您就可以確保它編譯/通過測試/無論您的構建指標如何。 – 2012-07-10 20:02:36

+0

@honk:啊謝謝你!到目前爲止,我並沒有考慮持續整合。 – Alex 2012-07-10 20:04:06

回答

1

嚴格地說,您不需要讓gerrit將更改推送到另一個託管存儲庫(儘管它具有允許推送的內置掛鉤),因爲Gerrit可以充當存儲庫主機。

可以限制Gerrit只應用快進的補丁,拒絕那些需要合併的補丁。如果你的項目中不僅僅是少數人,這可能會讓你放慢腳步:越多人承諾,補丁越有可能在被接受之前必須重新組裝。

應用補丁不是一個單擊操作:審查補丁後,審閱者必須首先選擇一個分數(範圍從-2到+2),使用+2啓用「立即應用」按鈕。如果您沒有CI系統驗證補丁,他們可能還需要表明他們已驗證源代碼作品。如果你有有一個CI機器人,並且它在審閱者查看代碼時沒有完成,他們可以留下他們的反饋,任何人(受權限)都可以在CI機器人完成時觸發合併。

對任意團隊成員的要求是可以滿足的,除非您的意思是「任意團隊成員不是提交變更的成員」。我懷疑這就是你真正想要的,但你可以追溯到警察局。

+0

我自己也得出了和你一樣的結論。似乎認爲git的java實現仍然有一些微妙的錯誤。所以我們目前正在考慮規避gerrit的託管設施,儘管它們在將來可能會變得有用。此外,推動是用gerrit以一種非常規的方式完成的,所以我們不確定我們是否希望使用gerrit與不太有信心使用git的人。 – Alex 2012-07-20 18:29:00

+0

您是否知道如何使用gerrit與外部存儲庫? – Alex 2012-07-20 19:28:12

1

我認爲Gerrit會滿足大部分/所有您的需求。您可以集成可與Gerrit交互的Jenkins等CI工具,並根據需要添加其他功能。

要記住的一件事 - 修補程序可能能夠在發出拉請求時乾淨地合併,但它稍後仍可能會合並衝突。如果開發者A提出了可以完全合併的請求1,那麼開發者B發出請求2-9,這些請求也可以全部合併,如果2-9被首先審查和提交,那麼請求1可能不會乾淨地合併。

Gerrit有能力嘗試和檢測到這種情況,並在修補程序需要重新配置時提醒用戶。

+0

關於合併衝突,也有在格里特進行瑣碎的衝突的3路合併有用的設置,可參見[--use內容合併](http://gerrit-documentation.googlecode.com/svn/Documentation/2.3/cmd-create-project.html#_options)。 – 2012-07-19 15:30:29

0

我誠摯推薦Critic,這是一個在Opera Software開發和使用的Git審查系統。 W3C也將其用於reviewing tests


make pull requests visible in a web interface. (gerrit achieves that)

評論家做到這一點。它完全與Git集成。您只需將批評者設置爲Git-remote,然後推送至r/your-branch,它會創建一個評論,並將所有匹配的評論者發送給這些文件。

the central repository is linked to that tool, such that read-only access is possible, but pushing requires at least another person to review and acknowledge the changeset.

批評家的確有自己的倉庫。它有幾個鉤子來做不同的事情,但對於你的用例,你可能會自己寫一些。

the person responsible for review and acknowledgement can be an arbitrary person from the development team.

這個就可以了。或者實際上,您(作爲評論者)爲您想要查看的內容提供了一個評論過濾器。還有'看'過濾器。在小回購中,我只是在/(所有)上做一個過濾器。在我有更大的項目上,例如/desktop/linux/和例如一個與.*.py

the tool must autonomously detect (and refuse) pull requests that lead to merge conflicts. it shouldn't use git functions that are known to alter the SHA1 hash of the commit(s).

這是更好的,它都可以做。我們使用它的方式是重新分配。你可以自己做,它會弄清楚你改變了什麼。如果你改變了一些東西並進行了重新組合,它會讓你相當生氣,但是會顯示在三方評論中發生的所有變化。

我們有一個擴展,大部分用戶已經安裝了,FiddleAndTweak,它允許您直接在評論界面做簡單的修正,以及交互式你衍合推前。

我們有自己的commitqueue這評論家連接到使用簡單的擴展。這允許您在審覈被接受後,通過點擊一下鼠標排列您的更改。它不會讓你推不乾淨的分支。它是在合併之前進行實際編譯和測試的承諾本身;但是您可以允許它合併或重定義您的更改。可悲的是,我們的承諾非常具體,並且不像Critic那樣公開。雖然審查制度肯定是較難的部分。

因此,與批評家,你需要寫之外的一些小的腳本,以做到「一鍵式回購」。但是對於一些更簡單的項目,編寫一個小擴展很容易,只需在「集成」按鈕被按下時將接受的代碼合併到主控中。

相關問題