2010-09-07 57 views
5

我將一個盒子用作共享回購,並且我的團隊通過ssh連接到它。通過ssh共享git repo的正確方法

我做的是:

  1. 中央機器git init

  2. 從每個工作站創建一個空的Git倉庫然後做一些像git clone ssh://[email protected]/Users/user/Projects/my-project/.git/

這工作不錯,但每次我推這樣的東西時,git總是大吼大叫:

alt text

有超過SSH共享回購一種更好的方式。

重要提示:我很清楚gitosis和這樣的工具的存在,我不想要任何幻想。只是通過ssh共享.git回購。

感謝

回答

8

在主機上,你應該做

git init --bare 

因爲你並不需要實際的文件,只需回購。

如果警告信息是在第一推到回購,而沒有人碰過它,做一個

git push -f 

否則,這個錯誤意味着你的分支計劃是不正確的。你不應該編輯分支來源/分支名稱。你想你自己的本地分支稱爲分支名稱,那麼當你準備在你的代碼來檢查你做

git commit 
git pull 
git push 

你會從你的本地分支名稱原產/ BRANCHNAME推。

編輯

我想看到你的本地回購該命令的輸出:

git branch 

你不應該看到這個詞的起源或您的服務器名稱在輸出的任何地方

+0

不,我機器上的git分支(不是「裸」回購)產生*主 – 2010-09-07 15:11:45

+0

有沒有一種方法來「修復」中央盒子,現在我已經創建回購沒有通過 - 作爲一個論點? :S – 2010-09-07 15:12:36

+0

您當地的回購應該包含遠程回購所做的一切。把它拉下來確保,然後吹走回購,做一個裸機,並把所有東西都推回去。 – bwawok 2010-09-07 15:38:09

3

除了bwawok的解決方案之外,您還需要注意許可問題。默認情況下,當git代表用戶創建文件時,他們的權限來源於用戶的umask,並且他們的組被設置爲用戶的默認組。對於常見的umasks和默認組,這將打破共享repo,因爲這些文件將不可由其他用戶修改。

幸運的是,git可以配置爲在這種情況下做正確的事情:看看--shared選項git init(或core.sharedRepository設置)。最簡單的選項可能是--shared=group,它授予對「git」組中所有用戶的寫入權限。