@[TOC]
超詳細 Git 圖文版小白教程(持續(xù)更新)
為了能在任意 Git 項目上協(xié)作,你需要知道如何管理自己的遠程倉庫。 遠程倉庫是指托管在因特網(wǎng)或其他網(wǎng)絡(luò)中的你的項目的版本庫咪辱。 你可以有好幾個遠程倉庫伙判,通常有些倉庫對你只讀迈嘹,有些則可以讀寫鸟蟹。 與他人協(xié)作涉及管理遠程倉庫以及根據(jù)需要推送或拉取數(shù)據(jù)蜕提。 管理遠程倉庫包括了解如何添加遠程倉庫森书、移除無效的遠程倉庫、管理不同的遠程分支并定義它們是否被跟蹤等等谎势。 在本節(jié)中强霎,我們將介紹一部分遠程管理的技能汰扭。
遠程倉庫可以在你的本地主機上: 你完全可以在一個“遠程”倉庫上工作呕诉,而實際上它在你本地的主機上欲险。詞語“遠程”未必表示倉庫在網(wǎng)絡(luò)或互聯(lián)網(wǎng)上的其它位置,而只是表示它在別處须喂。在這樣的遠程倉庫上工作吁断,仍然需要和其它遠程倉庫上一樣的標(biāo)準(zhǔn)推送、拉取和抓取操作坞生。
1仔役、查看遠程倉庫:git remote
如果想查看你已經(jīng)配置的遠程倉庫服務(wù)器,可以運行 git remote
命令是己。 它會列出你指定的每一個遠程服務(wù)器的簡寫又兵。 如果你已經(jīng)克隆了自己的倉庫,那么至少應(yīng)該能看到 origin
——這是 Git 給你克隆的倉庫服務(wù)器的默認名字:
你也可以指定選項
-v
卒废,會顯示需要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應(yīng)的 URL
沛厨。
如果你的遠程倉庫不止一個,該命令會將它們?nèi)苛谐觥?例如摔认,與幾個協(xié)作者合作的俄烁,擁有多個遠程倉庫的倉庫看起來像下面這樣:
$ cd grit
$ git remote -v
bakkdoor https://github.com/bakkdoor/grit (fetch)
bakkdoor https://github.com/bakkdoor/grit (push)
cho45 https://github.com/cho45/grit (fetch)
cho45 https://github.com/cho45/grit (push)
defunkt https://github.com/defunkt/grit (fetch)
defunkt https://github.com/defunkt/grit (push)
koke git://github.com/koke/grit.git (fetch)
koke git://github.com/koke/grit.git (push)
origin git@github.com:mojombo/grit.git (fetch)
origin git@github.com:mojombo/grit.git (push)
這表示我們能非常方便地拉取其它用戶的貢獻。我們還可以擁有向他們推送的權(quán)限级野。
2、添加遠程倉庫:git remote add <shortname> <url>
我們在之前的章節(jié)中已經(jīng)提到并展示了 git clone
命令是如何自行添加遠程倉庫的粹胯, 不過這里將告訴你如何自己來添加它蓖柔。 運行 git remote add <shortname> <url>
添加一個新的遠程 Git
倉庫,同時指定一個方便使用的簡寫:
現(xiàn)在你可以在命令行中使用字符串
tf
來代替整個 URL
风纠。如果你想拉取testfirst
的倉庫中有但你沒有的信息况鸣,可以運行 git fetch tf
:
現(xiàn)在
testfirst
的 main
分支可以在本地通過 tf/main
訪問到——你可以將它合并到自己的某個分支中, 或者如果你想要查看它的話竹观,可以檢出一個指向該點的本地分支镐捧。
3潜索、從遠程倉庫中抓取與拉取:git fetch
和 git pull
就如剛才所見懂酱,從遠程倉庫中獲得數(shù)據(jù)竹习,可以執(zhí)行:
git fetch <remote>
這個命令會訪問遠程倉庫,從中拉取所有你還沒有的數(shù)據(jù)列牺。 執(zhí)行完成后整陌,你將會擁有那個遠程倉庫中所有分支的引用,可以隨時合并或查看瞎领。
如果你使用 clone
命令克隆了一個倉庫泌辫,命令會自動將其添加為遠程倉庫并默認以 “origin
” 為簡寫。 所以九默,git fetch origin
會抓取克抡鸱拧(或上一次抓取)后新推送的所有工作驼修。 必須注意 git fetch
命令只會將數(shù)據(jù)下載到你的本地倉庫——它并不會自動合并或修改你當(dāng)前的工作殿遂。 當(dāng)準(zhǔn)備好時你必須手動將其合并入你的工作。
如果你的當(dāng)前分支設(shè)置了跟蹤遠程分支邪锌, 那么可以用 git pull
命令來自動抓取后合并該遠程分支到當(dāng)前分支勉躺。 這或許是個更加簡單舒服的工作流程。默認情況下觅丰,git clone
命令會自動設(shè)置本地 master
分支跟蹤克隆的遠程倉庫的 master
分支(或其它名字的默認分支
)饵溅。 運行 git pull
通常會從最初克隆的服務(wù)器上抓取數(shù)據(jù)并自動嘗試合并到當(dāng)前所在的分支。
4妇萄、推送到遠程倉庫:git push <remote> <branch>
當(dāng)你想分享你的項目時蜕企,必須將其推送到上游。 這個命令很簡單:git push <remote> <branch>
冠句。 當(dāng)你想要將 master 分支或main分支推送到 origin 服務(wù)器時(再次說明轻掩,克隆時通常會自動幫你設(shè)置好那兩個名字), 那么運行這個命令就可以將你所做的備份到服務(wù)器:
git push origin master
或 git push origin main
只有當(dāng)你有所克隆服務(wù)器的寫入權(quán)限懦底,并且之前沒有人推送過時唇牧,這條命令才能生效。 當(dāng)你和其他人在同一時間克隆聚唐,他們先推送到上游然后你再推送到上游丐重,你的推送就會毫無疑問地被拒絕。 你必須先抓取他們的工作并將其合并進你的工作后才能推送杆查。
5扮惦、查看某個遠程倉庫:git remote show <remote>
如果想要查看某一個遠程倉庫的更多信息,可以使用 git remote show <remote>
命令亲桦。 如果想以一個特定的縮寫名運行這個命令崖蜜,例如 origin
浊仆,會得到像下面類似的信息:
它同樣會列出遠程倉庫的
URL
與跟蹤分支的信息。 這些信息非常有用豫领,它告訴你正處于 main
分支抡柿,并且如果運行 git pull
, 就會抓取所有的遠程引用氏堤,然后將遠程 main
分支合并到本地 main
分支沙绝。 它也會列出拉取到的所有遠程引用。
這是一個經(jīng)常遇到的簡單例子鼠锈。 如果你是 Git 的重度使用者闪檬,那么還可以通過 git remote show 看到更多的信息。
$ git remote show origin
* remote origin
URL: https://github.com/my-org/complex-project
Fetch URL: https://github.com/my-org/complex-project
Push URL: https://github.com/my-org/complex-project
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
markdown-strip tracked
issue-43 new (next fetch will store in remotes/origin)
issue-45 new (next fetch will store in remotes/origin)
refs/remotes/origin/issue-11 stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
dev-branch merges with remote dev-branch
master merges with remote master
Local refs configured for 'git push':
dev-branch pushes to dev-branch (up to date)
markdown-strip pushes to markdown-strip (up to date)
master pushes to master (up to date)
這個命令列出了當(dāng)你在特定的分支上執(zhí)行 git push
會自動地推送到哪一個遠程分支购笆。 它也同樣地列出了哪些遠程分支不在你的本地粗悯,哪些遠程分支已經(jīng)從服務(wù)器上移除了, 還有當(dāng)你執(zhí)行 git pull
時哪些本地分支可以與它跟蹤的遠程分支自動合并同欠。
6样傍、遠程倉庫的重命名與移除:git remote rename
和git remote rm
你可以運行 git remote rename
來修改一個遠程倉庫的簡寫名。 例如铺遂,想要將 tf
重命名為 ak
衫哥,可以用 git remote rename
這樣做:
值得注意的是這同樣也會修改你所有遠程跟蹤的分支名字。 那些過去引用
tf/main
的現(xiàn)在會引用 ak/main
襟锐。
如果因為一些原因想要移除一個遠程倉庫——你已經(jīng)從服務(wù)器上搬走了或不再想使用某一個特定的鏡像了撤逢, 又或者某一個貢獻者不再貢獻了——可以使用 git remote remove
或 git remote rm
:
一旦你使用這種方式刪除了一個遠程倉庫,那么所有和這個遠程倉庫相關(guān)的遠程跟蹤分支以及配置信息也會一起被刪除粮坞。