Github和Git的區(qū)別
寫這篇文章的目的一來(lái)是總結(jié)下自己對(duì)于 Github 這個(gè)社區(qū)的使用經(jīng)驗(yàn)總結(jié)媳维;另一方面希望可以幫助到那些剛剛接觸到編程的筒子們酿雪,希望你們能夠在編程的道路上找到屬于自己的樂(lè)趣!
首先需要更正的一個(gè)常識(shí):Github 和 Git 不是一個(gè)玩意兒侄刽;在實(shí)際工作中指黎,我們的代碼可能會(huì)被存儲(chǔ)在當(dāng)前的項(xiàng)目工程目錄下、本地倉(cāng)庫(kù)(電腦某個(gè)固定的文件下)州丹、遠(yuǎn)程服務(wù)器上醋安。Github 可以理解為我們儲(chǔ)存代碼的服務(wù)器,當(dāng)然它遠(yuǎn)非服務(wù)器這么簡(jiǎn)單啦墓毒,Git 就是協(xié)助我們?cè)谏蟼€(gè)目錄下提交代碼的一款工具吓揪,就和 SVN 是一個(gè)道理;
Github 作為全球最大的基友交流群所计,有著很多的公司駐扎在其中:
在這里你還可以認(rèn)識(shí)各界大神放棒,比如 Android 界的大神:
- Jake Wharton
- Triena
- 代碼家
- 雌续。俏蛮。跪但。羡洛。涝婉。虏两。
作為一個(gè)程序員峭沦,GitHub 是我們提升個(gè)人影響力的很好的一種方式扫皱,所以你還在猶豫什么治拿,趕緊注冊(cè)一個(gè)號(hào)一起投入到編程的行業(yè)中來(lái)吧:傳送門
另外摩泪,宣傳下我個(gè)人的賬號(hào)歡迎大家一起來(lái)交流技術(shù)~~
基本概念
當(dāng)你注冊(cè)完賬號(hào),進(jìn)入 Your Profile 界面時(shí)劫谅,你就會(huì)看到上圖的界面见坑,當(dāng)然如果你是第一次進(jìn)入可能還沒(méi)有什么項(xiàng)目。
這里我們要對(duì)Github上一些操作有一個(gè)概念性的理解(英語(yǔ)不好的筒子們不用擔(dān)心):
Repository
倉(cāng)庫(kù)的意思捏检,即你的項(xiàng)目荞驴,你想在 GitHub 上開源一個(gè)項(xiàng)目,那就必須要新建一個(gè) Repository贯城。Issue
別人發(fā)現(xiàn)你的項(xiàng)目中有bug熊楼,或者哪些地方做的不夠好,他就可以給你提個(gè) Issue 能犯。Star
就是給項(xiàng)目點(diǎn)贊鲫骗。-
Fork
你開源了一個(gè)項(xiàng)目犬耻,別人想在你這個(gè)項(xiàng)目的基礎(chǔ)上做些改進(jìn),然后應(yīng)用到自己的項(xiàng)目中挎峦,這個(gè)時(shí)候他就可以 Fork 你的項(xiàng)目香追,這個(gè)時(shí)候他的 GitHub 主頁(yè)上就多了一個(gè)項(xiàng)目,只不過(guò)這個(gè)項(xiàng)目是基于你的項(xiàng)目基礎(chǔ)坦胶。
- Pull Request(PR)
發(fā)起請(qǐng)求透典,這個(gè)其實(shí)是基于 Fork 的,還是上面那個(gè)例子顿苇,如果別人在你基礎(chǔ)上做了改進(jìn)峭咒,后來(lái)覺(jué)得改進(jìn)的很不錯(cuò),應(yīng)該要把這些改進(jìn)讓更多的人收益纪岁,于是就想把自己的改進(jìn)合并到原有項(xiàng)目里凑队,這個(gè)時(shí)候他就可以發(fā)起一個(gè) Pull Request(簡(jiǎn)稱PR) ,原有項(xiàng)目創(chuàng)建人就可以收到這個(gè)請(qǐng)求幔翰,這個(gè)時(shí)候他會(huì)仔細(xì)review你的代碼漩氨,并且測(cè)試覺(jué)得OK了,就會(huì)接受你的PR遗增,這個(gè)時(shí)候你做的改進(jìn)原有項(xiàng)目就會(huì)擁有了叫惊。
- Watch
這個(gè)也好理解就是觀察,如果你 Watch 了某個(gè)項(xiàng)目做修,那么以后只要這個(gè)項(xiàng)目有任何更新霍狰,你都會(huì)第一時(shí)間收到關(guān)于這個(gè)項(xiàng)目的通知提醒。
- Gist
如果你只是單純的想分享一些代碼片段饰及,那這個(gè)時(shí)候 Gist 就派上用場(chǎng)了蔗坯!
好吧,下面就一起開啟 Github 浪漫之旅吧~~
第一次使用需要的配置
工具安裝:Git 傳送門
第一次使用嘛燎含,肯定要告訴人 Github 你的身份啦宾濒,有必要配置你的用戶名和密碼加上你的 SSH 密鑰;
$ git config --global user.name "用戶名"
$ git config --global user.email "電子郵箱"
在使用 Github 的過(guò)程中屏箍,我講大部分操作歸結(jié)為兩大類绘梦,即從 Github 上 clone 項(xiàng)目;或者將我們自己的項(xiàng)目分享到 Github 上和志同道合的人士進(jìn)行交流铣除,下面來(lái)看看具體是如何操作的吧~~
Project To GitHub
- case 1:空的代碼庫(kù)
# 在當(dāng)前目錄新建一個(gè)Git代碼庫(kù)
$ git init
# 新建一個(gè)目錄,將其初始化為Git代碼庫(kù)
$ git init [project-name]
- case 2:已存在代碼庫(kù)
切換到項(xiàng)目目錄下
$ git init
添加到本地暫存區(qū)
$ git add .
提交到本地暫存
$ git commit -m "hello world"
添加到遠(yuǎn)程倉(cāng)庫(kù)鹦付,將本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)簡(jiǎn)歷鏈接
$ git remote add origin [github 倉(cāng)庫(kù)地址]
更新
$ git pull origin master --allow-unrelated-histories
提交
$ git push origin master
** 注: ** 按步驟操作偶~~
Project From Github
下載一個(gè)項(xiàng)目和它的整個(gè)代碼歷史
$ git clone [url]
常用命令
如上圖所示尚粘,我們需要清楚了解下面幾個(gè)概念:
- Workspace:工作區(qū)
- Index :暫存區(qū)
- Repository:本地倉(cāng)庫(kù)
- Remote:遠(yuǎn)程倉(cāng)庫(kù)
我們的項(xiàng)目工程在從本地提交中央遠(yuǎn)程倉(cāng)庫(kù)的過(guò)程中,
- 工作區(qū)->暫存區(qū)
# 添加指定文件到暫存區(qū)
$ git add [file1] [file2] ...
# 添加指定目錄到暫存區(qū)敲长,包括子目錄
$ git add [dir]
# 添加當(dāng)前目錄的所有文件到暫存區(qū)
$ git add .
# 添加每個(gè)變化前郎嫁,都會(huì)要求確認(rèn)
# 對(duì)于同一個(gè)文件的多處變化秉继,可以實(shí)現(xiàn)分次提交
$ git add -p
# 刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū)
$ git rm [file1] [file2] ...
# 停止追蹤指定文件泽铛,但該文件會(huì)保留在工作區(qū)
$ git rm --cached [file]
# 改名文件尚辑,并且將這個(gè)改名放入暫存區(qū)
$ git mv [file-original] [file-renamed]
- 暫存區(qū)->本地倉(cāng)庫(kù)
# 提交暫存區(qū)到倉(cāng)庫(kù)區(qū)
$ git commit -m [message]
# 提交暫存區(qū)的指定文件到倉(cāng)庫(kù)區(qū)
$ git commit [file1] [file2] ... -m [message]
# 提交工作區(qū)自上次commit之后的變化,直接到倉(cāng)庫(kù)區(qū)
$ git commit -a
# 提交時(shí)顯示所有diff信息
$ git commit -v
# 使用一次新的commit盔腔,替代上一次提交
# 如果代碼沒(méi)有任何新變化杠茬,則用來(lái)改寫上一次commit的提交信息
$ git commit --amend -m [message]
# 重做上一次commit,并包括指定文件的新變化
$ git commit --amend [file1] [file2] ...
- 本地倉(cāng)庫(kù)->遠(yuǎn)程倉(cāng)庫(kù)
# 刪除遠(yuǎn)程tag
$ git push origin :refs/tags/[tagName]
# 查看tag信息
$ git show [tag]
# 提交指定tag
$ git push [remote] [tag]
# 提交所有tag
$ git push [remote] --tags
# 新建一個(gè)分支弛随,指向某個(gè)tag
$ git checkout -b [branch] [tag]
分支管理
# 提交暫存區(qū)到倉(cāng)庫(kù)區(qū)
$ git commit -m [message]
# 提交暫存區(qū)的指定文件到倉(cāng)庫(kù)區(qū)
$ git commit [file1] [file2] ... -m [message]
# 提交工作區(qū)自上次commit之后的變化瓢喉,直接到倉(cāng)庫(kù)區(qū)
$ git commit -a
# 提交時(shí)顯示所有diff信息
$ git commit -v
# 使用一次新的commit,替代上一次提交
# 如果代碼沒(méi)有任何新變化舀透,則用來(lái)改寫上一次commit的提交信息
$ git commit --amend -m [message]
# 重做上一次commit栓票,并包括指定文件的新變化
$ git commit --amend [file1] [file2] ...
五、分支
# 列出所有本地分支
$ git branch
# 列出所有遠(yuǎn)程分支
$ git branch -r
# 列出所有本地分支和遠(yuǎn)程分支
$ git branch -a
# 新建一個(gè)分支愕够,但依然停留在當(dāng)前分支
$ git branch [branch-name]
# 新建一個(gè)分支走贪,并切換到該分支
$ git checkout -b [branch]
# 新建一個(gè)分支,指向指定commit
$ git branch [branch] [commit]
# 新建一個(gè)分支惑芭,與指定的遠(yuǎn)程分支建立追蹤關(guān)系
$ git branch --track [branch] [remote-branch]
# 切換到指定分支坠狡,并更新工作區(qū)
$ git checkout [branch-name]
# 切換到上一個(gè)分支
$ git checkout -
# 建立追蹤關(guān)系,在現(xiàn)有分支與指定的遠(yuǎn)程分支之間
$ git branch --set-upstream [branch] [remote-branch]
# 合并指定分支到當(dāng)前分支
$ git merge [branch]
# 選擇一個(gè)commit强衡,合并進(jìn)當(dāng)前分支
$ git cherry-pick [commit]
# 刪除分支
$ git branch -d [branch-name]
# 刪除遠(yuǎn)程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
通過(guò) Github 提升自己
上面的操作讓我們將github這個(gè)「網(wǎng)盤」的功能發(fā)揮到了淋漓盡致擦秽;但是如果需要真正通過(guò)Github提升自己的能力,就要回歸到根本漩勤。作為有名的「基友交友社區(qū)」感挥,我們可以看到通過(guò)別人的代碼拓廣自己解決問(wèn)題的思路,而且可以通過(guò)自己的積累發(fā)現(xiàn)問(wèn)題并完善別人的代碼越败!
這里我們就經(jīng)常要 Fork 下別人的代碼触幼,然后給別人(項(xiàng)目主程開發(fā))提交 PR (Pull Request)。給大家推薦一份電子書究飞,作者 Phodal 可以說(shuō)是 TDD 的死忠置谦,大家有興趣可以去看看他的文章也算體驗(yàn)下大神的日常生活吧: GitHub 漫游指南
- TDD
- CI
- 重構(gòu)
- 自動(dòng)部署
最后給大家推薦幾款用著還不錯(cuò)的 Github 插件和網(wǎng)站吧(PS:網(wǎng)上有很多很好的,大家搜索關(guān)鍵詞就好了亿傅,有不錯(cuò)的記得推薦給我歐~~):
最后如果希望搭建個(gè)人網(wǎng)站但是苦于沒(méi)有錢買服務(wù)器的筒子們可以使用 Github Pages ,個(gè)人就是用 Hexo 在上面建了個(gè)自己的站媒峡,還可以。
推薦文章: