之前的文章介紹了如何對本地倉庫進行管理,并在本地創(chuàng)建了一個Git倉庫。要參與一個git項目的寫作,就必須了解如何管理遠程倉庫,接下來主要介紹如何進行遠程倉庫的管理。
1 在github創(chuàng)建遠程倉庫
登錄github,有網(wǎng)站右上角找到"new repository"按鈕,創(chuàng)建一個新的倉庫

在Repository name中填寫MyGitTest,其默認即可,而后點擊create repository,這樣就創(chuàng)建了一個新的github遠程倉庫。在其中新建一個README.md說明文件以及一個測試文鍵test_1。
2 clone操作
從遠程倉庫克隆一個版本庫到本地倉庫,指令格式:
git clone 版本庫地址
其中版本庫地址支持多種協(xié)議:http(s)、ssh、git等
示例:
將上述創(chuàng)建的MyGitTest版本庫clone到本地:
$ git clone git@github.com:zhoushuo19/MyGitTest.git
3 remote操作
為了操作遠程倉庫,首先需要使用remote add指令將遠程倉庫的url以及定義的別名添加到本地的遠程倉庫列表中。如下列出了,對遠程倉庫列表的操作指令:
git remote add alias url #添加遠程倉庫
git remote #列出所有遠程倉庫的別名
git remote -v #列出所有遠程倉庫的別名以及對應url
git remote rm alias #刪除指定遠程倉庫
git remote rename old-alias new-alias #重命名
git remote set-url alias url #更新url
示例
執(zhí)行如下指令,添加新的遠程倉庫:
$ git remote add origin git@github.com:user_name/MyGitTest.git #添加遠程倉庫
$ git remote -v #列出所有遠程倉庫
origin git@github.com:zhoushuo19/MyGitTest.git (fetch)
origin git@github.com:zhoushuo19/MyGitTest.git (push)
需要注意
1)如果本地版本庫MyGitTest是通過clone指令從遠程倉庫獲取到的,那么在遠程倉庫列表中已經(jīng)設置了別名origin與遠程倉庫url的對應關系,不需要再次執(zhí)行git remote add origin ...指令
2)上述指令中git@github.com:user_name/MyGitTest.git就是遠程倉庫的網(wǎng)絡地址,這里一定要將其修改為你自己的地址,不然你將無法將本地倉庫推送到遠程倉庫。
4 fetch操作:
當遠程倉庫中有了更新(commit),需要將這些更新抓取到本地,這時就需要使用git fetch指令。指令格式:
git fetch remote-name
上述命令會將遠程倉庫中的所有分支全部取回,并更新到本地對應的分支上。當僅需要從遠程倉庫取回某個分支時,就需要指定分支名,指令格式:
git fetch remote-name branch-name
遠程分支對應的本地分支名的形式是:遠程主機名/分支名,例如origin主機上的master分支,對應到本地,分支名就是origin/master。而后,我們就可以在本地訪問該遠程分支的所有分支:1)將其中某個分支合并到本地(merge);2)直接取出某個分支查看其中的內(nèi)容(checkout)
示例:
1)在遠程倉庫MyGitTest中添加一個test_2文件,使用git fetch指令將遠程倉庫取回到本地:
$ git fetch origin master
2)查看本地所有分支
$ git branch -a #查看本地所有分支
* master
remotes/origin/master
其中master是當前的本地分支,remotes/origin/master是遠程分支在本地對應的分支
3)查看當前本地分支中的內(nèi)容,而后檢出獲取到的遠程分支,再次查看其中的內(nèi)容
$ ls
README.md test_1
$ git checkout origin/master #切換到獲取的遠程分支
$ ls
README.md test_1 test_2
4)將獲取的遠程分支合并到本地分支
$ git checkout master #切換到本地分支
$ git merge origin/master #將獲取的遠程分支合并到本地分支
Updating 52bba6b..dbfe1cf
Fast-forward
test_2 | 1 +
2 files changed, 3 insertions(+)
create mode 100644 test_2
$ ls #查看內(nèi)容
README.md test_1 test_2
5 pull操作
上述fecth指令只是將遠程倉庫中的數(shù)據(jù)拉取到本地倉庫,并不會將其合并到當前的工作分區(qū),合并操作是需要后續(xù)使用merge指令來進行合并的。
git pull指令的功能是,抓取遠程倉庫的某個分支合并到本地倉庫的指定分支上。這是比較常用的方式(至少我這么認為)。指令格式:
git pull remote-name remote-branch:local-branch
遠程分支與當前分支進行合并時,指令格式:
git pull remote-name remote-branch
本地分支與遠程分支之間,有一種追蹤關系,比如在git clone時,本地分支默認與遠程倉庫的同名分支建立追蹤關系,例如本地master分支自動追蹤origin/master分支。如果當前分支與遠程分支存在追蹤關系,指令格式簡化為:
git pull remote-name
如果當前分支只有一個追蹤分支,那么主機名都可以省略:
git pull
示例
在github端修改test_1文件,在本地執(zhí)行執(zhí)行如下指令,獲取到遠程倉庫中的更新:
$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:zhoushuo19/MyGitTest
1e7813a..e3aca3c master -> origin/master
Updating 1e7813a..e3aca3c
Fast-forward
test_1 | 1 +
1 file changed, 1 insertion(+)
6 push操作
git push是將本地分支的更新推送到遠程倉庫的指令,指令格式與git pull指令類似:
git push remote-name local-branch:remote-branch
忽略遠程分支,則表示將本地分支推送與之存在”追蹤關系”的遠程分支,如果該分支不存在,則新建該遠程分支:
git push remote-name local-branch
如果忽略本地分支,則表示刪除指定的遠程分支:
git push remote-name :remote-branch
等同于
git push remote-name --delete remote-branch
如果當前分支與遠程分支之間存在追蹤關系,則本地分支和遠程分支都可以省略
git push remote-name
如果當前分支只有一個追蹤分支,那么主機名都可以省略:
git push
示例:
修改本地倉庫中的test_1文件,并將該修改推送到遠程倉庫:
$ git add test_1 #添加文件到stage
$ git commit -m"update test_1" test_1 #提交到本地倉庫
[master ed8cf15] update test_1
1 file changed, 1 insertion(+)
$ git push #推送到遠程倉庫
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 328 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:zhoushuo19/MyGitTest.git
e3aca3c..ed8cf15 master -> master