go語言學習就業(yè)班05-web開發(fā)01beego講義git_第1頁
go語言學習就業(yè)班05-web開發(fā)01beego講義git_第2頁
go語言學習就業(yè)班05-web開發(fā)01beego講義git_第3頁
go語言學習就業(yè)班05-web開發(fā)01beego講義git_第4頁
go語言學習就業(yè)班05-web開發(fā)01beego講義git_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1. Git 簡介1.1 產(chǎn)生歷史SVN 集中式版本全球最大同友git 是目前世界上最先進的分布式版本系統(tǒng)。Linus 在 1991 年創(chuàng)建了開源的 Linux,從此,Linux 系統(tǒng)不斷發(fā)展,已經(jīng)成為最大的服務(wù)器系統(tǒng)軟件了。Linus 雖然創(chuàng)建了 Linux,但 Linux 的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為 Linux 編寫代碼,那 Linux 的代碼是如何管理的呢?事實是,在 2002 年以前,世界各地的志愿者把源代碼文件通過 diff 的給 Linus,然后由 Linus 本人通過手工方式合并代碼!你也許會想,為什么 Linus 不把 Linux 代碼放到版本系統(tǒng)

2、里呢?不是有 CVS、SVN 這些的版本系統(tǒng)嗎?因為 Linus 堅定地CVS 和 SVN,這些集中式的版本系統(tǒng)不但速度慢,而且必須聯(lián)網(wǎng)才能使用。有一些的版本系統(tǒng),雖然比 CVS、SVN 好用,但的,和 Linux 的開源精神不符。不過,到了 2002 年,Linux 系統(tǒng)已經(jīng)發(fā)展了十年了,代碼庫之大讓 Linus 很難繼續(xù)通過手工方式管理了,社區(qū)的弟兄們也對這種方式表達了強烈不滿,于是 Linus 選擇了一個商業(yè)的版本系統(tǒng)BitKeeper,BitKeeper 的東家 BitMover 公司出于人道精神,Linux 社區(qū)使用這個版本系統(tǒng)。安定團結(jié)的大好局面在 2005 年就被打破了,是 Li

3、nux 社區(qū)牛人,不免沾染了一些梁山好漢的江湖習氣。開發(fā) Samba 的 Andrew 試圖BitKeeper 的協(xié)議(這么干的其實也不只他一個),被 BitMover 公司發(fā)現(xiàn)了(工作做得不錯!),于是 BitMover 公司怒了,要收回 Linux 社區(qū)的使用權(quán)。Linus 可以向 BitMover 公司道個歉,保證以后嚴格管教弟兄們,嗯,這是不可能的。實際情況是這樣的:Linus 花了兩周時間用 C 寫了一個分布式版本系統(tǒng),這就是 Git!一之內(nèi),Linux 系統(tǒng)的源碼已經(jīng)由 Git 管理了!牛是怎么定義的呢?大家可以體會一下。Git 迅速成為最流行的分布式版本系統(tǒng),尤其是 2008 年

4、,上線了,它為開源項目提供 Git,無數(shù)開源項目開始遷移至,包括 jQuery,PHP,Ruby 等等。歷史就是這么偶然,如果不是當年 BitMover 公司威脅 Linux 社區(qū),可能現(xiàn)在我們就沒有而超級好用的 Git 了。Git 和 svn 的區(qū)別 /dazhidacheng/p/7478438.html1.2 git 的兩大特點l版本:可以解決多人同時開發(fā)的代碼問題,也可以解決找回歷史代碼的問題。l分布式:Git 是分布式版本系統(tǒng),同一個 Git 倉庫,可以分布到不同的上。首先找一臺電腦充當服務(wù)器的,每天 24 小時開機,其他每個人都從這個“服務(wù)器”倉庫克隆一份到的電腦上,并且各自把各自

