Git初步,理清基本的git(github)流程

當我初次接觸git時,我須要快速學習基本的git工做流,以便快速接收一個開源web項目維護。可是,我很難理解工做流程,由於我不太瞭解git使用關鍵點。linux

fork,clone,pull、branch、保存、測試、add,評論、commit,push(注以上黑體的單詞都是git命令的部分),再次測試,討論以及重複進行這六個步驟,僅僅爲更新進網站,就有這樣繁瑣的不走,是有點很誇張,有點大張旗鼓。全部初學者均可能會迷惑,會煩惱,會罵搞這麼複雜搞毛毛。git

網上git教程很是多,圖文並茂的也很多。蟲蟲在此不肯意重複論述。咱們在此只對典型地git工做流程的作一下描述、對流程各個關鍵過程和步驟作解釋。以此做爲一個基礎,幫助初學者理解git的意義,幫他們快速上手。github

爲何要使用Git?web

Git是一個分佈式版本控制系統(VCS),人們用它來控制文件的變動過程,對每一步的變化作跟蹤,必要時候能夠撤回,基於此讓你們一塊兒協做工做,其餘的VCS還包括最初的RCS、CVS,微軟的VSS,SVN,BitKeeper等。Git最初是linus開發來用來爲linux內核項目管理用的。shell

Git基於一個宗旨,鼓勵你們都參與,基本上任何人均可以提出變動申請(github:Pull request,gitlab:Merge request),但只有少數負責人(owner和開發組)能夠接受,從而合併變動。一我的能夠同時處理不少項目,爲了管理這大量的項目(Repo),Git(工具)和Gitlab 、GitHub(協做網站)能夠製做並保存許多版本的項目和其版本過程,每一個項目對應不一樣的權限或用於不一樣的目的。windows

例如,例如構建公共項目代碼一般在線託管GitHub中。若是想要修改,增長功能,解決bug,甚至是完善一下文檔。咱們均可以經過github網站上經過fork,在我的項目下建立一個副本,而後對這個副本進行修改,甚至是"蹂躪",可是不管你作什麼原始版本都不會有任何的影響,直到你想把你的修改經過Pull request 提交給主項目,而且主項目的管理者接受你的請求。ssh

先決條件:分佈式

建立一個GitHub賬戶。工具

GitHub是一個共有項目託管網站,項目全部者保留項目的正式版本,其餘人須要修改,先得有github帳號,並fork獲得項目的在線副本。固然對公開項目而言若是你只想在本地獲得一個項目副本的話,只須要經過git clone 項目地址,便可。好比下面是蟲蟲的github我的頁面:gitlab

在本地安裝Git

Git是版本控制工具,幫助咱們跟蹤項目文件變動。他運行在咱們本地電腦上。若是你本地系統是Linux的話,通常會默認安裝,若是沒有的話,你能夠經過發行版的包管理系統安裝,好比yum install git。windows版本git工具是由微軟開發和維護的git for window(msysgit)和各類git GUI客戶端。

固然git的根本還在於git命令行,經過git shell執行各個命令也是最方便最直白的,建議無論你有沒有基礎,都先從git shell開始,不要對命令產生任何的恐懼,他是你最好的朋友,當你使用任何圖形git客戶端工具出現問題時候也建議用git shell再試試,每每根據其錯誤提示最容易找到問題所在。

典型的github工做流程

一旦你安裝了git而且建立了GitHub賬戶(固然對內部項目你可使用gitlab

自建git託管網站),那麼你的git之旅正式開始。首先找到你感興趣的項目,fork或者clone複製它。這兩個命令的區別是:fork是在github複製一個本身的在線的項目,你擁有徹底地權限,能夠任意"蹂躪"。clone是在本地複製一份項目,除非你clone的是本身的項目,不然,你只能在本地修改,不能對其的操做push到github遠程倉庫。並且clone 能夠隨意clone只要不是在同一目錄下屢次clone便可。

典型的工做流程和作法是,因爲你沒有遠程倉庫的權限,你先在github經過fork,複製本身的一份遠程倉庫,而後經過clone你本身這個遠程副本到本地,進行修改,修改後push到本身的githu遠程副本,而後經過github上的Pull request發起請求,這將會把你的修改請求發送到原始的倉庫管理者,發出pull request後,github會自動檢查衝突,而後通知原始倉庫的管理者,有個Pull request,原始倉庫管理檢查請求,並對變化進行review,而後作出接受或者拒絕你的變動請求。

