Git 并不像 SVN 那樣有個(gè)中心服務(wù)器。
目前我們使用到的 Git 命令都是在本地執(zhí)行,如果你想通過(guò) Git 分享你的代碼或者與其他開(kāi)發(fā)人員合作。 你就需要將數(shù)據(jù)放到一臺(tái)其他開(kāi)發(fā)人員能夠連接的服務(wù)器上。
本例使用了 Github 作為遠(yuǎn)程倉(cāng)庫(kù),你可以先閱讀我們的 Github簡(jiǎn)明教程。
要添加一個(gè)新的遠(yuǎn)程倉(cāng)庫(kù),可以指定一個(gè)簡(jiǎn)單的名字,以便將來(lái)引用,命令格式如下:
git remote add [shortname] [url]
本例以 Github 為例作為遠(yuǎn)程倉(cāng)庫(kù),如果你沒(méi)有 Github 可以在官網(wǎng) https://github.com/注冊(cè)。
由于你的本地 Git 倉(cāng)庫(kù)和 GitHub 倉(cāng)庫(kù)之間的傳輸是通過(guò)SSH加密的,所以我們需要配置驗(yàn)證信息
使用以下命令生成 SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
后面的 your_email@youremail.com 改為你在 Github 上注冊(cè)的郵箱,之后會(huì)要求確認(rèn)路徑和輸入密碼,我們這使用默認(rèn)的一路回車就行。成功的話會(huì)在 ~/ 下生成 .ssh 文件夾,進(jìn)去,打開(kāi) id_rsa.pub,復(fù)制里面的 key。
回到 github 上,進(jìn)入 Account => Settings(賬戶配置)。
左邊選擇 SSH and GPG keys,然后點(diǎn)擊 New SSH key 按鈕,title 設(shè)置標(biāo)題,可以隨便填,粘貼在你電腦上生成的 key。
添加成功后界面如下所示:
為了驗(yàn)證是否成功,輸入以下命令:
$ ssh -T git@github.com
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access.
以下命令說(shuō)明我們已成功連上 Github。
之后登錄后點(diǎn)擊" New repository " 如下圖所示:
之后在在Repository name 填入 bjpowernode-git-test(遠(yuǎn)程倉(cāng)庫(kù)名) ,其他保持默認(rèn)設(shè)置,點(diǎn)擊"Create repository"按鈕,就成功地創(chuàng)建了一個(gè)新的Git倉(cāng)庫(kù):
創(chuàng)建成功后,顯示如下信息:
以上信息告訴我們可以從這個(gè)倉(cāng)庫(kù)克隆出新的倉(cāng)庫(kù),也可以把本地倉(cāng)庫(kù)的內(nèi)容推送到GitHub倉(cāng)庫(kù)。
現(xiàn)在,我們根據(jù) GitHub 的提示,在本地的倉(cāng)庫(kù)下運(yùn)行命令:
$ mkdir bjpowernode-git-test # 創(chuàng)建測(cè)試目錄
$ cd bjpowernode-git-test/ # 進(jìn)入測(cè)試目錄
$ echo "# 動(dòng)力節(jié)點(diǎn) Git 測(cè)試" >> README.md # 創(chuàng)建 README.md 文件并寫入內(nèi)容
$ ls # 查看目錄下的文件
README
$ git init # 初始化
$ git add README.md # 添加文件
$ git commit -m "添加 README.md 文件" # 提交并備注信息
[master (root-commit) 0205aab] 添加 README.md 文件
1 file changed, 1 insertion(+)
create mode 100644 README.md
# 提交到 Github
$ git remote add origin git@github.com:tianqixin/bjpowernode-git-test.git
$ git push -u origin master
以下命令請(qǐng)根據(jù)你在Github成功創(chuàng)建新倉(cāng)庫(kù)的地方復(fù)制,而不是根據(jù)我提供的命令,因?yàn)槲覀兊腉ithub用戶名不一樣,倉(cāng)庫(kù)名也不一樣。
接下來(lái)我們返回 Github 創(chuàng)建的倉(cāng)庫(kù),就可以看到文件已上傳到 Github上:
要查看當(dāng)前配置有哪些遠(yuǎn)程倉(cāng)庫(kù),可以用命令:
git remote
實(shí)例
$ git remote
origin
$ git remote -v
origin git@github.com:tianqixin/bjpowernode-git-test.git (fetch)
origin git@github.com:tianqixin/bjpowernode-git-test.git (push)
執(zhí)行時(shí)加上 -v 參數(shù),你還可以看到每個(gè)別名的實(shí)際鏈接地址。
Git 有兩個(gè)命令用來(lái)提取遠(yuǎn)程倉(cāng)庫(kù)的更新。
⒈ 從遠(yuǎn)程倉(cāng)庫(kù)下載新分支與數(shù)據(jù):
git fetch
該命令執(zhí)行完后需要執(zhí)行g(shù)it merge 遠(yuǎn)程分支到你所在的分支。
⒉ 從遠(yuǎn)端倉(cāng)庫(kù)提取數(shù)據(jù)并嘗試合并到當(dāng)前分支:
git merge
該命令就是在執(zhí)行 git fetch 之后緊接著執(zhí)行 git merge 遠(yuǎn)程分支到你所在的任意分支。
假設(shè)你配置好了一個(gè)遠(yuǎn)程倉(cāng)庫(kù),并且你想要提取更新的數(shù)據(jù),你可以首先執(zhí)行 git fetch [alias] 告訴 Git 去獲取它有你沒(méi)有的數(shù)據(jù),然后你可以執(zhí)行 git merge [alias]/[branch] 以將服務(wù)器上的任何更新(假設(shè)有人這時(shí)候推送到服務(wù)器了)合并到你的當(dāng)前分支。
接下來(lái)我們?cè)?Github 上點(diǎn)擊" README.md" 并在線修改它:
然后我們?cè)诒镜馗滦薷摹?/p>
$ git fetch origin
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:tianqixin/bjpowernode-git-test
0205aab..febd8ed master -> origin/master
以上信息"0205aab..febd8ed master -> origin/master" 說(shuō)明 master 分支已被更新,我們可以使用以下命令將更新同步到本地:
$ git merge origin/master
Updating 0205aab..febd8ed
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
查看 README.md 文件內(nèi)容:
$ cat README.md
# 動(dòng)力節(jié)點(diǎn) Git 測(cè)試
## 第一次修改內(nèi)容
四、推送到遠(yuǎn)程倉(cāng)庫(kù)
推送你的新分支與數(shù)據(jù)到某個(gè)遠(yuǎn)端倉(cāng)庫(kù)命令:
git push [alias] [branch]
以上命令將你的 [branch] 分支推送成為 [alias] 遠(yuǎn)程倉(cāng)庫(kù)上的 [branch] 分支,實(shí)例如下。
$ touch bjpowernode-test.txt # 添加文件
$ git add bjpowernode-test.txt
$ git commit -m "添加到遠(yuǎn)程"
master 69e702d] 添加到遠(yuǎn)程
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bjpowernode-test.txt
$ git push origin master # 推送到 Github
重新回到我們的 Github 倉(cāng)庫(kù),可以看到文件已經(jīng)提交上來(lái)了:
五、刪除遠(yuǎn)程倉(cāng)庫(kù)
刪除遠(yuǎn)程倉(cāng)庫(kù)你可以使用命令:
git remote rm [別名]
實(shí)例
$ git remote -v
origin git@github.com:tianqixin/bjpowernode-git-test.git (fetch)
origin git@github.com:tianqixin/bjpowernode-git-test.git (push)
# 添加倉(cāng)庫(kù) origin2
$ git remote add origin2 git@github.com:tianqixin/bjpowernode-git-test.git
$ git remote -v
origin git@github.com:tianqixin/bjpowernode-git-test.git (fetch)
origin git@github.com:tianqixin/bjpowernode-git-test.git (push)
origin2 git@github.com:tianqixin/bjpowernode-git-test.git (fetch)
origin2 git@github.com:tianqixin/bjpowernode-git-test.git (push)
# 刪除倉(cāng)庫(kù) origin2
$ git remote rm origin2
$ git remote -v
origin git@github.com:tianqixin/bjpowernode-git-test.git (fetch)
origin git@github.com:tianqixin/bjpowernode-git-test.git (push)