5、的提交推送到服務(wù)器倉,也從服務(wù)器倉庫中拉取別人的提交??梢宰约捍罱ㄟ@臺服務(wù)器,也可以使用。2. 安裝與配置(1)安裝命令如下:sudo apt-get install git(2)安裝后,運行如下命令:3. 創(chuàng)建一個版本庫(1) 新建一個目錄 git_test,在 git_test 目錄下創(chuàng)建一個版本庫,命令如下:可以看到在 git_test 目錄下創(chuàng)建了一個.git 隱藏目錄,這就是版本庫目錄。4. 版本創(chuàng)建與回退4.1 使用(1) 在 git_test 目錄下創(chuàng)建一個文件 code.txt,編輯內(nèi)容如下:git initgit(2)使用如下兩條命令可以創(chuàng)建一個版本:添加標識(git 不做檢

6、查)git config -globalgit config -globaluser."" "YourName"然后再執(zhí)行 git commit-m 版本一(3)使用如下命令可以查看版本:git loggit add code.txtgit commit m '版本 1'(4)繼續(xù)編輯 code.txt,在里面增加一行。(5)使用如下命令再創(chuàng)建一個版本并查看版本:(6)現(xiàn)在若想回到某一個版本,可以使用如下命令:其中 HEAD 表示當前最新版本,HEAD表示當前版本的前一個版本,HEAD表示當前版本的前前個版本,也可以使用

7、 HEAD1 表示當前版本的前一個版本,HEAD100 表示當前版本的前 100 版本?,F(xiàn)在若覺得想回到版本 1,可以使用如下命令:git reset -hard HEAD執(zhí)行命令后使用 git log 查看版本,發(fā)現(xiàn)現(xiàn)在只能看到版本 1 的,cat code.txt 查看文件內(nèi)容,現(xiàn)在只有一行,也就是第一個版本中code.txt 的內(nèi)容。(7) 假如我們現(xiàn)在又想回到版本 2,這個時候怎么辦?可以使用如下命令:從上面可以看到版本 2 的版本號為:(8) 在終端執(zhí)行如下命令:現(xiàn)在發(fā)現(xiàn)版本 2 有回來了??梢?catcode.txt 查看其里面的內(nèi)容(9)假如說上面的終端已經(jīng)關(guān)了改怎么回退版本。g

8、it reset -hard 版本號我們在執(zhí)行如下命令將版本回退到版本 1。下面把終端關(guān)了,然后再打開終端,發(fā)現(xiàn)之前版本 2 的版本號看不到了。那么怎么再回到版本 2 呢?git reflog 命令可以查看我們的操作??梢钥吹桨姹?2 的版本號,我們再使用如下命令進行版本回退,版本重新回到了版本 2。git reflog4.2 工作區(qū)和暫存區(qū)4.2.1 工作區(qū)(Working Directory)電腦中的目錄,比如我們的 git_test,就是一個工作區(qū)。4.2.2 版本庫(Repository)工作區(qū)有一個隱藏目錄.git,這個不是工作區(qū),而是 git 的版本庫。git 的版本存了很多東西,

9、其中最重要的就是稱為 index(或者叫stage)的暫存區(qū),還有 git 為我們自動創(chuàng)建的第一個分支 master,以及指向 master 的一個指針叫 HEAD。因為我們創(chuàng)建 git 版本庫時,git 自動為我們創(chuàng)建了唯一一個 master 分支,所以,現(xiàn)在,git commit 就是往 master 分支上提交更改。你可以簡單理解為,需要提交的文件修改通通放到暫存區(qū),然后,提交暫存區(qū)的所有修改。前面講了我們把文件往 git 版本添加的時候,是分兩步執(zhí)行的:第一用 git add 把文件添加進去,實際上就是把文件修改添加到暫存區(qū);第二用 git commit 提交更改,實際上就是把暫存區(qū)的

