
在第一講中,我們有介紹過:Git是分布式版本控制系統。每個人的電腦上都有一份完整的版本庫。當對項目作出了修改后,只要把修改推送給對方即可。但很有可能的情況是:兩台電腦不在一個局域網內,無法互相訪問;或者是你倆工作時間不一樣,你上日班,他上夜班,兩人很難找到時間連接到對方的電腦去推送修改。
所以在實際使用分布式版本控制系統時,是有一台電腦充當服務器的角色。這樣,當我們有了修改時直接把修改提交到服務器的倉庫里。其他人若是想獲取這次修改,直接從服務器倉庫中拉取即可。
而GitHub就扮演着這個服務器倉庫的角色。你需要先注冊一個GitHub賬號,配置好你電腦的SSH Key(如何配置SSH Key?),因為Github是支持SSH協議的,所以有了該密鑰后,當從你電腦上的倉庫往GitHub倉庫推送時,GitHub就能識別出你推送的提交確實是你推送的,而不是別人冒充的。而有些同學有多台電腦,他們一會從公司的電腦上傳,一會從家里的電腦上傳,這就需要配置多個密鑰對。
配置好SSH Key后,再新建一個GitHub倉庫,你的遠程倉庫就建立完畢。
與遠程倉庫建立連接
在本地倉庫下運行以下指令可以與遠程倉庫建立連接。只要建立好這一次連接后,以后本地倉庫和遠程倉庫就可以愉快方便地玩耍了~
$ git remote add [remote-alias] [remote-url]
其中 remote-url
指的是遠程倉庫的地址;remote-alias
指的是給該遠程倉庫起的外號,這樣以后有什么事要找它直接喊它外號就可以了(通常,系統會默認給它起外號叫origin)。
- 以后想換外號的話,用
$ git remote rename [old-name] [new-name]
- 本地倉庫若想和遠程倉庫絕交(斷開連接),用
$ git remote rm [remote-alias]
- 要查看現在和哪些倉庫建立連接了,用
$ git remote
。若添加-v參數,可以看到具體是往遠程倉庫的哪個地址fetch數據過來以及是往遠程倉庫的哪個地址push數據過去。
實戰如下:

克隆遠程倉庫
當我們想要把遠程倉庫的內容下載到我們本地電腦時,用下面指令。
git clone [remote-url]
實戰如下:

注意到:當使用該命令時,Git會自行幫你添加該遠程倉庫。
提取遠程倉庫的內容
# 獲取遠程倉庫所有分支的更新
$ git fetch [remote-alias]
# 將某更新的分支合並到當前分支
$ git merge [remote-alias]/[remote-branch]
當fetch了遠程倉庫的更新后,我們在本地就擁有了遠程倉庫中所有分支的引用,如 origin/div1
,origin/main
。我們可以隨時查看或合並。合並的命令就和之前在分支篇介紹的一樣。
例如當遠程倉庫中的屬於 main
分支的 README.md
文件和屬於 div1
分支中的 div1.txt
文件有了更新后,利用上述命令,我們就可以把這兩個文件的更新合並到本地。

當然,$ git fetch
和 $ git merge
命令可以簡化成下面一條:
# 從遠程倉庫的某分支獲取代碼並與本地倉庫中的某分支合並
$ git pull [remote-alias] [remote-branch-name]:[local-branch-name]
若合並的是當前分支,那么冒號后面的內容可以省略,即為:
$ git pull [remote-alias] [remote-branch-name]
推送到遠程倉庫
當你想把你的項目放到遠程倉庫時,你可以使用如下命令:
# 把本地倉庫的某分支推送到遠程倉庫的同名分支里
$ git push [remote-alias] [branch-name]
例如:當我們對 div1
分支里的 div1.txt
文件作出修改后,我們想把這次修改推送到遠程倉庫。

這時,再打開Github中我們的遠程倉庫,就可以看到修改已被推送完畢。
注意:只有當你有遠程倉庫的寫入權限,並且在你進行本次推送前,沒人有再進行過推送了,該命令才可生效。例如你和你的同事正在合力開發一個新的項目,你的同事在一秒前把他們的工作推送到上游了,那么此時你再推送就會被拒絕。你必須先把剛剛他們的推送拉取下來,合並進你的工作后才能推送。
參考
有問題歡迎大家在評論區留言,轉載請注明出處。