我有我的本地機器上的各種Git項目。我有一臺服務器,我想用作我的遠程Git存儲庫。如何將我的本地Git存儲庫(項目)移動到我的服務器,同時保持歷史記錄不變?如何將我的本地Git存儲庫移動到遠程Git存儲庫
謝謝!編輯: 感謝您的所有偉大的答案。我選擇的答案對我有限的GIT知識是有意義的。
編輯#2: 我注意到我原來的答案選擇沒有複製我的標籤。 git push --mirror <path>
確實複製標籤。
我有我的本地機器上的各種Git項目。我有一臺服務器,我想用作我的遠程Git存儲庫。如何將我的本地Git存儲庫(項目)移動到我的服務器,同時保持歷史記錄不變?如何將我的本地Git存儲庫移動到遠程Git存儲庫
謝謝!編輯: 感謝您的所有偉大的答案。我選擇的答案對我有限的GIT知識是有意義的。
編輯#2: 我注意到我原來的答案選擇沒有複製我的標籤。 git push --mirror <path>
確實複製標籤。
在您的服務器創建一個Git倉庫裸倉庫
git init --bare repo.git
然後,把你的本地倉庫的提交
git push --mirror ssh://yourserver/~/repo.git
如果您想要一個正常的(例如:不是裸露的)存儲庫,只需複製它。沒有什麼特別的事情需要去做。
如果要在服務器上使用裸存儲庫,只需在服務器上初始化它,將其作爲遠程「本地」副本進行初始化,然後將其推送到該服務器。 (git push --mirror
將打通了一切。)
這並不適用於工作我。在遠程,'mkdir somefolder; cd somefolder; git init'。在本地'git push --mirror ssh:// remote/somefolder'。結果'遠程:錯誤:拒絕更新檢出分支:refs/heads/master' – gman
有一個很好的教程在Ralf Wernders blog。假設您知道如何在服務器上創建存儲庫或已經完成的存儲庫:
git remote add <remote> <url>
將遠程添加到本地存儲庫。 <remote>
是遠程(通常是「起源」)的名稱。 <url>
是url與寫訪問你的倉庫(如Git @ ......)
git push <remote> <branch>
要通過原點移動提交。 <branch>
是你推動的分支(通常是「主人」)。
在服務器上創建一個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
。
它要求輸入密碼,所以我必須使用什麼密碼? – Fawwad
首先,你的服務器上創建一個混帳回購協議
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
如果你有一個獨立的本地工作樹倉庫(裏面一個「git的」文件夾中的文件夾),您要添加一個遙控器:
在本地存儲庫,設置新的遠程爲原點:
cd localrepo
git remote add origin REMOTEURL #(verify with git remote -v)
推送所有本地分支機構的遠程,並設置每個本地分支跟蹤相應的遠程分支:
git push --all --set-upstream origin #(verify with git branch -vv)
推送所有本地標籤遠程:
git push --tags origin
在這一點上,本地存儲庫的行爲就像從遠程克隆的一樣。
如果你有一個裸露的本地存儲庫(與git的結尾的名稱的文件夾),你只是想複製到遠程:
在本地資源庫,推動其所有分支機構的遠程
cd localrepo.git
git push --all REMOTEURL
推送所有本地標籤遠程:
git push --tags REMOTEURL
也許這是 「倒退」,但我一直都這麼做
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
如果我這樣做,任何人都可以克隆我的回購?(如果他們知道地址) –
@sliders_alpha:如果他們具有SSH訪問您的服務器並且存儲庫具有適當的權限,那麼是的。 – knittl
有這麼多狗屎。感謝最好的和簡單的方式! – Tobias