10、所有內(nèi)容提交到當前分支。下面在 git_test 目錄下再創(chuàng)建一個文件 code2.txt,然后編輯內(nèi)容(1)如下:(2)然后再次編輯 code.txt 內(nèi)容,在其中加,編輯后內(nèi)容如下:(3)使用如下命令查看當前工作樹的狀態(tài):上面提示我們 code.txt 被修改,而 code2.txt 沒有被跟蹤。git status(4)我們使用如下命令把 code.txt 和 code2.txt 加入到暫存區(qū),然后再執(zhí)行 git status 命令,結(jié)果如下:所有 git add 命令是把所有提交的修改存放到暫存區(qū)。然后,執(zhí)行 gitcommit 就可以把暫存區(qū)的所有修改提交到分支(5)創(chuàng)建一個版本。(

11、6)一旦提交后,如果你又沒有對工作區(qū)做任何修改,那么工作區(qū)就是“干凈”的。執(zhí)行如下命令可以發(fā)現(xiàn):現(xiàn)在我們的版本庫變成了這樣:4.3 管理修改git 管理的文件的修改,它只會提交暫存區(qū)的修改來創(chuàng)建版本。(1)編輯 code.txt,并使用 git add 命令將其添加到暫存區(qū)中。(2)繼續(xù)編輯 code.txt,并在其中添加一行。(3)git commit 創(chuàng)建一個版本,并使用 git status 查看,發(fā)現(xiàn)第二次修改 code.txt 內(nèi)容之后,并沒有將其添加的工作區(qū),所以創(chuàng)建版本的時候并沒有被提交。撤銷修改4.4繼續(xù)上面的操作,提示我們可以使用git checkout - <文件&g

12、t; 來丟(1)棄工作區(qū)的改動。執(zhí)行如下命令,發(fā)現(xiàn)工作區(qū)干凈了,第二次的改動內(nèi)容也沒了。(2) 我們繼續(xù)編輯 code.txt,并在其中添加如下內(nèi)容,并將其添加的暫存區(qū)。(3)git 同樣告訴我們,用命令 git reset HEAD file 可以把暫存區(qū)的修改撤銷掉,重新放回工作區(qū)。(4)現(xiàn)在若想丟棄 code.txt 的修改,執(zhí)行如下命令即可?,F(xiàn)在,如果你不但改錯了東西,還從暫存區(qū)提交到了版本庫,則需要進行版本回退。小結(jié):場景 1:當你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時,用命令 git checkout - file。場景 2:當你不但改亂了工作區(qū)某個文件的內(nèi)容,還添加

13、到了暫存區(qū)時,想丟棄修改,分兩步,第一步用命令 git reset HEAD file,就回到了場景 1,第二步按場景 1 操作。場景 3:已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節(jié)。Git reset hard 版本號4.5 對比文件的不同對比工作區(qū)和某個版本中文件的不同:(1)繼續(xù)編輯文件 code.txt,在其中添加一行內(nèi)容。(2)現(xiàn)在要對比工作區(qū)中 code.txt 和 HEAD 版本中 code.txt 的不同。使用如下命令:Git diff HEAD 文件名(3)使用如下命令丟棄工作區(qū)的改動。對比兩個版本間文件的不同:(1) 現(xiàn)在要對比 HEAD 和 HE

14、AD版本中 code.txt 的不同,使用如下命令:Git diff HEAD HEAD - code.txt4.6 刪除文件(1) 我們把目錄中的 code2.txt 刪除。這個時候,git 知道刪除了文件,因此,工作區(qū)和版本庫就不一致了,gitstatus 命令會立刻提示哪些文件被刪除了。(2) 現(xiàn)在你有兩個選擇,一是確實要從版本庫中刪除該文件,那就用命令git rm 刪掉,并且 gitcommit:另一種情況是刪錯了,可以直接使用 git checkout- code2.txt,這樣文件 code2.txt 又回來了。小結(jié):命令 git rm 用于刪除一個文件。如果一個文件已經(jīng)被提交到版

15、本庫,那么你永遠不用擔心誤刪,但是要,你只能恢復文件到最新版本,你會丟失最近一次提交后你修改的內(nèi)容。5. 分支管理5.1 概念分支就是科幻里面的平行宇宙,當你正在電腦前努力學習 Git 的時候,另一個你正在另一個平行宇宙里努力學習 SVN。如果兩個平行宇宙互不干擾,現(xiàn)在的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合并了,結(jié)果,你既學會了 git 又學會了 SVN!分支在實際中有什么用呢?假設(shè)你準備開發(fā)一個新功能,但是需要兩能完成,第一周你寫了 50%的代碼,如果立刻提交,由于代碼還沒寫完,整的代碼庫會導致別人不能干活了。如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風險?,F(xiàn)在有了分

