2010-01-06 51 views
1

我有一個項目託管在GitHub上,我想在本地工作。我有多臺需要訪問它的計算機,我想在它們之間共享代碼。但是,我不希望所有這些提交都在GitHub上,所以一個簡單的「克隆然後只是推/拉」方法並不適合。Git與「兩級遠程」

從本質上講,我想這一點:

[GitHub] --> [A Local Network Share] --> [PC1] 
            --> [PC2] 

所以PC1和PC2應該能夠推/拉至本地網絡共享,因此彼此之間共享代碼,每過一段時間我想將這些更改推送到我的GitHub存儲庫。

我在這裏有點失落 - 我是否創建了一個分支?或者我從GitHub克隆到我的共享,然後從我的共享克隆到PC1和PC2,這將導致他們只有1個遠程(共享)和共享只有1個遠程(GitHub)?

編輯:這不是爲了安全 - 我不介意所有的立即提交到GitHub,我也不想阻止PC2訪問GitHub。更多的是,我不想設置整個SSL的東西,因爲我是非常經常提交的人(有時每隔幾分鐘 - 我使用git commit作爲擴展的撤銷函數),並且我希望GitHub上的代碼總是可編譯。 。

編輯2:解決方案在這裏並沒有對我的工作還沒有:(所以我在我的服務器上做

git clone --bare [email protected]:foo/bar 

這將創建一個副本在我的電腦,我的git克隆這個倉庫 - 這一點。一步工作正常,我的電腦有一個.git存儲庫,我的服務器設置爲遠程。

但是,在服務器上,沒有任何設置正確 - 沒有遙控器添加,我不能從那裏推。使用git add很容易添加一個遠程,但是我怎麼推?git status說它需要一個工作目錄(這是我們沒有的),g它推動說「一切都是最新的」,即使它不是(我在PC1上進行了更改,並將git推送到服務器)

在服務器上創建存儲庫而沒有--bare意味着它有它自己的工作dir,所以當我從個人電腦中推送時,服務器不會選擇那個(我猜我不知道需要從個人電腦中獲得git pull,但我想避免這種情況)。

我錯過了一步嗎?

回答

3

第二種解決方案應該足夠了。

  • 創建一個叉子將意味着你的中間階段,仍然是GitHub的(a forkgit clone GitHub上)
  • 創建分支沒​​有解決的長期任何共享代碼

如果您在共享上創建git clone --bare myGitHubRepo.git,然後在PC1和PC2上克隆該sharedRepo,那麼您已經爲每個PC回購設置了一個自然目的地,以便他們進行推/拉。

編輯:mstum:此方法工作正確,但缺少一個步驟。服務器上的裸克隆沒有任何遠程設置。這需要做的要麼

git remote add origin [email protected]:user/Project.git 

或從服務器到GitHub的需要每次推送是

git push [email protected]:user/Project.git 
+0

@Michael:謝謝你的編輯和額外的一步。 – VonC 2010-01-07 06:34:42

0

這是對安全性,以便PC2不能訪問推送到github上?爲此,我通常在我的開發機器上設置多個http://www.kernel.org/pub/software/scm/git/docs/git-remote.html'> git遙控器。無法訪問主遙控器的開發人員可以推/拉到單獨的遙控器。然後,您可以將他們的更改下載到不同的本地分支,並按照您認爲合適的方式合併它們。

1

這是相當可實現的。首先讓GitHub庫的裸克隆:

git clone --bare [email protected]:foo \\network\foo 

庫是裸露的(不包含工作拷貝,這是爲了讓你可以在本地複製它,推動它)。

然後在每臺PC上你克隆網絡位置:

git clone \\network\foo foo 

然後在每一個倉庫工作,使分支機構,承諾等,並將它們推向份額。當你準備推送到github時,更改爲\\network\foo並從那裏推送。