我有一些通過SSH遠程訪問的git倉庫,我想讓它們中的一些只讀以防止更多的推送。有些人有遙控器指向這些存儲庫。如何使git存儲庫只讀?
這些裸存儲庫初始化爲--shared=group
,因此將所有文件的文件權限設置爲660,足以保證允許SSH訪問,但不允許寫入?還是有更簡單的方法?
乾杯。
我有一些通過SSH遠程訪問的git倉庫,我想讓它們中的一些只讀以防止更多的推送。有些人有遙控器指向這些存儲庫。如何使git存儲庫只讀?
這些裸存儲庫初始化爲--shared=group
,因此將所有文件的文件權限設置爲660,足以保證允許SSH訪問,但不允許寫入?還是有更簡單的方法?
乾杯。
有多種可能的方式來做到這一點。
如果您的用戶都有一個shell賬號(也許是有限的),他們每個人通過自己的帳戶訪問git代碼庫,你可以使用文件系統權限控制到Git倉庫SSH訪問。在Unix上,這些將在目錄上寫入權限,可能在創建組的組和特定權限的幫助下(使用「粘性組ID」設置)。
推進需要git-receive-pack
將在用戶的$ PATH,並執行他們...雖然我不知道這種方法是如何可行的是。
您可以使用update
或pre-receive
鉤做訪問控制庫,例如在git的來源使用update-paranoid例如鉤從contrib/hooks
。
有了更大的用戶數,你可以與使用工具來管理訪問的git倉庫,像Gitosis(Python中,需要setuptools的)或Gitolite(Perl中)更好。
對於只讀訪問可以設置git daemon提供只讀經由SSH協議通過git://
協議匿名(和未)訪問,而不是訪問。
對於一種方式,以減輕從SSH到GIT協議過渡url.<base>.insteadOf
配置變量見文檔。
參見第4章 「Git on the Server」 Pro Git書由斯科特·查孔(CC-BY-NC-SA許可)。
因爲git主要依賴文件系統進行訪問控制,所以這將起作用。請注意,在您的權限中,世界無權訪問該文件,但用戶和組具有讀/寫訪問權限。如果你想世界可讀,你的權限應該是0444
。
您可以通過將回購權限設置爲0664
(其中用戶爲nobody
且該組類似於gitdevs
)來做更進一步的細粒度控制。然後,只有gitdevs
組中的人才能夠寫回購,但世界可以從中讀取。
後續Here is a link,涵蓋各種方式來分享你的回購和封面來親的&利弊和訪問控制功能。
另一種可能性是git協議,但它需要git守護進程運行。
如果您還需要訪問控制,請查看gitosis。很容易設置,你可以使用一個簡單的腳本來控制誰可以做什麼。
或gitolite:http://github.com/sitaramc/gitolite – 2009-11-02 19:48:21
一個pre-receive
掛鉤,簡單的打印通知消息,退出與非0狀態做這項工作。
假設你把一些有意義的信息,在你的消息,這也減少了從失望的用戶,詢問他們爲什麼不能把查詢:
#!/bin/bash
echo "=================================================="
echo "This repository is no longer available for pushes."
echo "Please visit blah blah yadda yadda ...."
echo "=================================================="
exit 1
最近我用限制訪問路徑「/回購。 git/git-receive-pack「來存檔結果,該存儲庫對於某些用戶來說是可讀寫的,而對於其他用戶則是隻讀的。在httpd配置中,它看起來像這樣:
<Location /repo.git/>
Require group developers developers-ro
</Location>
<Location /repo.git/git-receive-pack>
Require group developers
</Location>
應該注意,對於文件系統權限,您可以使用chmod,正如Pat Notz所建議的那樣。 – 2009-11-04 16:13:23
感謝您的想法(每個人)。受到更新偏執狂示例鉤子的啓發,我現在在我的回購站中有一個鉤子,它簡單地「echo」關閉所有按鈕「;退出1' – 2009-11-12 21:30:03
@SteveFolly如果你的評論是一個答案,我會投它而不是接受的答案。你的論文短小,重點突出,有效。 – 2015-04-28 06:56:04