日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

git/github的使用

發(fā)布時(shí)間:2025/7/25 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git/github的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)容最后更新時(shí)間:2018-08-10

以下內(nèi)容是我在收集而來,再經(jīng)過自己的經(jīng)驗(yàn)修改而成,希望對(duì)你有用(在不斷的更新中)

歡迎來到Github

初識(shí)Github

版本控制的介紹

熟練使用Git/Github是互聯(lián)網(wǎng)公司程序員的必備技能之一。當(dāng)開發(fā)中遇到困難或者職業(yè)技能遇到瓶頸時(shí),Github簡(jiǎn)直是相見恨晚的利器,身為一線開發(fā)者,如果沒有接觸過Github,的確是一大損失。因此,從今天開始,本課程就將帶領(lǐng)大家敲開Github的大門。

確切的說,Github是由Chris Wanstrath、PJ Hyett 與 Tom Preston-Werner 三位開發(fā)者共同創(chuàng)辦的一家公司,于2008年4月10日成立于舊金山,主要提供基于git的版本托管服務(wù)。一經(jīng)上線,它的發(fā)展速度驚為天人,截止目前,Github 已經(jīng)發(fā)展成全球最大的開(同)源(性)社區(qū)。Logo如圖所示。

Github與Git的關(guān)系

Github ≠ Git,很多人以為 Github 就是 Git,其實(shí)這是一個(gè)理解誤區(qū)。

Git 是一款免費(fèi)、開源的分布式版本控制系統(tǒng),由著名的 Linux 發(fā)明者 Linus Torvalds 開發(fā)。說到版本控制系統(tǒng),大多數(shù)人都用過 SVN ,Git 是新時(shí)代的產(chǎn)物,如果你還在用 SVN 來管理代碼,那就真的有些落伍了。不管是學(xué)習(xí) Github ,還是以后想從事編程行業(yè),Git 都可以算是一項(xiàng)必備技能,所以,建議大家可以自學(xué)下 Git ,后面的課程中也會(huì)向大家推薦一些適合新手學(xué)習(xí)Git的資料。

Github 主要是提供基于 git 的版本托管服務(wù),也就是說,現(xiàn)在 Github 上托管的所有項(xiàng)目代碼都是基于 Git 來進(jìn)行版本控制的,所以 Git 只是 Github 上用來管理項(xiàng)目的一個(gè)工具而已,Github 的功能可遠(yuǎn)不止于此!

Github的影響力

為什么說 Github 是全球最大的開源社區(qū)了,下面讓我們一一舉證:

全球頂級(jí)科技公司紛紛加入 Github ,并貢獻(xiàn)他們自己的項(xiàng)目代碼

Google: Github.com/google

蘋果: Github.com/apple

Facebook: Github.com/facebook

Twitter:Github.com/twitter

微軟:Github.com/microsoft

Square:Github.com/square

阿里:Github.com/alibaba

...

全球頂級(jí)開源項(xiàng)目都優(yōu)先選擇在 Github 上開源

Linux:Github.com/torvalds/li…

Rails:Github.com/rails/rails

Nodejs:Github.com/nodejs/node

Swift:Github.com/apple/swift

CoffeeScript:Github.com/jashkenas/c…

Ruby:Github.com/ruby/ruby

...

全球頂級(jí)編程大牛加入Github

Linux 發(fā)明者 Linus Torvalds:Github.com/torvalds

![](oojz4erar.bkt.clouddn.com/hexoblog/im… Torvalds.png)

Rails 創(chuàng)始人 DHH:Github.com/dhh

被稱為「Android之神」的 JakeWharton:Github.com/JakeWharton, 你們用的很多開源庫(kù)如 ButterKnife、OkHttp、 Retrofit、 Picasso、ViewPagerIndicator 等都是出自他之手!

其他就不一一列舉了,Github 上活躍的很多是 Google 、Square、阿里等公司的員工,有些甚至還是Google Android Team組的,所以在這里你可以接觸到全球頂級(jí)編程大牛!

Github有什么用?

1.學(xué)習(xí)優(yōu)秀的開源項(xiàng)目

開源社區(qū)一直有一句流行的話叫「不要重復(fù)發(fā)明輪子」,某種意義上正是因?yàn)殚_源社區(qū)的貢獻(xiàn),我們的軟件開發(fā)才能變得越來越容易,越來越快速。試想你在做項(xiàng)目時(shí),如果每一模塊都要自己去寫,如網(wǎng)絡(luò)庫(kù)、圖片加載庫(kù)、ORM庫(kù)等等,自己寫的好不好是一回事,時(shí)間與資源是很大的成本。對(duì)于大公司可能會(huì)有人力與資源去發(fā)明一套自己的輪子,但是對(duì)于大部分互聯(lián)網(wǎng)創(chuàng)業(yè)公司來說時(shí)間就是一切。而且你在使用開源項(xiàng)目的過程也可以學(xué)習(xí)他們優(yōu)秀的設(shè)計(jì)思想、實(shí)現(xiàn)方式,這是最好的學(xué)習(xí)資料,也是一份提升自己能力的絕佳方式!

2.多人協(xié)作

如果你想發(fā)起一個(gè)項(xiàng)目,比如翻譯一份不錯(cuò)的英文文檔,覺得一個(gè)人的精力不夠,所以你需要更多的人參與進(jìn)來,這時(shí)候 Github 是你的最佳選擇,感興趣的人可以參與進(jìn)來,利用業(yè)余時(shí)間對(duì)這個(gè)項(xiàng)目做貢獻(xiàn),然后可以互相審核、合并,簡(jiǎn)直不要太棒!

3.搭建博客、個(gè)人網(wǎng)站或者公司官網(wǎng)

這個(gè)就不用多說了,現(xiàn)在越來越多的博客都是基于 Github Pages 來搭建的了,你可以隨心所欲的定制自己的樣式,可以給你博客買個(gè)逼格高的域名,再也不用忍受各大博客網(wǎng)站的約束與各式各樣的廣告了!

4.寫作

如果你喜歡寫作,而且基于 Markdown, 并準(zhǔn)備出版書籍,那么推薦你用 Gitbook ,技術(shù)寫作人的最愛!

5.個(gè)人簡(jiǎn)歷

如果你有一個(gè)活躍的 Github 賬號(hào),上面有自己不錯(cuò)的開源項(xiàng)目,還經(jīng)常給別的開源項(xiàng)目提問題,push 代碼,那么你找工作將是一個(gè)非常大的優(yōu)勢(shì),現(xiàn)在程序員的招聘很多公司都很看中你 Github 賬號(hào),某種意義上 Github 就可以算是你的簡(jiǎn)歷了。而且不僅國(guó)內(nèi),很多國(guó)外的科技公司都會(huì)通過 Github 來尋找優(yōu)秀的人才,比如我甚至通過 Github 收到過 Facebook 的邀請(qǐng)郵件!

6.加入 Github

讀完這篇文章,是否你已經(jīng)蠢蠢欲動(dòng)了,從現(xiàn)在開始,立刻、馬上去注冊(cè)個(gè) Github 「Github.com」,去體驗(yàn)一番,不會(huì)用不要緊,接下來我們會(huì)有一系列的課程,來教你學(xué)會(huì)使用 Github !

加入Github

注冊(cè)Github

在學(xué)習(xí)本節(jié)課程之前先解答下大家比較關(guān)心的兩個(gè)問題:

1.Github 需要翻墻嗎?

答案是不需要翻墻的。對(duì)于國(guó)內(nèi)用戶,Github 在2013年之前總是訪問不穩(wěn)定,2013年初的時(shí)候最為嚴(yán)重,一度被封。當(dāng)時(shí)李開復(fù)老師因?yàn)榇耸?#xff0c;特公開發(fā)布抗議 Github 被封的微博;此外大量使用 Github 的程序員也是長(zhǎng)期深受訪問限制的困擾,很多人對(duì)此事怨聲載道。因此,李開復(fù)老師的公開發(fā)言,在IT界產(chǎn)生了共鳴,大家紛紛在微博上轉(zhuǎn)發(fā)譴責(zé),算是當(dāng)時(shí)的重大事件了,后來因?yàn)榇耸路错憚×?#xff0c;沒過幾天 Github 就可以正常訪問了,為此,我們應(yīng)該感謝李開復(fù)老師敢于站出來的勇氣。可以說,如果沒有 Github ,中國(guó)的編程水平起碼要倒退好幾年!

由于Github 的影響力較大,因此,也成為了各種黑客攻擊的對(duì)象,所以,偶爾也會(huì)有宕機(jī)訪問不了的情況,但是好在不會(huì)被封,大家也不必?fù)?dān)心。訪問 Github 不用翻墻,只是可能訪問速度稍慢些,另外為了維護(hù)一個(gè)和諧的環(huán)境,在這里呼吁大家不要在 Github 上發(fā)表任何關(guān)于政治的言論與文章,在 Github 上我們只是單純的技術(shù)交流,無關(guān)政治,在復(fù)雜的大環(huán)境下,希望 Github 永遠(yuǎn)是程序員們的一片凈土!

2.英語(yǔ)差,0基礎(chǔ)能學(xué)會(huì)嗎?

不少人會(huì)提出疑問:Github 是全英文的,英文不好怎么辦?請(qǐng)放心,Github 雖然是全英文,但是對(duì)英語(yǔ)水平的要求并不是很高,都是些簡(jiǎn)單的詞匯,你會(huì)覺得很難,只是因?yàn)閷?duì)英文網(wǎng)站反射性的抵觸而已,相信自己,只要認(rèn)真學(xué)習(xí)本課程,你一定會(huì)慢慢愛上使用Github的!

在清楚了上述兩個(gè)問題后,讓我們開始注冊(cè) Github 吧。