16、支,就不用怕了。你創(chuàng)建了一個屬于你的分支,別人看不到,還繼續(xù)在原來的分支上正常工作,而你在的分支上干活,想提交就提交,直到開發(fā)完畢后,再合并到原來的分支上,這樣,既安全,又不影響別人工作。5.2 創(chuàng)建與合并分支git 把我們之前每次提交的版本串成一條時間線,這條時間線就是一個分支。截止到目前只有一條時間線,在 git 里,這個分支叫主分支,即 master分支。HEAD 嚴格來說不是指向提交,而是指向 master,master 才是指向提交的,所以,HEAD 指向的就是當前分支。(1) 一開始的時候,master 分支是一條線,git 用 master 指向最新的提交,再用 HEAD 指向

17、master,就能確定當前分支,以及當前分支的提交點:每次提交,master 分支都會向前移動一步,這樣,隨著你不斷提交,master 分支的線也越來越長。(2)當我們創(chuàng)建新的分支,例如 dev 時,git 新建了一個指針叫 dev,指向master 相同的提交,再把 HEAD 指向 dev,就表示當前分支在 dev 上:git 創(chuàng)建一個分支很快,因為除了增加一個 dev 指針,改變 HEAD 的指向,工作區(qū)的文件都沒有任何變化。(3)不過,從現(xiàn)在開始,對工作區(qū)的修改和提交就是dev 分支了,比如新提交一次后,dev 指針往前移動一步,而 master 指針不變:(4)假如我們在 dev 上的

18、工作完成了,就可以把 dev 合并到 master 上。git怎么合并呢?最簡單的方法,就是直接把 master 指向 dev 的當前提交,就完成了合并:git 合并分支也很快,就改改指針,工作區(qū)內(nèi)容也不變。(5)合并完分支后,甚至可以刪除 dev 分支。刪除 dev 分支就是把 dev 指針給刪掉,刪掉后,我們就剩下了一條 master 分支:案例:(1)執(zhí)行如下命令可以查看當前有幾個分支并且看到在哪個分支下工作。(2)下面創(chuàng)建一個分支 dev 并切換到其上進行工作。(3)下面我們修改 code.txt 內(nèi)容,在里面添加一行,并進行提交。(4)dev 分支的工作完成,我們就可以切換回 mas

19、ter 分支:查看 code.txt,發(fā)現(xiàn)添加的內(nèi)容沒有了。因為那個提交是在 dev 分支上,而master 分支此刻的提交點并沒有變:(5)現(xiàn)在,我們把 dev 分支的工作成果合并到 master 分支上:git merge 命令用于合并指定分支到當前分支。合并后,再查看 code.txt的內(nèi)容,就可以看到,和 dev 分支的最新提交是完全一樣的。注意到上面的 Fast-forward 信息,Git 告訴我們,這次合并是“快進模式”,也就是直接把 master 指向 dev 的當前提交,所以合并速度非常快。(6)合并完成后,就可以放心地刪除 dev 分支了,刪除后,查看 branch,就只剩

20、下 master 分支了。小結(jié):查看分支:gitbranch創(chuàng)建分支:gitbranch <name>切換分支:gitcheckout <name>創(chuàng)建+切換分支:git checkout -b <name>合并某分支到當前分支:git merge <name>刪除分支:git branch -d <name>5.3 解決合并分支往往也不是一帆風順的。(1)再創(chuàng)建一個新分支 dev。(2)修改 code.txt 內(nèi)容,并進行提交。(3)切換回 master 分支。(4)在 master 的 code.txt 添加一行內(nèi)容并進行提交?,F(xiàn)

21、在,master 分支 dev 分支各自都分別有新的提交,變成了這樣:這種情況下,git 無法執(zhí)行“快速合并”,只能試圖把各自的修改合并起來,但這種合并就可能會有。(5)執(zhí)行如下命令嘗試將 dev 分支合并到 master 分支上來。git 告訴我們,code.txt 文件存在,必須手動解決后再提交。(6)git status 也可以告訴我們的文件:(7)查看 code.txt 的內(nèi)容。(8)git 用<<<<<<<,=,>>>>>>>標記出不同分支的內(nèi)容,我們修改如下后保存:(10) 再提交。(11) 現(xiàn)在,

