git 支援在本地倉庫進行程式專案的版本管理,這個本地的 git 倉庫在程式專案的資料夾內(也就是 「.git」 資料夾內)。隨著程式專案的推進,我們會把不同階段的檔案內容加入到這個 git 倉庫中。這個倉庫由我們直接操控,我們將它稱之為「本地 git 倉庫」。
除了「本地 git 倉庫」外,如果需要與他人共同開發這個程式專案,還需要乙個「遠端 git 倉庫」。程式專案,本地 git 倉庫和遠端 git 倉庫之間的關係如圖1所示。
圖1:程式專案,本地倉庫,遠端倉庫之間的關係
遠端 git 倉庫並不一定儲存在另一台計算機中。很多人知道 git 支援 http/https,ssh等協議,以允許本地 git 倉庫與存在於另一台計算機中的遠端 git 倉庫之間傳送資料。但實際上,遠端 git 倉庫也可以跟本地 git 倉庫處於同一臺電腦中,使用本地協議來進行資料的傳送。
以下命令可以在本地建立乙個遠端 git 倉庫:
git init --bare git倉庫資料夾名稱
即在git init
命令加上--bare
選項。這是因為遠端 git 倉庫也稱為bare型別的倉庫。例如以下命令會建立乙個名為 lee.git 的遠端倉庫:
git init --bare lee.git
執行以上命令後,可以看到當前目錄下多了乙個 lee.git 目錄,開啟 lee.git 目錄,可以看到目錄的結構:
圖2:bare型別的git倉庫
可以看到 lee.git 目錄下並沒有 .git 這個子資料夾。
使用git clone
命令,可以從遠端倉庫複製出乙個本地倉庫。例如如下命令:
git clone ./lee.git local
這樣就從 lee.git 複製出乙個名為 local 的本地倉庫。進入 local 這個目錄,可以看到 .git 子資料夾,也就是說,這個複製得到的 git 倉庫是一般的 git 倉庫,並不是 bare 型別,我們可以在這上面進行程式專案的開發。
在本地倉庫的配置檔案 config 中,有乙個 origin 的屬性,用來記錄本地倉庫與遠端倉庫之間的關係。使用git config -l
可以列出 git 的配置資訊:
…(其他屬性)如果我們對本地倉庫 local 進行了修改,現在需要推送到遠端倉庫,可以使用以下命令:remote.origin.url=/users/lihao/code/git/./lee.git/
remote.origin.fetch=+refs/heads/:refs/remotes/origin/
…(其他屬性)
git push origin master
即把 master 分支的最新資料,推送到遠端倉庫儲存。需要指出的是,執行這個命令,不會在配置檔案中記錄本地倉庫的分支和遠端倉庫分支之間的關係。如果加上--set-upstream
選項(或者使用短選項-u
)如下,git 就會在配置檔案中記錄本地倉庫的分支和遠端倉庫的分支之間的關係。
git push --set-upstream origin master
執行此命令後,再使用git config -l | grep branch
可以看到以下結果,這個對應關係會被下次git push
使用。
branch.master.remote=origin第一行配置指定當前這個分支對應的遠端倉庫;第二行配置指定當前這個分支所對應的分支名稱。branch.master.merge=refs/heads/master
remotes 開頭的分支是用來跟蹤遠端倉庫的狀態。由於遠端倉庫可能已被他人修改,因此,我們需要將遠端倉庫的最新狀態同步到本地倉庫。使用命令*
masterremotes/origin/master
git pull
可以更新本地倉庫狀態:
git pull
具體來說,git pull
命令會執行兩個操作:
git fetch
從遠端倉庫取回當前所在分支的最新資料。完成這項操作後,可以將本地計算機上的遠端倉庫的分支狀態更新至最新。
git merge
把遠端倉庫的分支合併到本地倉庫的分支。
執行第2個操作可能會導致衝突,如果出現衝突,需要先解決衝突,才能將本地倉庫的修改通過git push
到遠端倉庫。
前面我們提到的本地倉庫與遠端倉庫的操作,都是假設先有遠端倉庫,再複製乙個本地倉庫,這也是團隊開發的乙個標準模式。但有時程式專案並不一開始就由團隊共同開發,而是先由某乙個程式開發人員開頭,而後才逐步過渡到團隊開發的模式。
使用git clone --bare 程式專案資料夾名稱 遠端倉庫路徑
命令,可以從本地倉庫複製出一下遠端倉庫。例如使用以下命令,可以從 local 本地倉庫建立乙個 server.git 遠端倉庫。
git clone --bare local server.git
但是,本地倉庫 local 並不會自動記錄其遠端倉庫的屬性,為此,先進入 local 本地倉庫目錄,然後使用以下命令來新增遠端倉庫:
git remote add origin ../server.git
這樣,就為本地倉庫新增了乙個遠端倉庫的屬性,其遠端倉庫的名稱為 origin。但是,使用git remote add
命令,只是設定了倉庫之間的對應關係,還沒建立遠端倉庫的追蹤分支。如果使用git branch -a
命令,只會看到本地倉庫的分支,並沒有任何遠端倉庫的追蹤分支。為此,還需要執行
git remote update
讓 git 在本地倉庫建立追蹤分支。
git remote add
命令有兩點需要注意:
遠端倉庫的名稱不一定叫做 origin ,叫其他名稱也可以;
遠端倉庫並不是唯一的,乙個本地倉庫可以對應多個遠端倉庫屬性。
關於第2點,可以參考下圖3。
假設 origin 這個遠端倉庫原來就已經存在,現在我們需要建立另乙個遠端倉庫,並把 master 和 bug 分支推送到這個新的遠端倉庫中。
圖3:本地倉庫對應多個遠端倉庫的例子
要完成這項工作,需要按以下順序執行。首先,建立乙個新的遠端倉庫。
git init --bare lee2.git
這樣便建立乙個名稱 lee2.git 的倉庫。接下來,在本地計算地按順序執行:
git remote add new-repo ../lee2.git
git push new-repo master
git push new-repo bug
git remote add new-repo ../lee2.git
命令假設我們在本地倉庫的目錄執行該命令,且遠端倉庫的路徑跟本地倉庫路徑處於同一級目錄,new-repo為我們自己取的名稱,也可以起其他的名稱。
下面的兩個git push
命令會將 master 和 bug 分支推送到新建立的倉庫,並自動建立遠端倉庫的兩個追蹤分支。
這時,如果使用git branch -a
命令,可以顯示以下的追蹤分支資訊:
…(其他分支)與remotes/new-repo/master
remotes/new-repo/bug
git remote add
相反的是git remote rm
命令。例如,現在我們需要刪除上面新增的new-repo遠端倉庫:
git remote rm new-repo
刪除遠端倉庫後,本地所有屬於它的追蹤分支也會一起消失。如果需要還原回來,只需再使用git remote add
和git remote update
命令即可。
更改遠端倉庫名稱:
git remote rename 舊名稱 新名稱
git remote set-url 遠端倉庫名稱 新的位址
git remote -v
刪除遠端倉庫分支:
git push 遠端倉庫的名稱 --delete 分支名稱
完全學會git github git server的24堂課, 孫巨集明著, 清華大學出版社, 2023年
git pro,
git 遠端倉庫
1 github github的這個 就是提供git倉庫託管服務的,所以,只要註冊乙個github賬號,就可以免費獲得git遠端倉庫。由於你的本地git倉庫和github倉庫之間的傳輸是通過ssh加密的,所以,需要一點設定 第1步 建立ssh key。在使用者主目錄下,看看有沒有.ssh目錄,如果有...
git遠端倉庫
git遠端倉庫 目前我們使用到的 git 命令都是在本地執行,如果你想通過 git 分享你的 或者與其他開發人員合作。你就需要將資料放到一台其他開發人員能夠連線的伺服器上。新增遠端倉庫 1 git remote add shortname url 由於你的本地git倉庫和github倉庫之間的傳輸是...
git 遠端倉庫
如果是在本地建立倉庫再推送到github或碼雲,或者遠端倉庫位址改變,則需要指定遠端倉庫 git remote v git remote add 遠端倉庫別名 git remote add origin git push 遠端倉庫別名 本地分支 git push origin master 把本地分...