首先在 Github 官網(wǎng)(Github.com/)「How people build software · Github」上注冊(cè)「Sign Up」一個(gè)賬號(hào),注冊(cè)頁(yè)面如下:

此處比較簡(jiǎn)單,跟一般的網(wǎng)站注冊(cè)流程一樣,需要填用戶名、郵箱、密碼,需要注意的是填寫用戶名時(shí),請(qǐng)不要過于隨意,這個(gè)名字是你以后常用的用戶名,也強(qiáng)烈建議在各大社交賬號(hào)都使用同一個(gè)用戶名,這樣識(shí)別度較高,比如博客域名、Github、知乎等其他社交賬號(hào) ID 都統(tǒng)一處理,下面,來給自己取個(gè)好的用戶名吧。

填好用戶名、郵箱、密碼,接下來到這一步:

這個(gè)是什么意思呢?Github 有兩種,一種是公開,另一種是私有。前者是免費(fèi)的,所創(chuàng)建的項(xiàng)目是開放的,所有人都能看得到;后者是收費(fèi)的,企業(yè)用戶較多,通常情況下企業(yè)會(huì)使用 Github 的私有倉(cāng)庫(kù)托管自己的項(xiàng)目,這也是 Github

認(rèn)識(shí)Github

注冊(cè)成功之后會(huì)來到 Github 的主頁(yè)面:

新注冊(cè)用戶,由于沒有自己的項(xiàng)目,沒有關(guān)注的人,所以只有一個(gè)導(dǎo)航欄。

導(dǎo)航欄,從左到右依次是 Github 主頁(yè)按鈕、搜索框、PR、Issues、Gist(這些概念后面會(huì)講解)、消息提醒、創(chuàng)建項(xiàng)目按鈕、我的賬號(hào)相關(guān)。

我的 Timeline,這部分可以理解成微博,關(guān)注過的一些人的活動(dòng)會(huì)出現(xiàn)在這里,例如,你們關(guān)注我了,那么以后我 star、fork 了某些項(xiàng)目就會(huì)出現(xiàn)在你的時(shí)間線里。

我的項(xiàng)目,這部分就不用說了,如果你創(chuàng)建了項(xiàng)目,就里就可以快捷訪問。

Github主頁(yè)介紹

點(diǎn)擊下圖的 Your profile 菜單進(jìn)入到你的個(gè)人 Github 主頁(yè)。

以我的 Github 主頁(yè)為例:

圖片標(biāo)注的已經(jīng)很詳細(xì)了,當(dāng)然新的賬號(hào)沒有這么豐富,因?yàn)槭裁匆矝]做過,但是如果做全了基本上就會(huì)看到跟我一樣的效果。

設(shè)置你的Github

如果是新注冊(cè)的 Github 賬號(hào),是不是覺得很簡(jiǎn)陋?雖然沒有自己的項(xiàng)目,但是第一步起碼要完善自己的信息,點(diǎn)擊如下的 Settings 菜單:

通過設(shè)置頁(yè)面設(shè)置基本信息:

頭像、Name 建議要設(shè)置一個(gè)常用的,這兩個(gè)很有識(shí)別性,公開的郵箱也要設(shè)置一個(gè),這樣那些企業(yè)、獵頭就通過這個(gè)公開郵箱去聯(lián)系你,友情提醒:綁定郵箱最好是 Gmail 郵箱,其次是 foxmail、163 的郵箱,不推薦使用 QQ 郵箱。

Github基本概念

認(rèn)識(shí)了 Github 的基本面貌之后,接下來需要了解一些 Github 的基本概念,這些概念是你經(jīng)常會(huì)接觸并遇到的。

Repository 倉(cāng)庫(kù)的意思,即你的項(xiàng)目,如果你想在 Github 上開源一個(gè)項(xiàng)目,那就必須要新建一個(gè) Repository ,如果你開源的項(xiàng)目多了,你就會(huì)擁有多個(gè) Repositories 。

Issue 問題的意思,舉個(gè)例子,就是你開源了一個(gè)項(xiàng)目,別人發(fā)現(xiàn)你的項(xiàng)目中有bug,或者哪些地方做的不夠好,他就可以給你提個(gè) Issue ,即問題,提的問題多了,也就是 Issues ,然后你看到了這些問題就可以去逐個(gè)修復(fù),修復(fù)ok了就可以一個(gè)個(gè)的 Close 掉。

Star 這個(gè)好理解,就是給項(xiàng)目點(diǎn)贊,但是在 Github 上的點(diǎn)贊遠(yuǎn)比微博、知乎點(diǎn)贊難的多,如果你有一個(gè)項(xiàng)目獲得100個(gè)star都算很不容易了!

Fork 這個(gè)不好翻譯,如果實(shí)在要翻譯我把他翻譯成分叉,什么意思呢?你開源了一個(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)目,只不過這個(gè)項(xiàng)目是基于你的項(xiàng)目基礎(chǔ)(本質(zhì)上是在原有項(xiàng)目的基礎(chǔ)上新建了一個(gè)分支,分支的概念后面會(huì)在講解Git的時(shí)候說到),他就可以隨心所欲的去改進(jìn),但是絲毫不會(huì)影響原有項(xiàng)目的代碼與結(jié)構(gòu)。

Pull Request 發(fā)起請(qǐng)求,這個(gè)其實(shí)是基于 Fork 的,還是上面那個(gè)例子,如果別人在你基礎(chǔ)上做了改進(jìn),后來覺得改進(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è)試覺得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 有些時(shí)候你沒有項(xiàng)目可以開源,只是單純的想分享一些代碼片段,這個(gè)時(shí)候 Gist 就派上用場(chǎng)了!

創(chuàng)建自己的項(xiàng)目

點(diǎn)擊頂部導(dǎo)航欄的 + 可以快速創(chuàng)建一個(gè)項(xiàng)目,如下圖:

創(chuàng)建一個(gè)項(xiàng)目需要填寫如上的幾部分:項(xiàng)目名、項(xiàng)目描述與簡(jiǎn)單的介紹,你不付費(fèi)沒法選擇私有的,所以接著只能選擇 public 的,之后勾選「Initialize this repository with a README」,這樣你就擁有了你的第一個(gè) Github 項(xiàng)目:

可以看到這個(gè)項(xiàng)目只包含了一個(gè) README.md 文件,但是它已經(jīng)是一個(gè)完整的 Git 倉(cāng)庫(kù)了,你可以通過對(duì)它進(jìn)行一些操作,如watch、star、fork,還可以 clone 或者下載下來。

這里提一下 README.md ,Github 上所有關(guān)于項(xiàng)目的詳細(xì)介紹以及 Wiki 都是基于 Markdown 的,甚至之后在 Github 上搭建博客,寫博客也是如此,所以如果還不懂 Markdown 語(yǔ)法的,建議先去學(xué)習(xí)下。推薦一篇學(xué)習(xí) Markdown 的文章給你們:

獻(xiàn)給寫作者的 Markdown 新手指南

總結(jié)

本節(jié)課主要對(duì)Github 的基本概念進(jìn)行了簡(jiǎn)單的講解,此時(shí)便已經(jīng)正式加入 Github 這個(gè)大家庭了,接下來的課程會(huì)有更深入的文章介紹 Git、介紹對(duì)項(xiàng)目的常用操作、介紹如何給開源項(xiàng)目提交代碼、介紹如何協(xié)同合作等。

版本控制的基礎(chǔ) Git

Git速成

什么是Git

