2011-07-11 205 views

回答

185

我想你把遠程側,git init --bare純倉庫,添加遠程側推/拉跟蹤你的本地倉庫(git remote add origin URL),然後在本地你剛纔說git push origin master。現在任何其他存儲庫都可以從遠程存儲庫中獲取pull

+0

@Nips:是的,對,對不起。你推動個別分支,的確如此! –

+0

如果我正在使用GUI,該怎麼辦?如何爲所有存儲庫設置服務器,並且同一網絡上的每臺PC連接到該服務器? – SearchForKnowledge

+3

如果'git push origin master'失敗並顯示「repository not found」錯誤,請嘗試在遠端執行'git update-server-info',在那裏執行了'git init --bare' – HongKilDong

6

對於在Windows上創建本地副本並希望在Unix系統上創建對應的遠程存儲庫的人的說明,其中文本文件在類Unix系統上的開發人員獲得更多克隆的LF結尾,但CRLF結束在Windows上。

如果您在setting up line-ending translation之前創建了您的Windows存儲庫,那麼您遇到了問題。 Git的默認設置沒有翻譯,因此您的工作集使用CRLF,但您的存儲庫(即存儲在.git下的數據)已將文件另存爲CRLF。

當您推送到遠程時,保存的文件將按原樣複製,不會發生行結束翻譯。 (當文件被提交到存儲庫時,而不是在存儲庫被推送時,行結束轉換髮生)。你最終會在你的類Unix庫中得到CRLF,這不是你想要的。

要在遠程存儲庫中獲取LF,必須首先確保LF位於本地存儲庫中,編號爲re-normalizing your Windows repository。這對你的Windows工作集沒有明顯的影響,它仍然有CRLF結束,但是當你推到遠程時,遠程將正確地獲得LF。我不知道是否有一種簡單的方法可以告訴你在Windows庫中有哪些行結束符 - 我想你可以通過設置core.autocrlf = false然後克隆來測試它(如果repo有LF結尾,克隆也會有LF)。

53

爲了最初設置任何Git服務器,您必須將現有存儲庫導出到新的裸存儲庫 - 一個不包含工作目錄的存儲庫。這通常很簡單。爲了克隆您的存儲庫以創建新的裸存儲庫,可以使用--bare選項運行clone命令。按照慣例,在.git裸倉庫目錄結束,就像這樣:

$ git clone --bare my_project my_project.git 
Initialized empty Git repository in /opt/projects/my_project.git/ 

此命令通過本身需要Git倉庫,沒有工作目錄,並單獨爲它專門創建一個目錄。

既然你有一個倉庫的副本,你需要做的就是把它放在服務器上並設置你的協議。假設您已經設置了一個名爲git.example.com的服務器,您可以使用SSH訪問該服務器,並且您想要將所有Git存儲庫存儲在/opt/git目錄下。您可以複製你的裸庫在設置新的倉庫:

$ scp -r my_project.git [email protected]:/opt/git 

在這一點上,誰也已只讀訪問同一臺服務器到/opt/git目錄SSH訪問其他用戶可以通過運行克隆你的倉庫

$ git clone [email protected]:/opt/git/my_project.git 

如果用戶SSHS到服務器,並有寫權限的目錄/opt/git/my_project.git,他們也將自動具有推送權限。如果使用--shared選項運行git init命令,Git會自動將組寫入權限添加到存儲庫。

$ ssh [email protected] 
$ cd /opt/git/my_project.git 
$ git init --bare --shared 

這是很容易採取的Git倉庫,創建一個純的版本,並將其放置在服務器上到你和你的合作者有SSH訪問。現在您已準備好在同一個項目上進行協作。

+4

'scp'解決方案在實踐中比'init -bare'更好地工作。儘管首先在本地克隆,然後複製到服務器,但它仍然感覺有點醜陋,希望git有一個命令可以一次完成。 – leftaroundabout

+0

爲此+1了,因爲'--shared'爲我工作。我不知道會發生什麼,如果你使用'git init --shared'而不做一個'--bare' ... – icedwater

+1

在遠程不支持的情況下在本地創建一個裸倉庫和'scp', git init --bare'(就像我用git 1.5.5,2008那樣)。我認爲這應該工作,即使遙控器根本沒有git。 –

-3

通常情況下,你可以通過只使用init命令

git init 

在你的情況設置了一個混帳回購協議,已經有一個遠程可回購。取決於你如何訪問您的遠程回購(用URL或處理驗證一個SSH密鑰中的用戶名)只使用clone命令:

git clone [email protected][my.url.com]:[git-repo-name].git 

也有其他的方法來克隆回購。這樣你就可以調用它,如果你的計算機上有一個ssh密鑰設置,它將驗證是否拉動你的存儲庫。如果您想要在其中包含密碼和用戶名以登錄到遠程存儲庫,還有其他URL組合。

+1

這有多諷刺... 今天有人剛剛低估了這個答案,現在我正在努力推動我的文件。看起來我需要一些git鍛鍊來再次入手! –

+3

我認爲問題在於OP想要一個解決方案在ssh服務器上創建遠程repo,但是您描述瞭如何從遠程ssh服務器創建本地repo。你沒有回答這個問題。 (不是我是下來。) – peterh

0

您需要在遠程服務器上創建一個目錄。然後使用「git init」命令將其設置爲存儲庫。這應該爲每個新項目(每個新文件夾)完成

假設您已經使用ssh密鑰設置和使用git,我編寫了一個小型Python腳本,該腳本在從工作目錄執行時將設置遠程並將該目錄初始化爲一個git倉庫。當然,你將不得不編輯腳本(只有一次),告訴它所有存儲庫的服務器和根路徑。

在這裏檢查 - https://github.com/skbobade/ocgi

相關問題