22、master 分支和 dev 分支變成了下圖所示:(11)用帶參數(shù)的 git log 也可以看到分支的合并情況:(12)最后工作完成,可以刪除 dev 分支。5.4 分支管理策略通常,合并分支時,如果可能,git 會用 fast forward 模式,但是有些快速合并不能而且合并時沒有,這個時候會合并之后并做一次新的提交。但這種模式下,刪除分支后,會丟掉分支信息。(1)創(chuàng)建切換到 dev 分支下。(2)新建一個文件 code3.txt 編輯內(nèi)容如下,并提交一個 commit。(3)切換回 master 分支,編輯 code.txt 并進行一個提交。(4)合并 dev 分支的內(nèi)容到 master

23、 分支。(5)出現(xiàn)如下提時,這是因為這次不能進行快速合并,所以 git 提示輸入合并說明信息,輸入之后合并內(nèi)容之后 git 會自動創(chuàng)建一次新的提交。(6)使用分支命令查看分支信息。(7)刪除 dev 分支。如果要強制禁用 fast forward 模式,git 就會在 merge 時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。(1)創(chuàng)建并切換到 dev 分支。(2)修改 code.txt 內(nèi)容,并提交一個 commit。(3)切換回 master 分支。(4)準備合并 dev 分支,請注意-no-ff 參數(shù),表示禁用 Fastforward:因次合并要創(chuàng)建一個新的 comm

24、it,所以加上-m 參數(shù),把 commit 描述寫進去。(5)合并后,我們用 git log 看看分支歷史:可以看到,不使用 Fast forward 模式,merge 后就像這樣:5.5 Bug 分支軟件開發(fā)中,bug 就像家常便飯一樣。有了 bug 就需要修復,在 git 中,由于分支是如此的強大,所以,每個 bug 都可以通過一個新的臨時分支來修復,修復后,合并分支,然后將臨時分支刪除。(1)當你接到一個修復一個代號 001 的 bug 的任務(wù)時,很自然地,你想創(chuàng)建一個分支 bug-001 來修復它,但是,等等,當前正在 dev 上進行的工作還沒有提交:并不是你不想提交,而是工作只進行到

25、一半,還沒法提交,預計完成還需 1 天時間。但是,必須在兩個小時內(nèi)修復該 bug,怎么辦?(2)git 還提供了一個 stash 功能,可以把當前工作現(xiàn)場“儲藏”起來,等以后恢復現(xiàn)場后繼續(xù)工作:(3)首先確定要在哪個分支上修復 bug,假定需要在 master 分支上修復,就從 master 創(chuàng)建臨時分支:(4)現(xiàn)在修復 bug,把 最后一行刪掉,然后提交。(5)修復完成后,切換到 master 分支,并完成合并,最后刪除 bug-001 分支。(7) 現(xiàn)在 bug-001 修復完成,是時候回到 dev 分支接著干活了!(8)工作區(qū)是干凈的,剛才的工作現(xiàn)場存到哪去了?用 git stash l

26、ist命令看看:作業(yè)現(xiàn)場還在,git 把 stash 內(nèi)容存在某個地方了,但是需要恢復一下.小結(jié):修復 bug 時,我們會通過創(chuàng)建新的 bug 分支進行修復,然后合并,最后刪除;當手頭工作沒有完成時,先把工作現(xiàn)場 git stash 一下,然后去修復 bug,修復后,再 git stash pop,恢復工作現(xiàn)場。6. 使用地址/去首先你要現(xiàn)有一個賬戶,打開一個賬號,完成之后登陸6.1 創(chuàng)建倉庫(1)賬戶,登錄后,點擊"New respository "(2)在新頁面中,輸入項目的名稱,勾選'readme.md',點擊'createrepository'(3)添加后,轉(zhuǎn)到文件列表頁面.6.2 添加 ssh 賬戶(1)點擊賬戶頭像后的下拉三角,選擇'settings'如果某臺需要與上的倉庫交互,那么就要把這臺的 ssh 公鑰添加到這個賬戶上點擊'SSH andGPG keys',添加 ssh 公鑰。(2)在 ubuntu令行中,回到用戶的主目錄

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論