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

概述

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

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

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

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

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

為什麼要使用Git?

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

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

例如,例如構建公共項目代碼通常在線託管GitHub中。如果想要修改,增加功能,解決bug,甚至是完善一下文檔。我們都可以通過github網站上通過fork

,在個人項目下創建一個副本,然後對這個副本進行修改,甚至是"蹂躪",但是無論你做什麼原始版本都不會有任何的影響,直到你想把你的修改通過Pull request 提交給主項目,並且主項目的管理者接受你的請求。

先決條件:

創建一個GitHub帳戶。

GitHub是一個共有項目託管網站,項目所有者保留項目的正式版本,其他人需要修改,先得有github賬號,並fork得到項目的在線副本。當然對公開項目而言如果你只想在本地得到一個項目副本的話,只需要通過git clone 項目地址,即可。比如下面是蟲蟲的github個人頁面:

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

在本地安裝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即可。

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

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

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

在線副本(fork)

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

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

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

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

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

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

本地副本(clone)

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

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

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

下載到本地的repo的副本稱為"clone"。克隆repo與一般的項目下載不一樣,除了項目文件本身,clone還會為附帶下載倉庫的所有版本變化信息。您可以使用git clone url 命令克隆一個倉庫,url可以在項目的"clone and down"按鈕下找到。

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

注意Url分兩種:https和ssh。如果你clone一個別人共有倉庫的時候,只能用https形式,否則你沒有任何權限通過ssh clone。

你的單獨工作環境(branch)

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

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

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

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

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

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

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

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


分享到:


相關文章: