2011-04-22 125 views
6

版本控制很重要的一件事是知道誰做了什麼改變。如果事情發生了變化,我不知道爲什麼要做出改變,我會查看歷史並詢問進行改變的人。在我探索git的時候,有一件事讓我對這個功能感到有點緊張,那就是仿冒很容易。什麼阻止我把同事的名字/電子郵件放入git全局配置文件中的user.name和user.email?當使用gitosis/gitolite(它定義了用戶)或github(我假設使用gitosis/gitolite)之類的東西時,是否有任何懷疑是否真正做出了承諾?Git日誌歷史

+6

當你不能相信你的同事時,真的很難過...... – 2011-04-22 13:13:02

+0

我不是說我會認爲我的同事會不會有人不幸有人不會誠實(即使是你認爲的) – ryanzec 2011-04-22 13:21:36

回答

0

您可以讓每個人都與GPG簽署提交:see this tutorial

在教程中,GPG口令在git config中設置,這對我來說似乎是無稽之談,因此您希望在每次提交時都讓鉤子提示用戶。

當然,如果你不是經理,建議每個人都簽署他們的承諾可能是外交上的艱難,所以要謹慎。

編輯:正如布萊恩指出,這隻簽署提交消息,所以它不是很好的解決方案。我保留答案,因爲它可能仍然有助於理解問題。

+4

你鏈接到的帖子完全是簽名提交的錯誤方式。它只簽署提交消息,而不是提交本身,這意味着任何想冒充別人的人都必須重用他們的提交消息。另外,正如你指出的那樣,它建議保持密碼清晰。簽名提交通常比它的價值更加痛苦,特別是一旦你開始處理重新分配,從電子郵件應用補丁等問題。 – 2011-04-22 13:49:02

+0

@BrianCampbell:同意,將編輯我的答案。 – CharlesB 2011-04-22 13:56:26

5

Gitolite記錄(在.gitolite/logs/gitolite-*)Gitolite用戶每次推送。確定引入特定提交的推送還有一些工作,但它應該是直接的(單向:在每次推送的末端放置輕量級標籤,然後使用git name-rev查找提交後的第一個標籤) 。

大多數Gitolite用戶可能只有一個與其關聯的SSH密鑰(keydir/user.pub),但單用戶可能擁有多個SSH密鑰(keydir/[email protected]*.pub)。

因此,對於基於SSH的Gitolite,您可以將每個提交映射到一個(或多個)SSH密鑰。

您是否信任SSH密鑰以準確識別某個人是另一個問題(即您是否信任用戶保留其私人SSH密鑰的安全?)。

Gitolite還可以通過「智能HTTP」緩解Git訪問。在這種情況下,Web服務器在REMOTE_USER環境變量中提供Gitolite用戶名(即不使用.ssh/authorized_keys文件來基於SSH密鑰標識用戶)。身份驗證和身份驗證完全取決於Web服務器本身(通常只是一個用戶名和密碼,但每個用戶的SSL證書可以用來執行更多類似於基於SSH的訪問)。

因此,對於基於HTTP的Gitolite,您可以將每個提交映射到由Web服務器完成的身份驗證。


GitHub上有一些類似的信息,並且可以通過GitHub APIEvents部分查詢(以前它只似乎可作爲「新聞源」項目的一部分,你看着庫)。每個PushEvent標識執行推送的GitHub用戶,ref(分支)的名稱已更新,新參考「head」(更新分支的新提示)的名稱(SHA1哈希)以及提交列表。

+0

謝謝克里斯,這幫助我和我的系統管理員。 – Nic 2011-06-15 21:52:40

1

這不是道德或哲學論壇,afaik; 但是

git允許簽名提交和簽名標記。這應該會幫助你養成你的偏執狂:)