在線副本(fork)

要開始爲項目提供代碼,首先須要作一個能夠控制的原始項目的在線副本。而後你全部的改變,均可以將其添加到你的在線副本中。而後發起Pull request,發起變化後Githu會自動的將你的在線副本和原始副本進行比較,通知原始項目維護者,由他並決定是否接受你的變動。github的fork操做能夠說是git和github變得流行的最重要的功能。鼓勵大量用戶,不須要加入項目組就能夠隨時隨地的貢獻力量。

Git項目文件夾的通常叫"repository"(倉庫),簡稱"repo"。倉庫會包含項目的全部源碼文件以及git版本信息,Git版本跟蹤的文件,git項目文件都位於項目更目錄下的.git目錄,以及以markdow格式項目說明文檔README.md文檔。

要建立一個github在線副本,你在原始項目的右上角,點擊 "Fork"按鈕。

就會會在您的GitHub賬戶利用原始倉庫的最新版本建立一個在線副本。全部Fork的項目,都會在項目路徑下發,有個forked form xxx的原始倉庫的連接,好比蟲蟲這個項目就是fork於perl6/doc的原始倉庫。

本地副本(clone)

要對項目進行修改,並對其測試,或者部署一個github項目,你須要的本地clone一個本地副本。在本地副本上,你能夠無限制的修改、測試,而無需任何的審批和預先的review。

例如,你要維護一個網站內容,你就能夠在本地構建網站副本。而後再本地修改瀏覽,確保代碼徹底無誤後,再將變化push到遠程倉庫。你push你的變化後,大家的測試根據你commit(可能關聯某個問題或者bug修復),clone一份或者pull一份代碼變化到本地,而後測試功能,確保問題解決,或者功能生效。固然這一部分徹底能夠自動化完成,就是github或者gitlab的CI/CD(持續的集成和發佈),蟲蟲之後會介紹這些內容。

下載到本地的repo的副本稱爲"clone"。克隆repo與通常的項目下載不同,除了項目文件自己,clone還會爲附帶下載倉庫的全部版本變化信息。您可使用git clone url 命令克隆一個倉庫,url能夠在項目的"clone and down"按鈕下找到。生辰八字起名字

注意Url分兩種:https和ssh。若是你clone一個別人共有倉庫的時候,只能用https形式,不然你沒有任何權限經過ssh clone。

你的單獨工做環境(branch)

git項目一般不一樣的貢獻者將對同一個倉庫進行大量的更新。爲了實現這種特性,git讓你能夠在同一個倉庫建立許多不一樣版本,脫離主線版本作修改,這些不一樣版本,稱爲"分支"。分支管理是git版本控制的最大優點之一,git分支管理基於指針來實現,因此分支的建立,切換和合並都很是快捷,幾乎沒有任何資源消耗。每一個人均可以使用分支建立一個單獨的工做環境,對其作任何的修改操做,不影響其餘分支版本,當確保沒有任何問題時,再經過分支合併,把變化合併到主線版本上來。全部倉庫,都會有一個主版本,叫Master,通常也會建立一個Develop分支用來作爲開發版本。

分支機構和倉庫目錄之間的關係

你可能會想把每一個分支想象成你的項目文件的不一樣副本,但技術上分支不是副本,前面咱們也說過了,不過是經過用指針將其指到了某個commit下而已。

你將在計算機上的同一目錄中與你的倉庫中全部分支進行交互。當你在那個目錄下時,你老是會看到那個目錄的一個版本(一個分支)。

當你切換到一個不一樣分支時,你目錄中的大部分文件也會改變,看起來就像你剛剛選擇的版本。可是,若是你保存了對任何文件的更改,則這些更改將與上次保存時保持一致,而無論你檢出哪一個分支。 Git總能知道你已經更改這些文件,而且正在等待你告訴它哪一個版本的項目要添加(git add)更改(或者告訴它你不想保留更改)。

維護人員只能查看已添加到分支的更改。分支告訴他們哪一個版本的倉庫與他們的哪一個版本進行比較。固然你分支除非你push到遠程倉庫,不然其餘任何人都是看不到的。

相關文章
相關標籤/搜索