通過前面的學(xué)習(xí)了解到GitHub 是基于 Git 的,所以也就意味著 Git 是基礎(chǔ),如果不會(huì)使用 Git ,那么接下來會(huì)完全繼續(xù)不下去,因此,今天的課程就來說說 Git ,本課程先介紹一些最基本的、最常用的一些 Git 知識(shí),爭(zhēng)取讓你迅速掌握 Git 。

  • 什么是 Git?
  • Git 是 Linux 發(fā)明者 Linus 開發(fā)的一款新時(shí)代的版本控制系統(tǒng),那么到底什么是版本控制系統(tǒng)呢?網(wǎng)上各種詳細(xì)的介紹,大多枯燥乏味,對(duì)于新手很難理解,這里只舉幾個(gè)例子來幫助大家理解。

    熟悉編程的人都知道,在軟件開發(fā)中源代碼是最重要的,那么對(duì)源代碼的管理也就變得更加重要了,以下幾種情況在開發(fā)中最為常見:

    • 在開發(fā)程序時(shí),為了防止代碼丟失,需要在本地機(jī)器與遠(yuǎn)程服務(wù)器各存放一份,并且還需要有一套機(jī)制使本地可以與遠(yuǎn)程同步;
    • 開發(fā)中通常是幾個(gè)人做同一個(gè)項(xiàng)目,要對(duì)同一份代碼做更改,這個(gè)時(shí)候既需要大家互不影響,又需要各自可以同步別人的代碼;
    • 開發(fā)的過程中免不了有bug,有時(shí)候剛發(fā)布的功能就出現(xiàn)了嚴(yán)重的bug,這個(gè)時(shí)候需要緊急對(duì)代碼進(jìn)行還原;
    • 隨著版本迭代的增多,作為開發(fā)者需要清楚的知道每一個(gè)歷史版本的代碼更改記錄,甚至知道每個(gè)人歷史提交代碼的情況。

    以上的這些情況,都是版本控制系統(tǒng)可以解決的問題。版本控制實(shí)際上就是一種記錄一個(gè)或若干文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng),對(duì)于軟件開發(fā)領(lǐng)域來說版本控制是最重要的環(huán)節(jié),而 Git 毫無疑問是當(dāng)下最流行、最好用的版本控制系統(tǒng)。

    2.Git 安裝

    Git 是一個(gè)版本控制系統(tǒng),也可以理解為一個(gè)工具,跟 Java 類似,使用之前必須先進(jìn)行下載安裝, Mac 筆記本上其實(shí)系統(tǒng)自帶了 Git ,不過這里統(tǒng)一提供各平臺(tái)的安裝方式,這部分就不過多介紹,相信大家可以搞定。

    • Mac:sourceforge.net/projects/gi…
    • Windows:git-for-windows.github.io/
    • Linux:apt-get install git

    3.如何學(xué)習(xí) Git

    安裝好 Git 之后,怎么學(xué)習(xí)是個(gè)問題,其實(shí)關(guān)于 Git 有很多圖形化的軟件可以操作,這里推薦大家使用命令行開始學(xué)習(xí),如果你沒接觸過命令行,開始可能會(huì)有所抵觸,但是大量實(shí)踐證明,只有一開始學(xué)習(xí)命令行,才能讓你對(duì) Git 的每一步操作有深刻的理解,而在熟練掌握之后,使用任何的圖形化的軟件都可以去操作。

    Git命令列表

    怎么判斷 Git 有沒有安裝成功?在命令行里輸入 git ,如果出現(xiàn)以下提示證明你已經(jīng)安裝成功了。我的運(yùn)行環(huán)境是在window上,如果是在mac上,道理是一樣的

    Git 所有的操作命令開頭都要以 git 開頭,上面列舉了最常用的一些 Git 命令,后面有一句英文解釋這個(gè)命令的意義,都是比較簡(jiǎn)單的詞匯,不妨試著翻譯一下,但是如果沒有實(shí)際操作仍然不好理解,下面就以一個(gè)實(shí)際的操作來介紹一些常用命令的含義。

    Git常用命令舉例

    第一步,需要新建一個(gè)文件夾,在文件夾里新建一個(gè)文件(我是用 Linux 命令新建的,Windows用戶可以自己手動(dòng)新建)

    • mkdir test (創(chuàng)建文件夾test)
    • cd test (切換到test目錄)
    • touch a.md (新建a.md文件)

    注意:在進(jìn)行任何 Git 操作之前,都要先切換到 Git 倉(cāng)庫(kù)目錄,也就是要先切換到項(xiàng)目的文件夾目錄下。

    可以是用cmd下cd到目錄下,

    也可以是圖形操作到項(xiàng)目目錄下,右鍵git bash here

    最終回打開另外一個(gè)命令窗口:

    這個(gè)時(shí)候隨便操作一個(gè)命令,比如 git status ,可以看到如下提示(不要糾結(jié)顏色,配置與主題不一樣而已):

    意思是當(dāng)前目錄還不是一個(gè) Git 倉(cāng)庫(kù)。

    1.git init

    這個(gè)時(shí)候就要用到第一個(gè)命令了,代表初始化 git 倉(cāng)庫(kù),輸入 git init 之后會(huì)提示:

    可以看到初始化成功了,至此 test 目錄已經(jīng)是一個(gè) git 倉(cāng)庫(kù)了。

    2.git status

    接下來輸入 git status 命令,會(huì)有如下提示:

    默認(rèn)就直接在 master 分支,關(guān)于分支的概念后面會(huì)提,這時(shí)最主要的是提示 a.md 文件 Untracked files ,就是說 a.md 文件沒有被跟蹤,還沒有提交到 git 倉(cāng)庫(kù)里,提示可以使用 git add 去操作想要提交的文件。

    git status 這個(gè)命令顧名思義就是查看狀態(tài),這是一個(gè)使用最頻繁的命令,建議大家可以經(jīng)常輸入這個(gè)命令,來查看當(dāng)前 git 倉(cāng)庫(kù)的一些狀態(tài)。

    3.git add

    上面提示 a.md 文件還沒有提交到 git 倉(cāng)庫(kù)里,這個(gè)時(shí)候我們可以隨便編輯下 a.md 文件,然后輸入 git add a.md ,然后再輸入 git status :

    此時(shí)提示以下文件 Changes to be committed , 意思就是 a.md 文件等待被提交,當(dāng)然你可以使用 git rm --cached 這個(gè)命令去移除這個(gè)緩存。

    4.git commit

    接著我們輸入 git commit -m 'first commit' ,這個(gè)命令什么意思呢? commit 是提交的意思,-m 代表是提交信息,執(zhí)行了以上命令代表我們已經(jīng)正式進(jìn)行了第一次提交。

    這個(gè)時(shí)候再輸入 git status ,會(huì)提示 nothing to commit。

    5.git log

    此時(shí)輸入 git log 命令,會(huì)顯示如下內(nèi)容:

    git log 命令可以查看所有產(chǎn)生的 commit 記錄,從上圖中可以看到已經(jīng)產(chǎn)生了一條 commit 記錄,而提交時(shí)候的附帶信息叫 'first commit' 。

    git log可以做很多事,比如查看文件的修改信息

    git log -s --pretty=oneline filename 查看文件名為filename的提交記錄

    $ git log -s --pretty=oneline yangzai.txt d60e15f257d8d053ae1ef3317ac10bfcc1224dda yangzai3 ce5eb844870a8632bd5656550cb5130537acb245 yangzai2 4ac92c649ef2b80c118541a51745e7de174b670c 沖突測(cè)試 29d341e68865438bccdc6c4ac1b3296bffb356fc oldsyang-init復(fù)制代碼

    如上所述,每一行最前面的那一長(zhǎng)串?dāng)?shù)字就是每次提交形成的哈希值,然后就可以根據(jù)這個(gè)哈希值,配置git show命令就可以查看修改的具體信息

    $ git show 4ac92c649ef2b80c118541a51745e7de174b670c commit 4ac92c649ef2b80c118541a51745e7de174b670c Author: liuguniang <liuguniang1015@foxmail.com> Date: Mon Aug 7 19:08:16 2016 +0800沖突測(cè)試diff --git a/yangzai.txt b/yangzai.txt index 190a180..8d38505 100644 --- a/yangzai.txt +++ b/yangzai.txt @@ -1 +1 @@ -123 +456復(fù)制代碼

    6.git add & git commit

    看到這里估計(jì)很多人會(huì)有疑問,我想要提交直接進(jìn)行 commit 不就行了么,為什么先要再 add 一次呢?首先 git add 是先把改動(dòng)添加到一個(gè)「暫存區(qū)」,你可以理解成是一個(gè)緩存區(qū)域,臨時(shí)保存你的改動(dòng),而 git commit 才是最后真正的提交。這樣做的好處就是防止誤提交,當(dāng)然也可以將這兩步合并成一步,后面再介紹,建議新手先按部就班的一步步來。將兩個(gè)步驟合并為:git commit -am 'init'

    7.git branch

    branch 即分支的意思,分支的概念很重要,尤其是團(tuán)隊(duì)協(xié)作的時(shí)候,假設(shè)兩個(gè)人都在做同一個(gè)項(xiàng)目,這個(gè)時(shí)候分支就是保證兩人協(xié)同合作的最大利器。舉個(gè)例子,A, B倆人在做同一個(gè)項(xiàng)目,但是不同模塊,這個(gè)時(shí)候A新建了一個(gè)分支叫a, B新建了一個(gè)分支叫b,這樣A、B對(duì)代碼做的所有改動(dòng)都在各自的分支下,互不影響,最終,各自的模塊都完成后,可以把分支再合并起來。

    執(zhí)行 git init 初始化git倉(cāng)庫(kù)之后會(huì)默認(rèn)生成一個(gè)主分支 master ,也是你所在的默認(rèn)分支,也基本是實(shí)際開發(fā)正式環(huán)境下的分支,一般情況下 master 分支不會(huì)輕易直接在上面操作的,可以輸入 git branch 查看下當(dāng)前分支情況:

    如果想在此基礎(chǔ)上新建一個(gè)分支,只要執(zhí)行 git branch a 就新建了一個(gè)名字叫 a 的分支,這時(shí)候分支 a 跟分支 master 是一模一樣的內(nèi)容,再輸入 git branch 查看的當(dāng)前分支情況:

    從上圖可以看到 master 分支前有個(gè) * 號(hào),即雖然新建了一個(gè) a 的分支,但是當(dāng)前所在的分支還是在 master 上,如果想在 a 分支上進(jìn)行開發(fā),首先要切換到 a 分支上,執(zhí)行 git checkout a 命令,然后再輸入 git branch 查看下分支情況:

    可以看到當(dāng)前所在分支已經(jīng)是a了,這個(gè)時(shí)候 A 技術(shù)人員就可以盡情的在新建的a分支去進(jìn)行代碼改動(dòng)了。

    可能有些技術(shù)人員會(huì)覺得先新建再切換會(huì)有些麻煩,下面就提供給大家一個(gè)簡(jiǎn)便的命令:

    git checkout -b a

    這個(gè)命令的意思就是新建一個(gè)a分支,并且自動(dòng)切換到a分支。

    8.git merge

    A技術(shù)人員在a分支下代碼寫的不亦樂乎,終于他的模塊完成了,并且測(cè)試也都通過了,準(zhǔn)備要上線,這個(gè)時(shí)候就需要把他的代碼合并到主分支master上,然后發(fā)布。git merge 就是合并分支用到的命令,針對(duì)上述情況,需要完成兩個(gè)步驟,第一步是切換到 master 分支,如果已經(jīng)在了就不用切換了,第二步執(zhí)行 git merge a ,意思是把a(bǔ)分支的代碼合并到master分支,不出意外,這個(gè)時(shí)候a分支的代碼就順利合并到 master 分支上了。為什么說不出意外呢?因?yàn)檫@個(gè)時(shí)候可能會(huì)有沖突而造成合并失敗,留個(gè)包袱,后面進(jìn)階的時(shí)候再講。

    9.git branch -d

    既然有新建分支,那么一定會(huì)有刪除分支,假如這個(gè)分支新建錯(cuò)了,或者a分支的代碼已經(jīng)順利合并到了 master 分支上,那么a分支沒用了,需要?jiǎng)h除,這個(gè)時(shí)候執(zhí)行 git branch -d a 就可以把a(bǔ)分支刪除了。

    10.git branch -D

    有些時(shí)候可能會(huì)刪除失敗,比如如果a分支的代碼還沒有合并到master,執(zhí)行 git branch -d a 是刪除不了的,會(huì)提示a分支還有未合并的代碼,但是如果一定要?jiǎng)h除,那就執(zhí)行 git branch -D a 就可以強(qiáng)制刪除a分支。

    11.git tag

    客戶端開發(fā)的時(shí)候經(jīng)常有版本的概念,比如v1.0、v1.1等,不同的版本對(duì)應(yīng)不同的代碼,所以一般要給代碼加上標(biāo)簽,這樣假設(shè)v1.1版本出了一個(gè)新bug,但是又不清楚v1.0是不是有這個(gè)bug,有了標(biāo)簽就可以順利切換到v1.0的代碼,重新打包測(cè)試。

    新建一個(gè)標(biāo)簽很簡(jiǎn)單,比如 git tag v1.0 就代表在當(dāng)前代碼狀態(tài)下新建了一個(gè)v1.0的標(biāo)簽,輸入 git tag 可以查看歷史 tag 記錄。

    從上圖可以看出新建了兩個(gè)標(biāo)簽 v1.0、v1.1。

    想要切換到某個(gè)tag怎么辦?也很簡(jiǎn)單,執(zhí)行 git checkout v1.0 命令,就順利切換到 v1.0 tag的代碼狀態(tài)了。

    12 git rm

    如果對(duì)已經(jīng)提交的數(shù)據(jù)文件,想要徹底排除,并且以后都不再提交,操作如下:

  • 使用git rm 文件路勁(這樣的話會(huì)同時(shí)刪除本地磁盤上的文件,如果不想刪除物理文件請(qǐng)執(zhí)行,git rm --cache 文件路徑)
  • git add .
  • git commit -m '描述'
  • 將文件名或者文件夾添加到 .gitignore文件里邊去
  • 以上是一些最基本的Git操作,并且是在本地環(huán)境進(jìn)行操作的,完全沒有涉及到遠(yuǎn)程倉(cāng)庫(kù),接下來的課程將以遠(yuǎn)程 GitHub 倉(cāng)庫(kù)為例,講解本地如何與遠(yuǎn)程倉(cāng)庫(kù)一起同步協(xié)作,另外,本節(jié)課講述的是最基礎(chǔ)最簡(jiǎn)單的Git操作,后續(xù)會(huì)講解一些Git的高階以及一些Git的酷炫操作。

    向Github提交代碼

    什么是SSH?

    通過課程「Git速成」的講解,相信大家已經(jīng)熟悉了本地 Git 倉(cāng)庫(kù)的基本操作,本節(jié)課來介紹下如何與遠(yuǎn)程倉(cāng)庫(kù)一起協(xié)作,向 GitHub 上提交你的第一行代碼!

    擁有了一個(gè) GitHub 賬號(hào)之后,就可以自由的 clone 或者下載其他項(xiàng)目,也可以創(chuàng)建自己的項(xiàng)目,但是無法提交代碼。仔細(xì)想想也知道,如果可以隨意提交代碼,那么 GitHub 上的項(xiàng)目豈不亂套了,所以提交代碼之前一定是需要某種授權(quán)的,而 GitHub 上一般都是基于 SSH 授權(quán)的。

    那么什么是 SSH 呢?

    簡(jiǎn)單點(diǎn)說,SSH是一種網(wǎng)絡(luò)協(xié)議,用于計(jì)算機(jī)之間的加密登錄。目前是每一臺(tái) Linux 電腦的標(biāo)準(zhǔn)配置。而大多數(shù) Git 服務(wù)器都會(huì)選擇使用 SSH 公鑰來進(jìn)行授權(quán),所以想要在 GitHub 提交代碼的第一步就是要先添加 SSH key 配置。

    生成SSH Key

    Linux 與 Mac 都是默認(rèn)安裝了 SSH ,而 Windows 系統(tǒng)安裝了 Git Bash 應(yīng)該也是帶了 SSH 的。大家可以在終端(win下在 Git Bash 里)輸入 ssh 如果出現(xiàn)以下提示證明你本機(jī)已經(jīng)安裝 SSH, 否則請(qǐng)搜索自行安裝下。

    接下來輸入 ssh-keygen -t rsa 命名,意思是指定 rsa 算法生成密鑰,接著連續(xù)三個(gè)回車鍵(不需要輸入密碼)就會(huì)生成兩個(gè)文件 id_rsa 和 id_rsa.pub ,id_rsa 是密鑰,id_rsa.pub 是公鑰。這兩個(gè)文件默認(rèn)分別在如下目錄里生成:

    Linux/Mac 系統(tǒng) 在 ~/.ssh 下,win系統(tǒng)在 /c/Documents and Settings/username/.ssh 下,都是隱藏文件,相信你們有辦法查看的。

    接下來要做的是把 id_rsa.pub 的內(nèi)容添加到 GitHub 上,這樣本地的 id_rsa 密鑰跟 GitHub 上的 id_rsa.pub 公鑰進(jìn)行配對(duì),授權(quán)成功才可以提交代碼。

    GitHub上添加SSH Key

    首先在 GitHub 上的設(shè)置頁(yè)面,點(diǎn)擊最左側(cè) SSH and GPG keys :

    然后點(diǎn)擊右上角的 New SSH key 按鈕:

    需要做的只是在 Key 那欄把 id_rsa.pub 公鑰文件里的內(nèi)容復(fù)制粘貼進(jìn)去就可以了(上述示例為了安全粘貼的公鑰是無效的),Title 欄不需要填寫,點(diǎn)擊 Add SSH key 按鈕就ok了。

    這里提醒下,怎么查看 id_rsa.pub 文件的內(nèi)容?

    Linux/Mac 用戶執(zhí)行以下命令:

    cd ~/.ssh cat id_rsa.pub Windows用戶,設(shè)置顯示隱藏文件,可以使用 EditPlus , Sublime或者vscode(本人非常推薦vscode,功能非常強(qiáng)大,微軟出品) 打開復(fù)制就行了。

    SSH key 添加成功之后,輸入 ssh -T git@github.com 進(jìn)行測(cè)試,如果出現(xiàn)以下提示證明添加成功了

    Push & Pull 命令介紹

    在提交代碼之前首先了解兩個(gè)命令,這兩個(gè)命令需要與遠(yuǎn)程倉(cāng)庫(kù)配合。

    Push :直譯過來就是「推」的意思,如果你本地代碼有更新,那么就需要把本地代碼推到遠(yuǎn)程倉(cāng)庫(kù),這樣本地倉(cāng)庫(kù)跟遠(yuǎn)程倉(cāng)庫(kù)就可以保持同步了。

    代碼示例: git push origin master

    意思就是把本地代碼推到遠(yuǎn)程 master 分支。

    Pull:直譯過來就是「拉」的意思,如果別人提交代碼到遠(yuǎn)程倉(cāng)庫(kù),這個(gè)時(shí)候你需要把遠(yuǎn)程倉(cāng)庫(kù)的最新代碼拉下來,然后保證兩端代碼的同步。

    代碼示例: git pull origin master

    意思就是把遠(yuǎn)程最新的代碼更新到本地。一般在 push 之前都會(huì)先 pull ,這樣不容易沖突(最好強(qiáng)制要求自己這樣)。

    提交代碼

    添加 SSH key 成功后,就有權(quán)限向 GitHub 提交自己的項(xiàng)目代碼了,提交代碼有兩種方法:

    (1)Clone自己的項(xiàng)目

    此處以我在 GitHub 上創(chuàng)建的 test 項(xiàng)目為例,執(zhí)行如下命令:

    git clone git@github.com:oldsyang/newtest.git

    這樣就把 newtest 項(xiàng)目 clone 到了本地,可以把 clone 命令理解為高級(jí)的復(fù)制,這個(gè)時(shí)候該項(xiàng)目本身就已經(jīng)是一個(gè)git 倉(cāng)庫(kù)了,不需要執(zhí)行 git init 進(jìn)行初始化,并且已經(jīng)關(guān)聯(lián)好了遠(yuǎn)程倉(cāng)庫(kù),只需要在這個(gè) test 目錄下任意修改或者添加文件,然后進(jìn)行 commit ,之后就可以執(zhí)行:

    git push origin master

    進(jìn)行代碼提交,這種是最簡(jiǎn)單方便的一種方式。

    怎么獲取項(xiàng)目的倉(cāng)庫(kù)地址呢?如下圖:

    (2)關(guān)聯(lián)本地已有項(xiàng)目

    如果本地已經(jīng)有一個(gè)完整的 git 倉(cāng)庫(kù),并且已經(jīng)進(jìn)行了多次 commit ,這個(gè)時(shí)候第一種方法就不適合了。

    假設(shè)本地有個(gè) test2 的項(xiàng)目,需要在 GitHub 上建一個(gè) test 的項(xiàng)目,然后把本地 test2 上的所有代碼 commit 記錄提交到 GitHub 上的 test 項(xiàng)目。

    第一步就是在 GitHub 上建一個(gè) test 項(xiàng)目,這個(gè)想必大家都會(huì)了,就不多講了。

    第二步把本地 test2 項(xiàng)目與 GitHub 上的 test 項(xiàng)目進(jìn)行關(guān)聯(lián),切換到 test2 目錄,執(zhí)行如下命令:

    git remote add origin git@github.com:oldsyang/newtest.git

    意思是添加一個(gè)遠(yuǎn)程倉(cāng)庫(kù),地址是 git@github.com:oldsyang/newtest.git ,而 origin 是給這個(gè)項(xiàng)目的遠(yuǎn)程倉(cāng)庫(kù)起的名字(可以隨便取),只不過大家公認(rèn)的只有一個(gè)遠(yuǎn)程倉(cāng)庫(kù)時(shí)名字就是 origin ,為什么要給遠(yuǎn)程倉(cāng)庫(kù)取名字?因?yàn)槲覀兛赡芤粋€(gè)項(xiàng)目有多個(gè)遠(yuǎn)程倉(cāng)庫(kù),比如 GitHub 一個(gè),比如公司一個(gè),這樣的話提交到不同的遠(yuǎn)程倉(cāng)庫(kù)就需要指定不同的倉(cāng)庫(kù)名字。

    查看當(dāng)前項(xiàng)目有哪些遠(yuǎn)程倉(cāng)庫(kù)可以執(zhí)行如下命令:

    git remote -v

    接下來,本地的倉(cāng)庫(kù)就可以向遠(yuǎn)程倉(cāng)庫(kù)進(jìn)行代碼提交了:

    git push origin master

    此命令就是默認(rèn)向 GitHub 上的 newtest 目錄提交了代碼,這個(gè)代碼是在 master 分支。當(dāng)然你可以提交到指定的分支,這個(gè)之后的文章再詳細(xì)講解。

    注意:在提交代碼之前先要設(shè)置下自己的用戶名與郵箱,這些信息會(huì)出現(xiàn)在所有的 commit 記錄里,執(zhí)行以下代碼就可以設(shè)置:

    git config —global user.name "newtest"

    git config —global user.email "545329979@qq.com"

    總結(jié)

    通過本課時(shí)的介紹,終于可以成功的向 GitHub 提交代碼了,但是相信大家還有很多疑問,比如關(guān)于分支的理解與使用,比如 Git 的其他一些有用的配置,比如怎么向一些開源項(xiàng)目貢獻(xiàn)代碼,發(fā)起 Pull Request 等,之后的系列文章會(huì)逐一進(jìn)行介紹。

    Git進(jìn)階

    用戶名和郵箱

    通過前面的學(xué)習(xí),相信大家已經(jīng)可以使用 Git 管理自己的代碼了,但這些還遠(yuǎn)遠(yuǎn)不夠,關(guān)于Git還有很多知識(shí)與技巧,接下來就給大家介紹一些 Git 進(jìn)階的知識(shí)。

    在 GitHub 上的每一次commit都會(huì)產(chǎn)生一條log,這條log標(biāo)記了提交人的姓名與郵箱,目的是便于其他人查看與聯(lián)系提交人,因此,進(jìn)行提交代碼的第一步就是要設(shè)置自己的用戶名與郵箱。執(zhí)行以下命令:

    git config --global user.name "oldsyang"

    git config —global user.email "545329979@qq.com"

    以上進(jìn)行了全局配置,如果某一個(gè)項(xiàng)目想要使用特定的郵箱,那么只需切換到相應(yīng)的項(xiàng)目,將上述代碼中的 --global 參數(shù)去除,再重新執(zhí)行一遍就可以了。

    注意:在 GitHub 上的每次提交理論上都會(huì)在主頁(yè)的下方產(chǎn)生一條綠色小方塊的記錄,如果確認(rèn)提交后,沒有綠色方塊顯示,那一定是所提交代碼配置的郵箱與當(dāng)前 GitHub 上的郵箱不一致,GitHub 上的郵箱可以到 Setting -> Emails里查看。

    alias

    一些Git命令操作很頻繁,例如:

    git commit git checkout git branch git status 復(fù)制代碼

    對(duì)于這些頻繁的操作,每次都要輸入完全確實(shí)有些麻煩,有沒有一種簡(jiǎn)單的縮寫輸入呢?比如對(duì)應(yīng)的直接輸入以下:

    git c git co git br git s 復(fù)制代碼

    是不是很簡(jiǎn)單快捷?這個(gè)時(shí)候就用到alias配置,翻譯過來就是別名的意思,輸入以下命令就可以直接滿足以上的需求。

    git config --global alias.co checkout # 別名 git config --global alias.ci commit git config --global alias.st status git config --global alias.br branch 復(fù)制代碼

    當(dāng)然以上別名不是固定的,可以根據(jù)自己的習(xí)慣去定制,除此之外還可以設(shè)置組合,比如:

    git config --global alias.psm 'push origin master' git config --global alias.plm 'pull origin master' 復(fù)制代碼

    之后經(jīng)常用到的git push origin mastergit pull origin master ,直接使用 git psmgit plm 就可以代替。

    這里給大家推薦一個(gè)很強(qiáng)大的 alias 命令,當(dāng)輸入 git log 查看日志

    如果輸入

    git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative 復(fù)制代碼

    日志就會(huì)變的更有趣

    其他配置

    當(dāng)然還有一些其他有用的配置,默認(rèn)情況下 git 用的編輯器是 vi ,如果不喜歡可以改成其他編輯器,比如 vim 。

    git config --global core.editor "vim" # 設(shè)置Editor使用vim

    如果喜歡其他編輯器可自行搜索配置,前提是本機(jī)有安裝。

    有些人會(huì)疑問怎樣才能讓終端顯示各種顏色,輸入如下命令即可:

    git config --global color.ui true

    還有些其他的配置如:

    git config --global core.quotepath false # 設(shè)置顯示中文文件名

    以上基本的配置就差不多了,默認(rèn)這些配置都在 ~/.gitconfig 文件下的,你可以找到這個(gè)文件查看自己的配置,也可以輸入 git config -l 命令查看。

    git ls-tree head #查看當(dāng)前版本庫(kù)里的文件樹

    git ls-files #查看緩存區(qū)和版本庫(kù)里的所有文件

    diff

    diff命令是很常用的,在開發(fā)過程中,大家會(huì)經(jīng)常做一些代碼改動(dòng),但時(shí)間久了難免會(huì)忘記做過哪些改動(dòng),在提交之前需要確認(rèn)下,這個(gè)時(shí)候就可以用diff來查看到底做了哪些改動(dòng),例如,有一個(gè) a.md 的文件,做了一些改動(dòng),當(dāng)輸入 git diff 時(shí),就會(huì)看到如下內(nèi)容:

    紅色的部分前面有個(gè) - 代表刪除的內(nèi)容,綠色的部分前面有個(gè) + 代表增加的內(nèi)容,從這里可以一目了然的知道自己到底對(duì)這個(gè)文件做了哪些改動(dòng)。

    需要注意的是,直接輸入 git diff 只能比較當(dāng)前文件和暫存區(qū)文件差異,什么是暫存區(qū)?就是還沒有執(zhí)行 git add 的文件。

    當(dāng)然除了與暫存區(qū)做比較之外,他還可以有其他用法,如比較兩次 commit 之間的差異,比較兩個(gè)分支之間的差異,比較暫存區(qū)和版本庫(kù)之間的差異等,具體用法如下:

    • git diff <id2> # 比較兩次提交之間的差異
    • git diff .. # 在兩個(gè)分支之間比較
    • git diff --staged # 比較暫存區(qū)和版本庫(kù)差異

    checkout

    checkout 一般用作切換分支使用,比如切換到 develop 分支,可以執(zhí)行:

    git checkout develop

    但是 checkout 不只用作切換分支,也可以用來切換tag,切換到某次commit,如:git checkout v1.0

    git checkout ffd9f2dd68f1eb21d36cee50dbdd504e95d9c8f7 # 后面的長(zhǎng)串是commit_id,是每次commit的SHA1值,可以根據(jù) git log 看到。

    除了有“切換”的作用,checkout 還可以用作撤銷,例如,假設(shè)在一個(gè)分支開發(fā)一個(gè)功能,寫到一半時(shí)需求變化了,而且是大變化,之前寫的代碼完全不能用,目前還沒有 git add 進(jìn)暫存區(qū),這個(gè)時(shí)候很簡(jiǎn)單的一個(gè)操作就可以直接把原文件還原:

    git checkout a.md

    注意,checkout 命令只能撤銷還沒有 add 進(jìn)暫存區(qū)的文件。

    stash

    設(shè)想一個(gè)場(chǎng)景,假設(shè)我們正在一個(gè)新的分支做新的功能,這個(gè)時(shí)候突然有一個(gè)緊急的bug需要修復(fù),而且修復(fù)完之后需要立即發(fā)布。技術(shù)人員可能會(huì)想先把剛寫的一點(diǎn)代碼進(jìn)行提交就行了,這樣做理論上是沒問題的,但是原則上每次的 commit 都要有實(shí)際的意義,目前代碼只是寫了一半,是不建議 commit 的,那么有沒有一種比較好的辦法,可以暫時(shí)切到其他分支,修復(fù)完bug再切換回來,并且代碼也能保留的?

    首先,暫存 commit 代碼:

    此時(shí), stash 命令就大有用處了,前提是當(dāng)前代碼沒有進(jìn)行 commit ,執(zhí)行了 add 也沒關(guān)系,首先執(zhí)行命令:git stash

    意思就是把當(dāng)前分支所有沒有 commit 的代碼先暫存起來,這個(gè)時(shí)候再執(zhí)行 git status 命令,會(huì)發(fā)現(xiàn)當(dāng)前分支很干凈,幾乎看不到任何改動(dòng),自己代碼的改動(dòng)也看不見,但其實(shí)是暫存起來了。

    執(zhí)行命令 git stash list 會(huì)發(fā)現(xiàn)此時(shí)暫存區(qū)已經(jīng)有了一條記錄。

    其次:切換分支,代碼還原:

    這個(gè)時(shí)候就可以切換到其他分支,把bug修復(fù)好,然后發(fā)布。一切都解決了,再切換回來繼續(xù)之前沒做完的功能,但之前的代碼怎樣還原呢?

    執(zhí)行命令 git stash apply 會(huì)發(fā)現(xiàn)之前的代碼全部回來了,就好像一切都沒發(fā)生過一樣。

    最后,刪除暫存區(qū)記錄:

    接下來最好把暫存區(qū)的stash 記錄刪除,執(zhí)行:git stash drop 就把最近一條的 stash 記錄刪除了。

    代碼還原其實(shí)還有更簡(jiǎn)便的,可以執(zhí)行:git stash pop 來代替 apply 命令,popapply 的唯一區(qū)別就是 pop 不但會(huì)幫將代碼還原,還會(huì)自動(dòng)幫將本條 stash 記錄刪除,不需要手動(dòng) drop 了,為了驗(yàn)證你可以執(zhí)行 git stash list 命令來確認(rèn)是不是已經(jīng)沒有記錄了。

    最后還有一個(gè)命令介紹下:

    git stash clear

    就是清空所有暫存區(qū)的記錄,drop 是只刪除一條,當(dāng)然后面可以跟 stash_id 參數(shù)來刪除指定的某條記錄,沒有參數(shù)就是刪除最近的,而 clear 是清空。

    reset

    git reset HEAD filename 撤銷文件名filename的所有修改(還沒有commit的,只是add進(jìn)暫存區(qū)的)

    大家肯定在開發(fā)的時(shí)候,都遇到過想全部回滾到某一個(gè)節(jié)點(diǎn),丟棄掉現(xiàn)有的修改,這就reset大有用處,先看一張圖

    從圖中可以看出,回滾有深淺三種狀態(tài),可以回到不同的階段

    比如,現(xiàn)在我已經(jīng)有三次提交記錄了:

    先查看git log: ```bash $ git log commit 9f0dc164fad0776ce7ad80a2a064a9840877bf75 Author: oldsyang <545329979@qq.com> Date: Mon Aug 7 10:34:18 2016 +0800threecommit 108cee428009a066fde2f88c79f797da07e51080 Author: oldsyang <545329979@qq.com> Date: Mon Aug 7 10:33:46 2016 +0800secondcommit f41d81394a6b524aa35215da926da30d42b64add Author: oldsyang <545329979@qq.com> Date: Mon Aug 7 10:33:25 2016 +0800init 復(fù)制代碼

    現(xiàn)在的需求是回滾到第二次提交的狀態(tài)(second),找到第二次提交的哈希值

    git reset --hard 108cee428009a066fde2f88c79f797da07e51080 復(fù)制代碼

    在執(zhí)行g(shù)it log或者git ls-files,就發(fā)現(xiàn)回滾到第二次的提交的最原始狀態(tài)(相當(dāng)于是第一次提交完成后的狀態(tài))

    那如果現(xiàn)在還想回到three狀態(tài)?

    先執(zhí)行 git reflog

    $ git reflog 3242www HEAD@{1}: reset: moving to 9f0dc164fad0776ce7ad80a2a064a9840877 bf75 9f0dc16 HEAD@{2}: commit: three 108cee4 HEAD@{3}: commit: second f41d813 HEAD@{4}: commit (initial): init 復(fù)制代碼

    再執(zhí)行 git reset --hard 9f0dc16

    $ git reset 9f0dc16 Unstaged changes after reset: 復(fù)制代碼

    這樣就整個(gè)又回到之前的狀態(tài)

    merge & rebase

    大家都知道 merge 分支是合并的意思,當(dāng)在一個(gè) featureA 分支開發(fā)完一個(gè)功能需要合并到主分支 master 上時(shí),只需要進(jìn)行如下操作:

    git checkout master git merge featureA 復(fù)制代碼

    其實(shí) rebase 命令也是合并的意思,上面的需求同樣可以進(jìn)行如下操作:

    git checkout master git rebase featureA rebasemerge 的區(qū)別?

    可以理解成有兩個(gè)書架,你需要把兩個(gè)書架的書整理到一起,第一種做法是 merge ,簡(jiǎn)單粗暴,直接空出一塊地方把另一個(gè)書架的書全部放進(jìn)去,這種做法你可以知道哪些書是來自另一個(gè)書架;第二種做法就是 rebase ,會(huì)對(duì)兩個(gè)書架的書先進(jìn)行比較,按照購(gòu)書的時(shí)間重新排序,然后重新放置好,這樣做的好處就是合并之后的書架看起來邏輯清晰,但是很難清楚的知道哪些書來自哪個(gè)書架。

    只能說各有好處的,不同的團(tuán)隊(duì)根據(jù)不同的需要以及不同的習(xí)慣來選擇就好。

    解決沖突

    假設(shè)這樣一個(gè)場(chǎng)景,A和B兩位技術(shù)人員各自建了兩個(gè)分支來開發(fā)不同的功能,大部分情況下都會(huì)盡量互不干擾的,但是有一個(gè)需求A需要改動(dòng)一個(gè)基礎(chǔ)庫(kù)中的一個(gè)類的方法,不巧B這個(gè)時(shí)候由于業(yè)務(wù)需要也改動(dòng)了基礎(chǔ)庫(kù)的這個(gè)方法,因?yàn)檫@種情況比較特殊,A和B都認(rèn)為不會(huì)對(duì)地方造成影響,等兩人各自把功能做完了,需要合并的到主分支 master 的時(shí)候,假設(shè)先合并A的分支,這個(gè)時(shí)候沒問題,之后再繼續(xù)合并B的分支,這個(gè)時(shí)候就會(huì)有沖突了,因?yàn)锳和B兩個(gè)人同時(shí)更改了同一個(gè)地方,Git 本身不能判斷誰(shuí)更改的對(duì),但是這個(gè)時(shí)候他會(huì)智能的提示有 conflicts ,需要手動(dòng)解決這個(gè)沖突之后再重新進(jìn)行一次 commit 提交。接下來,隨便在項(xiàng)目中制造一個(gè)沖突做演示:

    上圖就是沖突的示例,沖突的地方由 ==== 分出了上下兩個(gè)部分,上半部分 HEAD 是當(dāng)前所在分支的代碼,下半部分是 baidu_activity 分支的代碼,從圖中可以看出 HEAD 對(duì) gradle 插件進(jìn)行了升級(jí),同時(shí)新增了一個(gè)插件,所以很容易判斷哪些代碼該保留,哪些代碼該刪除,我們只需要移除掉那些老舊代碼,同時(shí)也要把那些 <<< HEAD、==== 以及 >>>>>>baidu_activity 標(biāo)記符號(hào)刪除,最后進(jìn)行一次 commit 就可以了。

    在開發(fā)的過程中,一般都會(huì)約定大家寫的代碼盡量不要彼此影響,以減少出現(xiàn)沖突的可能,但是沖突總歸無法避免,技術(shù)人員們需要了解并掌握解決沖突的方法。

    圖形工具

    圖形工具不建議使用,太low,而且也不直觀,這里就不介紹了

    團(tuán)隊(duì)合作利器:git分支詳解

    Git分支常用操作

    Git 相對(duì)于 SVN 最強(qiáng)大的優(yōu)勢(shì)就在于「分支」,Git 的分支操作簡(jiǎn)單方便,而實(shí)際項(xiàng)目開發(fā)中團(tuán)隊(duì)合作最依賴的莫過于分支了,關(guān)于分支前面的課時(shí)也提到過,本課時(shí)會(huì)詳細(xì)講述什么是分支、分支的具體操作以及實(shí)際項(xiàng)目開發(fā)中是怎樣依賴分支進(jìn)行團(tuán)隊(duì)合作的。

  • 什么是分支?
  • 對(duì)于分支這個(gè)概念,可以這樣理解,幾個(gè)人一起去旅行,走到一個(gè)三岔口,每條路可能有不同的風(fēng)景,大家約定 3 天之后在某地匯聚,然后各自出發(fā)了。這三條分叉路就可以理解為各自的分支,而大家匯聚的時(shí)候就相當(dāng)于將各自的分支進(jìn)行了合并。

  • 分支的常用操作
  • 通常默認(rèn)會(huì)有一個(gè)主分支叫 master ,下面首先來介紹一下關(guān)于分支的一些基本操作:

    (1)新建一個(gè)叫 develop 的分支

    git branch develop

    注意,新建分支的命令是基于當(dāng)前所在分支進(jìn)行的,即以上是基于 mater 分支新建了一個(gè)叫做 develop 的分支,此時(shí) develop 分支與 master 分支的內(nèi)容完全一樣。例如,有 A、B、C三個(gè)分支,各分支內(nèi)容不同,如果當(dāng)前是在 B 分支,執(zhí)行新建分支命令,則新建的分支內(nèi)容與 B 分支相同,同理如果當(dāng)前在 C 分支,那就是基于 C 分支基礎(chǔ)上新建的分支。

    (2)切換到 develop 分支

    git checkout develop

    如果把以上兩步合并,即新建并自動(dòng)切換到 develop 分支:

    git checkout -b develop

    (3)把 develop 分支推送到遠(yuǎn)程倉(cāng)庫(kù)

    git push origin develop

    如果你遠(yuǎn)程的分支想取名叫 develop2 ,執(zhí)行以下代碼:

    git push origin develop:develop2

    注意:實(shí)際開發(fā)管理,建議不要這樣做,這樣會(huì)導(dǎo)致很混亂,難管理,建議本地分支與遠(yuǎn)程分支名稱要保持一致。

    在某些情況下,你需要對(duì)別人的提交(也可能是你自己的),進(jìn)行強(qiáng)制覆蓋

    git push --force

    (4)查看本地分支列表

    git branch

    (5)查看遠(yuǎn)程分支列表

    git branch -r

    git branch -a

    (6)刪除本地分支

    git branch -d develop

    git branch -D develop (強(qiáng)制刪除)

    (7)刪除遠(yuǎn)程分支

    git push origin :develop

    如果遠(yuǎn)程分支有 develop ,而本地沒有,想要將遠(yuǎn)程的 develop 分支遷到本地:

    git checkout develop origin/develop

    同樣的把遠(yuǎn)程分支遷到本地,并順便切換到該分支:

    git checkout -b develop origin/develop

    基本的團(tuán)隊(duì)協(xié)作流程

    一般來說,如果是一個(gè)人開發(fā),可能只需要 master、develop 兩個(gè)分支就可以了,平時(shí)開發(fā)在 develop 分支進(jìn)行,開發(fā)完成之后,發(fā)布之前合并到 master 分支,這個(gè)流程不會(huì)有大問題。

    如果是 3、5 個(gè)人,那就不一樣了,有人覺得也不會(huì)有什么大問題,直接新建 A、B、C 三個(gè)人的分支,每人各自開發(fā)各自的分支,然后開發(fā)完成之后再逐步合并到 master 分支,然而現(xiàn)實(shí)情況是,當(dāng)某人正在某個(gè)分支開發(fā)某個(gè)功能時(shí),突然發(fā)現(xiàn)線上有一個(gè)很嚴(yán)重的 bug ,不得不停下手頭的工作優(yōu)先處理 bug ,并且很多時(shí)候多人協(xié)作下如果沒有一個(gè)規(guī)范,很容易產(chǎn)生問題,所以多人協(xié)作下的分支管理規(guī)范很重要,就像代碼規(guī)范一樣重要,接下來就向大家推薦一種分支管理流程 Git Flow。

    GitFlow詳細(xì)操作

    準(zhǔn)確的說 Git Flow 是一種比較成熟的分支管理流程,我們先看一張圖能清晰的描述他整個(gè)的工作流程:

    第一次看上面的圖是不是有些暈,接下來用簡(jiǎn)單的語(yǔ)言給大家解釋一下。

    一般開發(fā)來說,大部分情況下都會(huì)擁有兩個(gè)分支 master 和 develop,他們的職責(zé)分別是:

    • master:永遠(yuǎn)處在即將發(fā)布(production-ready)狀態(tài)
    • develop:最新的開發(fā)狀態(tài)

    確切的說 master、develop 分支大部分情況下都會(huì)保持一致,只有在上線前的測(cè)試階段 develop 比 master 的代碼要多,一旦測(cè)試沒問題,準(zhǔn)備發(fā)布時(shí),會(huì)將 develop 合并到 master 上。

    但是產(chǎn)品發(fā)布之后又會(huì)進(jìn)行下一版本的功能開發(fā),開發(fā)中間可能又會(huì)遇到需要緊急修復(fù)的 bug ,一個(gè)功能開發(fā)完成之后突然需求變動(dòng)了等情況,所以 Git Flow 除了以上 master 和 develop 兩個(gè)主要分支以外,還提出了以下三個(gè)輔助分支:

    • feature: 開發(fā)新功能的分支, 基于 develop, 完成后 merge 回 develop
    • release: 準(zhǔn)備要發(fā)布版本的分支, 用來修復(fù) bug,基于 develop,完成后 merge 回 develop 和 master
    • hotfix: 修復(fù) master 上的問題, 等不及 release 版本就必須馬上上線. 基于 master, 完成后 merge 回 master 和 develop

    舉個(gè)例子,假設(shè)已經(jīng)有 master 和 develop 兩個(gè)分支了,這個(gè)時(shí)候準(zhǔn)備做一個(gè)功能 A,第一步要做的就是基于 develop 分支新建個(gè)分支:

    git branch feature/A

    其實(shí)就是一個(gè)規(guī)范,規(guī)定了所有開發(fā)的功能分支都以 feature 為前綴。

    但是這個(gè)時(shí)候發(fā)現(xiàn)線上有一個(gè)緊急的 bug 需要修復(fù),可以立刻切換到 master 分支,然后再此基礎(chǔ)上新建一個(gè)分支:

    git branch hotfix/B

    代表新建一個(gè)緊急修復(fù)分支,修復(fù)完成之后直接合并到 develop 和 master ,然后發(fā)布。

    然后再切換回 feature/A 分支繼續(xù)開發(fā),如果開發(fā)完了,那么合并回 develop 分支,然后在 develop 分支屬于測(cè)試環(huán)境,跟后端對(duì)接并且測(cè)試,感覺可以發(fā)布到正式環(huán)境了,這個(gè)時(shí)候再新建一個(gè) release 分支:

    git branch release/1.0

    此時(shí),所有的 api、數(shù)據(jù)等都是正式環(huán)境,然后在這個(gè)分支上進(jìn)行最后的測(cè)試,發(fā)現(xiàn) bug 直接進(jìn)行修改,直到測(cè)試,達(dá)到發(fā)布的標(biāo)準(zhǔn),就可以把該分支合并到 develop 和 master 然后進(jìn)行發(fā)布。

    以上就是 Git Flow 的概念與大體流程,看起來有些復(fù)雜,但是對(duì)于人數(shù)比較多的團(tuán)隊(duì)協(xié)作現(xiàn)實(shí)開發(fā)中確實(shí)會(huì)遇到這種復(fù)雜的情況, Git Flow 是目前很流行的一套分支管理流程,但是有人會(huì)覺得每次都要進(jìn)行各種合并操作有些麻煩, Git Flow 為此專門推出了一個(gè)工具,并且是開源的:GitHub 開源地址:[github.com/nvie/gitflo…]

    簡(jiǎn)單來說,這個(gè)工具會(huì)幫大家節(jié)省很多步驟,例如,當(dāng)前處于 master 分支,如果想要開發(fā)一個(gè)新的功能,第一步切換到 develop 分支,第二步新建一個(gè)以 feature 開頭的分支名,有了 Git Flow 直接如下操作就可以完成了:

    git flow feature start A

    這個(gè)分支完成之后,需要合并到 develop 分支,進(jìn)行如下操作:

    git flow feature finish A

    如果是 hotfix 或者 release 分支,會(huì)自動(dòng)合并到 develop、master 兩個(gè)分支。

    到目前為止,大家已經(jīng)了解了這個(gè)工具的具體作用,具體安裝與用法就不多介紹了,感興趣的技術(shù)人員可以觀看這篇博客:

    stormzhang.com/git/2014/01…

    總結(jié)

    以上就是分享給大家的關(guān)于分支的所有知識(shí),一個(gè)人你也許感受不到什么,但是實(shí)際工作中大都以團(tuán)隊(duì)協(xié)作為主,而分支是團(tuán)隊(duì)協(xié)作必備技能,Git Flow 是一個(gè)很流行的分支管理流程,也是公司團(tuán)隊(duì)內(nèi)部經(jīng)常使用的一套流程,希望大家能夠掌握。

    分支視頻講解

    后續(xù)補(bǔ)上

    Github常見的幾種操作

    有哪些常見的操作?

    開源社區(qū)最大的魅力是人人都可以參與進(jìn)去,發(fā)揮眾人的力量,讓一個(gè)項(xiàng)目更完善,更強(qiáng)壯。那么就會(huì)有人疑問,自己目前還沒有能力開源一個(gè)項(xiàng)目,但是又想一起參與到別人的開源項(xiàng)目中,該怎樣操作呢?本課時(shí),就來給大家介紹 GitHub 上的一些常見的操作。

    下面以 Square 公司開源的 Retrofit 為例來介紹。

    打開鏈接:github.com/square/retr… ,可以看到如下的項(xiàng)目主頁(yè):

    從上圖可以看出,一個(gè)項(xiàng)目可以進(jìn)行的操作主要有兩部分,第一部分包括 Watch、Star、Fork ,這三個(gè)操作前面的課時(shí)已經(jīng)介紹過了,這里不做重復(fù)講解。

    著重介紹第二部分,分別包括 Code、Issues、Pull requests、Projects、Wiki、Pulse、Graphs。接下來一一進(jìn)行講解。

    (1)Code

    代表項(xiàng)目的代碼文件,每個(gè)項(xiàng)目通常都會(huì)有對(duì)該項(xiàng)目的介紹,只需要在項(xiàng)目的根目錄里添加一個(gè) README.md 文件就可以,使用 markdown 語(yǔ)法,GitHub 自動(dòng)會(huì)對(duì)該文件進(jìn)行渲染。

    (2)Issues

    Issues 代表該項(xiàng)目的一些問題或者 bug,并不是說 Issue 越少越好,Issue 被解決的越多說明項(xiàng)目作者或者組織響應(yīng)很積極,也說明該開源項(xiàng)目的作者很重視。觀察 Retrofit 的 Issues 主頁(yè),截至目前 close(解決) 了 1305 個(gè) Issue,open (待解決)狀態(tài)的有 37 個(gè),這種解決問題的比例與速度值得每位開源項(xiàng)目的作者學(xué)習(xí)。

    同樣的,大家在使用一些開源項(xiàng)目遇到問題的時(shí)候都可以提 Issue,可以通過點(diǎn)擊右上角的 New Issue 來新建 Issue,添加一個(gè)標(biāo)題與描述就可以了,這個(gè)操作很簡(jiǎn)單。

    (3)Pull requests

    別人開源一個(gè)項(xiàng)目,如果我們想一起參與開發(fā),一起來完善,這就要通過 Pull requests 來完成,簡(jiǎn)稱 PR。

    (4)Projects

    這個(gè)是最新 GitHub 改版新增的一個(gè)項(xiàng)目,這個(gè)項(xiàng)目就是方便將一些 Issues、Pull requests 進(jìn)行分類,目前為止該功能被使用的比較少,了解一下就好。

    (5)Wiki

    一般來說,項(xiàng)目的主頁(yè)有 README.md 基本就夠了,但是有些時(shí)候項(xiàng)目的一些用法很復(fù)雜,需要有詳細(xì)的使用說明文檔給使用者,這個(gè)時(shí)候就用到了 Wiki。

    Wiki使用起來也很簡(jiǎn)單,直接 New Page ,然后使用 markdown 語(yǔ)法即可進(jìn)行編寫。

    (6)Pulse

    Pulse 可以理解成該項(xiàng)目的活躍匯總。包括近期該倉(cāng)庫(kù)創(chuàng)建了多少個(gè) Pull Request 或 Issue,有多少人參與了這個(gè)項(xiàng)目的開發(fā)等,在這里都可以一目了然。

    根據(jù)這個(gè)頁(yè)面,用戶可以判斷該項(xiàng)目受關(guān)注程度以及項(xiàng)目作者是否還在積極參與解決這些問題等。

    (7)Graphs

    Graphs 是以圖表的形式來展示該項(xiàng)目的一個(gè)整體情況。比如項(xiàng)目的全部貢獻(xiàn)人,commits 的圍度分析,某天代碼提交的頻繁程度等。

    (8)Settings

    如果一個(gè)項(xiàng)目是自己的,那么你會(huì)發(fā)現(xiàn)有一個(gè)菜單 Settings,這里包括了對(duì)整個(gè)項(xiàng)目的設(shè)置信息與功能,比如對(duì)項(xiàng)目重命名,刪除該項(xiàng)目,關(guān)閉項(xiàng)目的 Wiki 和 Issues 功能等,不過大部分情況下都不需要對(duì)這些設(shè)置做更改。感興趣的技術(shù)人員,可以自行了解這里的設(shè)置有哪些功能。

    以上就包含了一個(gè) GitHub 項(xiàng)目的所有操作,對(duì)初學(xué)者來說難度最主要的還是發(fā)起 Pull request,不過相信大家看完之后對(duì) GitHub 上一些常用的操作應(yīng)該已經(jīng)熟悉了,從現(xiàn)在開始,請(qǐng)一起參與到開源社區(qū)中來吧,開源社區(qū)需要每個(gè)人都貢獻(xiàn)一份力量,這樣才能夠越來越強(qiáng)大,也能夠?qū)Ω嗟娜擞袔椭?#xff01;

    實(shí)踐:提交自己的第一個(gè)PR

    接下來我們向項(xiàng)目 newtest 發(fā)起 PR操作,說明,必須確保你可以正常向 GitHub 提交代碼,如果不可以的話,請(qǐng)仔細(xì)觀看前面課時(shí)講解的內(nèi)容。

    第一步,登錄你的 GitHub 賬號(hào),然后找到想要發(fā)起 PR 的項(xiàng)目,這里以 newtest 為例,地址:

    github.com/oldsyang/ne…

    點(diǎn)擊右上角的 Fork 按鈕,該項(xiàng)目就出現(xiàn)在你自己賬號(hào)的 Repository 里。

    注意,這個(gè)項(xiàng)目原本是屬于 GitHub 賬號(hào) oldsyang 下的,為了演示,我自己又重新注冊(cè)了另一個(gè)賬號(hào)叫 yangzaizai 。

    Fork 之后,在賬號(hào) yangzaizai 下多了一個(gè) newtest 的項(xiàng)目,如下圖:

    從上圖可以看出 Fork 過來的項(xiàng)目標(biāo)題底部會(huì)顯示一行小字:forked from oldsyang/newtest ,除此之外,項(xiàng)目代碼跟原項(xiàng)目一模一樣,對(duì)于原項(xiàng)目來說,相當(dāng)于別人新建了一個(gè)分支而已。

    第二步,把該項(xiàng)目 clone 到本地,把自己新增或者改動(dòng)的代碼保存。

    第三步,把自己做的代碼改動(dòng) push 到你自己 GitHub 的項(xiàng)目上去。

    第四步,點(diǎn)擊你 Fork 過來的項(xiàng)目主頁(yè)的 Pull requests 頁(yè)面。

    點(diǎn)擊 New pull request 按鈕會(huì)看到如下頁(yè)面:

    這個(gè)頁(yè)面會(huì)自動(dòng)比較該項(xiàng)目與原有項(xiàng)目的不同之處,最頂部聲明了是 oldsyang/newtest 項(xiàng)目的 master 分支與你 fork 過來的 yangzaizai/newtest 項(xiàng)目的 master 分支所做的比較。

    最底部可以方便直觀的看到代碼中做了哪些改動(dòng),這里可以看到我加了一句 Fork from oldsyang !

    同樣的,寫好標(biāo)題和描述,然后點(diǎn)擊中間的 Create pull request 按鈕,至此就成功給該項(xiàng)目提交了一個(gè) PR。

    然后就等著項(xiàng)目原作者 review 你的代碼,并且決定會(huì)不會(huì)接受你的 PR,如果接受,那么你就已經(jīng)是該項(xiàng)目的貢獻(xiàn)者之一了。

    建立組織

    在github可以創(chuàng)建一個(gè)組織去協(xié)同開發(fā)好多項(xiàng)目,操作比較簡(jiǎn)單

    點(diǎn)擊個(gè)人頭像下拉菜單里的setting選項(xiàng),

    在左側(cè)點(diǎn)擊organizations選項(xiàng),

    在右上角點(diǎn)擊 New Organization,然后安裝提示注冊(cè)一個(gè)組織

    創(chuàng)建完成之后就出現(xiàn)詳情頁(yè)面

    在這個(gè)頁(yè)面就可以創(chuàng)建倉(cāng)庫(kù)和邀請(qǐng)成員了,邀請(qǐng)成員后,github會(huì)郵件的形式通知被邀請(qǐng)的成員

    發(fā)現(xiàn)好用的開源項(xiàng)目

    關(guān)注一些活躍的大牛

    經(jīng)過前面的學(xué)習(xí),有技術(shù)人員可能會(huì)覺得,GitHub 大概了解了,Git 也差不多會(huì)使用了,但還是搞不清 GitHub 如何幫助大家提升工作效率,其實(shí) GitHub 最重要的一個(gè)作用就是發(fā)現(xiàn)全世界最優(yōu)秀的開源項(xiàng)目,你沒事的時(shí)候刷刷微博、知乎,別人沒事的時(shí)候刷刷 GitHub ,看看最近有哪些流行的項(xiàng)目,久而久之,差距就會(huì)越來越大,那么如何發(fā)現(xiàn)優(yōu)秀的開源項(xiàng)目呢?本課時(shí)就來給大家介紹一下。

    GitHub 主頁(yè)有一個(gè)類似微博的時(shí)間線功能,所有你關(guān)注的人的動(dòng)作,比如 star、fork 了某個(gè)項(xiàng)目都會(huì)出現(xiàn)在你的時(shí)間線上,這種方式適合我這種比較懶的人,不用主動(dòng)去找項(xiàng)目,這也是我每天獲取信息的一個(gè)很重要的方式。不知道怎么關(guān)注這些人?那么很簡(jiǎn)單,關(guān)注我 oldsyang ,以及我 GitHub 上關(guān)注的一些大牛,基本就差不多了。

    Trending

    點(diǎn)擊下圖的 Explore 菜單到“發(fā)現(xiàn)”頁(yè)面

    點(diǎn)擊下圖的 Trending 按鈕

    Trending 直譯過來是趨勢(shì)的意思,也就是說從這個(gè)頁(yè)面可以看到最近一些熱門的開源項(xiàng)目,這個(gè)頁(yè)面是很多人主動(dòng)獲取一些開源項(xiàng)目最好的途徑,可以選擇「當(dāng)天熱門」、「一周之內(nèi)熱門」和「一月之內(nèi)熱門」來查看,并且還可以分語(yǔ)言類來查看,比如你想查看最近熱門的 Android 項(xiàng)目,那么右邊就可以選擇 Java 語(yǔ)言。 這個(gè)頁(yè)面推薦大家每隔幾天就去查看一下,主動(dòng)發(fā)掘一些優(yōu)秀的開源項(xiàng)目。

    Search

    除了 Trending ,還有一種最主動(dòng)的獲取開源項(xiàng)目的方式,那就是 GitHub 的 Search 功能。

    例如,你是做 Android 的,接觸 GitHub 沒多久,那么第一件事就應(yīng)該輸入 android 關(guān)鍵字進(jìn)行搜索,然后右上角選擇按照 star 來排序,結(jié)果如下圖:

    除此之外,GitHub 的 Search 還有一些小技巧,比如你想搜索的結(jié)果中 star 數(shù)大于1000的,那么可以這樣搜索:

    android http stars:>1000

    當(dāng)然還有些其他小技巧,這里就不多介紹了。

    如果使用 Google 瀏覽器,想要搜索 GitHub 上的結(jié)果,可以在前面加 GitHub 關(guān)鍵字,比如 輸入 github python request ,每個(gè)關(guān)鍵字用空格隔開,搜索結(jié)果如下:

    從上圖可以看到,基本也是想要的結(jié)果,只是不是單純的按照 star 數(shù)來排序的。

    GitHub 上優(yōu)秀開源項(xiàng)目真的是很多,就不一一推薦了,授人以魚不如授人以漁,請(qǐng)大家自行發(fā)掘自己需要的開源項(xiàng)目吧,不管是應(yīng)用在實(shí)際項(xiàng)目上,還是對(duì)源碼的學(xué)習(xí),都是提升自己工作效率與技能的很重要的一個(gè)渠道,總有一天,你會(huì)突然意識(shí)到,原來不知不覺你已經(jīng)走了這么遠(yuǎn)。

    《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的git/github的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。