現(xiàn)在的情景是,你已經(jīng)在本地創(chuàng)建了一個 Git 倉庫后,又想在 GitHub 創(chuàng)建一個 Git 倉庫,并且讓這兩個倉庫進行遠程同步,這樣,GitHub 上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協(xié)作,真是一舉多得。
首先,登陸 GitHub,然后,在右上角找到“Create a new repo”按鈕,創(chuàng)建一個新的倉庫:
http://wiki.jikexueyuan.com/project/git-tutorial/images/add.png" alt="" />
在 Repository name 填入 learngit,其他保持默認設置,點擊“Create repository”按鈕,就成功地創(chuàng)建了一個新的 Git 倉庫:
http://wiki.jikexueyuan.com/project/git-tutorial/images/git14.png" alt="" />
目前,在 GitHub 上的這個 learngit 倉庫還是空的,GitHub 告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯(lián),然后,把本地倉庫的內(nèi)容推送到 GitHub 倉庫。
現(xiàn)在,我們根據(jù) GitHub 的提示,在本地的 learngit 倉庫下運行命令:
$ git remote add origin git@github.com:michaelliao/learngit.git
請千萬注意,把上面的 michaelliao 替換成你自己的 GitHub 賬戶名,否則,你在本地關聯(lián)的就是我的遠程庫,關聯(lián)沒有問題,但是你以后推送是推不上去的,因為你的 SSH Key 公鑰不在我的賬戶列表中。
添加后,遠程庫的名字就是 origin,這是 Git 默認的叫法,也可以改成別的,但是 origin 這個名字一看就知道是遠程庫。
下一步,就可以把本地庫的所有內(nèi)容推送到遠程庫上:
$ git push -u origin master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 13.73 KiB, done.
Total 23 (delta 6), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
把本地庫的內(nèi)容推送到遠程,用git push
命令,實際上是把當前分支 master 推送到遠程。
由于遠程庫是空的,我們第一次推送 master 分支時,加上了-u
參數(shù),Git 不但會把本地的 master 分支內(nèi)容推送的遠程新的 master 分支,還會把本地的 master 分支和遠程的 master 分支關聯(lián)起來,在以后的推送或者拉取時就可以簡化命令。
推送成功后,可以立刻在 GitHub 頁面中看到遠程庫的內(nèi)容已經(jīng)和本地一模一樣:
http://wiki.jikexueyuan.com/project/git-tutorial/images/git15.png" alt="" />
從現(xiàn)在起,只要本地作了提交,就可以通過命令:
$ git push origin master 把本地master分支的最新修改推送至GitHub,現(xiàn)在,你就擁有了真正的分布式版本庫!
當你第一次使用 Git 的 clone 或者 push 命令連接 GitHub 時,會得到一個警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
這是因為 Git 使用 SSH 連接,而 SSH 連接在第一次驗證 GitHub 服務器的 Key 時,需要你確認 GitHub 的 Key 的指紋信息是否真的來自 GitHub 的服務器,輸入 yes 回車即可。
Git 會輸出一個警告,告訴你已經(jīng)把 GitHub 的 Key 添加到本機的一個信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
這個警告只會出現(xiàn)一次,后面的操作就不會有任何警告了。
如果你實在擔心有人冒充 GitHub 服務器,輸入 yes 前可以對照 GitHub 的 RSA Key 的指紋信息是否與 SSH 連接給出的一致。
要關聯(lián)一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git
;
關聯(lián)后,使用命令git push -u origin master
第一次推送 master 分支的所有內(nèi)容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠程庫的存在,也就是有沒有聯(lián)網(wǎng)都可以正常工作,而SVN在沒有聯(lián)網(wǎng)的時候是拒絕干活的!當有網(wǎng)絡的時候,再把本地提交推送一下就完成了同步,真是太方便了!