2010-12-15 98 views
1

我正在編寫腳本在當前目錄的每個子目錄中運行git status之類的東西,因此我可以快速獲取有關幾個git回購站的信息。但是,我想阻止任何修改回購的命令。我不想立即提交10次回購。我不能只使用git子命令的白名單,因爲我可能想運行git branch -a以查看每個回購中的分支,但不是git branch new-branch-name在每個回購中創建新分支。有沒有辦法在只讀模式下運行git?

所以有辦法運行git,這樣它會中止而不是對repo進行任何修改,但在運行只讀命令時工作正常嗎?

編輯:我想要做的是做一個git-subdirs命令,其工作是這樣的:當我輸入git subdirs COMMAND ARGS,我想要做一些像for dir in */; do cd $dir && git COMMAND ARGS && cd ..; done(只有額外的錯誤檢查)。除非如果git COMMAND ARGS會以任何方式修改回購協議,我不想這樣做,因爲我非常不可能對許多不同的回購協議進行相同的更改。

+0

你想防止抓取嗎?我可以看到,對於像這樣的腳本來說,這是一個非常常見的用例,您可能會認爲它並未修改回購,但它確實如此。 – Cascabel 2010-12-16 02:12:05

+0

那麼,我仍然可以實現白名單來獲取非破壞性修改的獲取或推送命令,但是如果基線實現不具備通過單一錯字輸入命令意外中斷10個回購的能力,那將會很不錯。 – 2010-12-16 05:33:30

+0

實際上,如果你使用'-f',push可能是破壞性的,所以它就像你的'git branch'例子。 – MatrixFrog 2010-12-16 07:27:31

回答

0

也許你確實可以使用白名單的命令。例如。而不是git-status使用git-diff-files和git-branch你可以使用git-show-ref或者git-for-each-ref。確保檢查低級(管道)命令。很有可能你會發現一個簡單的低級別命令來滿足你所有的腳本需求。

+0

有關管道命令的觀點是一個很好的觀點,但有時候也有一些瓷器的觀點。我認爲白名單可能會非常繁瑣的維護,但取決於用例,它可能值得一試。 – Cascabel 2010-12-15 23:12:34

1

爲什麼不拒絕對存儲庫目錄的寫入訪問?

$ chmod -R -w repo.git 
+2

這裏的問題是,回購通常應該是可寫的,而不是爲了這個腳本的目的。這個操作也很難反轉 - 版本庫的某些內容總是爲了安全而被寫保護,所以你不能'chmod -R + w'來撤銷它。 – Cascabel 2010-12-15 23:07:19

+0

謝謝你爲我評論。這正是這個解決方案的問題。 – 2010-12-16 01:11:19

+0

另一方面,我可以使用unionfs-fuse來對我的回購庫進行只讀視圖。 – 2010-12-16 17:26:53

4

這是一個小問題,但您可以簡單地運行腳本作爲對存儲庫沒有寫權限的用戶。爲了避免輸入密碼,您可以使用ssh密鑰對和ssh作爲該用戶的自己的機器。 (或者可以通過sudoers來配置它?)

與白名單不同,這是保證不會有任何意外漏洞或過分熱忱的限制。它不需要實際修改repo的權限,只需要用戶的權限即可。它不需要像git-daemon那樣的任何額外的設置。

(我想我應該注意,有沒有內置的「只讀」選項傳遞給飯桶。它只是試圖做的事情,如果有權限,做他們。)

+0

真的,一個-1?它可能不是理想的,但這*工作*。 – Cascabel 2010-12-16 02:09:12

+0

+1這是我在閱讀任何答案之前首先想到的,我認爲這是最簡單和風險最小的方式。保險絲解決方案很有趣,但看起來像矯枉過正。 – Kelvin 2012-07-26 15:34:22

相關問題