2012-01-23 243 views
47

我有我的本地機器上的各種Git項目。我有一臺服務器,我想用作我的遠程Git存儲庫。如何將我的本地Git存儲庫(項目)移動到我的服務器,同時保持歷史記錄不變?如何將我的本地Git存儲庫移動到遠程Git存儲庫

謝謝!編輯: 感謝您的所有偉大的答案。我選擇的答案對我有限的GIT知識是有意義的。

編輯#2: 我注意到我原來的答案選擇沒有複製我的標籤。 git push --mirror <path>確實複製標籤。

回答

52

在您的服務器創建一個Git倉庫裸倉庫

git init --bare repo.git 

然後,把你的本地倉庫的提交

git push --mirror ssh://yourserver/~/repo.git 
+0

如果我這樣做,任何人都可以克隆我的回購?(如果他們知道地址) –

+0

@sliders_alpha:如果他們具有SSH訪問您的服務器並且存儲庫具有適當的權限,那麼是的。 – knittl

+1

有這麼多狗屎。感謝最好的和簡單的方式! – Tobias

3

如果您想要一個正常的(例如:不是裸露的)存儲庫,只需複製它。沒有什麼特別的事情需要去做。

如果要在服務器上使用裸存儲庫,只需在服務器上初始化它,將其作爲遠程「本地」副本進行初始化,然後將其推送到該服務器。 (git push --mirror將打通了一切。)

+0

這並不適用於工作我。在遠程,'mkdir somefolder; cd somefolder; git init'。在本地'git push --mirror ssh:// remote/somefolder'。結果'遠程:錯誤:拒絕更新檢出分支:refs/heads/master' – gman

7

有一個很好的教程在Ralf Wernders blog。假設您知道如何在服務器上創建存儲庫或已經完成的存儲庫:

git remote add <remote> <url> 

將遠程添加到本地存儲庫。 <remote>是遠程(通常是「起源」)的名稱。 <url>是url與寫訪問你的倉庫(如Git @ ......)

git push <remote> <branch> 

要通過原點移動提交。 <branch>是你推動的分支(通常是「主人」)。

+0

這個問題不是關於github。這是關於git – gman

+0

@gman你是對的,我刪除了參考。 – iwein

3

在服務器上創建一個Git倉庫(可以使用gitolite/Gitosis的,或只是一個普通用戶帳號+ PUBKEY SSH AUTH),將服務器添加到使用

git remote add name url 

,並使用git push -u name master本地git倉庫( -u將當前分支標記爲跟蹤,因此您只需git pull而不是git pull name master)。

在服務器端(基於Debian的系統):

adduser --system --home /home/git --bash /bin/bash git 
su - git 
mkdir .ssh 
cat yourkey.pub > .ssh/authorized_keys 

現在,創建一個新的純倉庫使用

mkdir projectName 
cd projectName 
git init --bare 

後,每個本地資源庫,網址是[email protected]:projectName

+0

它要求輸入密碼,所以我必須使用什麼密碼? – Fawwad

46

首先,你的服務器上創建一個混帳回購協議

git init --bare /path/to/repo 

然後遠程回購添加到您當地的一個(SSH://或https://)

git remote add origin ssh://server/path/to/repo 

而且,推文件/提交

git push origin master 

最後,推標籤

git push origin --tags 
+2

我更喜歡這個,因爲--mirror選項(來自git help :)「新創建的本地文件將被推送到遠端,本地更新的文件將在遠端強制更新,刪除的文件將從遠端刪除結束。」 – caligari

+0

這對我不起作用。遠程回購得到各種'致命的:這個操作必須在工作樹中運行'錯誤,如果我試圖用它做任何事情 – gman

+0

這對我很好,我也添加了推送標籤的行。注意:ssh://協議也可以是https://。 –

1

如果你有一個獨立的本地工作樹倉庫(裏面一個「git的」文件夾中的文件夾),您要添加一個遙控器:

  1. 創建的新的空庫遠程。
  2. 在本地存儲庫,設置新的遠程爲原點:

    cd localrepo

    git remote add origin REMOTEURL #(verify with git remote -v)

  3. 推送所有本地分支機構的遠程,並設置每個本地分支跟蹤相應的遠程分支:

    git push --all --set-upstream origin #(verify with git branch -vv)

  4. 推送所有本地標籤遠程:

    git push --tags origin

在這一點上,本地存儲庫的行爲就像從遠程克隆的一樣。


如果你有一個裸露的本地存儲庫(與git的結尾的名稱的文件夾),你只是想複製到遠程:

  1. 創建遠程在一個新的空庫。
  2. 在本地資源庫,推動其所有分支機構的遠程

    cd localrepo.git

    git push --all REMOTEURL

  3. 推送所有本地標籤遠程:

    git push --tags REMOTEURL

0

也許這是 「倒退」,但我一直都這麼做

git clone --bare localrepo localrepo.git 
scp -r localrepo.git remoteserver:/pathTo 
mv localrepo localrepo-prev 
git clone remoteserver:/pathTo/localrepo 

證明了新的回購協議是好的,用git狀態/日誌等,以讓我感覺更好

舉動不在版本控制下的任何文件從 - 上一頁新localrepo

rm -rf localrepo.git localrepo-prev 
相關問題