Git(一)Git的簡介安裝與本地倉庫文件可視化管理
一.git歷史
同生活中的許多偉大事件一樣,Git 誕生於一個極富紛爭大舉創新的年代。Linux 內核開源項目有著為數眾廣的參與者。絕大多數的 Linux 內核維護工作都花在了提交補丁和保存歸檔的繁瑣事務上(1991-2002年間)。到 2002 年,Linux系統已經發展了十年了,代碼庫之大讓Linus很難繼續通過手工方式管理了,於是整個項目組開始啟用分布式版本控制系統 BitKeeper 來管理和維護代碼。
到 2005 年的時候,開發 BitKeeper 的商業公司同 Linux 內核開源社區的合作關系結束,他們收回了免費使用 BitKeeper 的權力。這就迫使 Linux 開源社區(特別是
- 速度
- 簡單的設計
- 對非線性開發模式的強力支持(允許上千個並行開發的分支)
- 完全分布式
- 有能力高效管理類似 Linux 內核一樣的超大規模項目(速度和數據量)
二.git與svn的區別
1.svn
SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央服務器哪裏得到最新的版本,然後幹活,幹完後,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作,如果在局域網還可以,帶寬夠大,速度夠快,如果在互聯網下,如果網速慢的話,就郁悶了。
下圖就是標準的集中式版本控制工具管理方式:
集中管理方式在一定程度上看到其他開發人員在幹什麽,而管理員也可以很輕松掌握每個人的開發權限。
但是相較於其優點而言,集中式版本控制工具缺點很明顯:
- 服務器單點故障
- 容錯性差
2.git
Git是分布式版本控制系統,那麽它可以沒有中央服務器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因為版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。
下圖就是分布式版本控制工具管理方式:
三.git的工作流程
一般工作流程如下:
1.從遠程倉庫中克隆 Git 資源作為本地倉庫。
2.從本地倉庫中checkout代碼然後進行代碼修改
3.在提交前先將代碼提交到暫存區。
4.提交修改。提交到本地倉庫。本地倉庫中保存修改的各個歷史版本。
5.在修改完成後,需要和團隊成員共享代碼時,可以將代碼push到遠程倉庫。
下圖展示了 Git 的工作流程:
四.git安裝
最早Git是在Linux上開發的,很長一段時間內,Git也只能在Linux和Unix系統上跑。不過,慢慢地有人把它移植到了Windows上。現在,Git可以在Linux、Unix、Mac和Windows這幾大平臺上正常運行了。由於開發機大多數情況都是windows,所以本教程只講解windows下的git的安裝及使用。
1.windows安裝
1)下載地址:https://git-scm.com/download
我這裏下載的對應64位操作系統的
第三方可視化工具裏這裏選擇TortoiseGit ,TortoiseGit安裝先決條件必須是windowns7以上,詳情請看:https://tortoisegit.org/support/faq/#prerequisites
下載地址:https://tortoisegit.org/download/ ,客戶化工具中文漢化包獨立安裝,也需要下載。
下載完成有如下三個文件
2)安裝
安裝git for windows
Next選擇安裝路徑,然後一路使用默認選項安裝直到完成。
安裝TortoiseGit
Next選擇安裝路徑,然後一路next直到出現配置界面
選擇English,接著繼續下一步,檢查安裝環境
配置用戶名,郵箱
下一步,默認選項,完成安裝。安裝完畢後在系統右鍵菜單中會出現git的菜單項
安裝中文語言包
直接“下一步”完整完畢。鼠標右鍵選擇Settings
語言包安裝完畢後可以在TortoiseGit的設置中調整語言
2.Linux上安裝
[admin@node21 ~]$ sudo yum -y install git [admin@node21 ~]$ git --version git version 1.8.3.1
五.使用git管理文件版本
1.創建版本庫
什麽是版本庫呢?版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄裏面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。由於git是分布式版本管理工具,所以git在不需要聯網的情況下也具有完整的版本管理能力。
創建一個版本庫非常簡單,可以使用git bash也可以使用tortoiseGit。首先,選擇一個合適的地方,創建一個空目錄(D:\Develop\Git\git)。
使用GitBash,在當前目錄中點擊右鍵中選擇Git Bash來啟動。
黑窗口創建倉庫執行命令: $ git init
使用tortoiseGit
使用TortoiseGit時只需要在目錄(D:\Develop\Git\git)中點擊右鍵菜單選擇“Git在這裏創建版本庫”
點擊確定,創建成功 。
版本庫創建成功,會在此目錄下創建一個.git的隱藏目錄,如上所示。
版本庫:“.git”目錄就是版本庫,將來文件都需要保存到版本庫中。工作目錄:包含“.git”目錄的目錄,也就是.git目錄的上一級目錄就是工作目錄。只有工作目錄中的文件才能保存到版本庫中。
2.添加文件
1) 添加文件步驟
在D:\Develop\Git\git目錄下創建一個test.txt文件,刷新如下,標記藍色?
在git目錄內點擊test.txt文件右鍵客戶端工具點擊添加
提示添加成功,點擊確定,此時 標記藍色?變為藍色 +
此時,git目錄裏隱藏文件 .git 會多差一個暫存區index文件。
提交文件
在test.txt上再次點擊右鍵選擇“提交”,此時將文件保存至版本庫中。
日誌信息輸入提交信息(必填項)
點擊提交
至此,添加文件並提交到本地倉庫完成,文本文件變為帶“√”號的圖標:標記藍色 + 變為綠色√
2)工作區和暫存區
Git和其他版本控制系統如SVN的一個不同之處就是有暫存區的概念。
什麽是工作區(Working Directory)?
工作區就是你在電腦裏能看到的目錄,比如我的git文件夾就是一個工作區。其實git目錄是工作區,在這個目錄中的“.git”隱藏文件夾才是版本庫。
Git的版本庫裏存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。
如下圖所示:
分支和HEAD的概念我們稍後再講。前面講了我們把文件往Git版本庫裏添加的時候,是分兩步執行的:
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改。可以簡單理解為,需要提交的文件修改通通放到暫存區,然後,一次性提交暫存區的所有修改。
3.修改文件
1)提交修改
被版本庫管理的文件不可避免的要發生修改,此時只需要直接對文件修改即可。修改完畢後需要將文件的修改提交到版本庫。在修改後的test.txt(修改後圖標變成紅色感嘆號)文件上點擊右鍵,然後選擇“提交”,和之前的提交方式一樣。
2)查看修改歷史
在開發過程中可能會經常查看代碼的修改歷史,或者叫做查看代碼的修改日誌。用來查看某個版本是誰修改的,什麽時間修改的,修改了哪些內容。
可以在文件上點擊右鍵選擇“顯示日誌”來查看文件的修改歷史。
3)差異比較
當文件內容修改後,需要和修改之前對比一下修改了哪些內容此時可以使用“比較差異功能”
4)還原修改
當文件修改後不想把修改的內容提交,還想還原到未修改之前的狀態。此時可以使用“還原”功能。
註意:此操作會撤銷所有未提交的修改,所以當做還原操作是需要慎重慎重!!!
4.刪除文件
需要刪除無用的文件時可以使用git提供的刪除功能直接將文件從版本庫中刪除。
5.還原刪除文件
6.案例:將項目提交到版本庫
第一步:把已有java工程solr-demo復制到工作目錄中
第二步:將工程添加到暫存區。
點擊確定完成暫存區添加。
三、忽略文件或文件夾
在此工程中,並不是所有文件都需要保存到版本庫中的例如“.idea”目錄及目錄下的文件就可以忽略。好在Git考慮到了大家的感受,這個問題解決起來也很簡單,在Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去,Git就會自動忽略這些文件。
如果使用TortoiseGit的話可以使用菜單項直接進行忽略。(這裏以IDEA項目演示)
選擇保留本地文件。完成後在此文件夾內會多出一個.gitignore文件,這個文件就是文件忽略文件,當然也可以手工編輯。其中的內容就是把.idea目錄忽略掉。
同樣步驟再次把target目錄忽略
四、提交代碼
將代碼添加到master分支上,其中.gitignore文件也需要添加到暫存區,然後提交到版本庫。
提交
7.忽略文件語法規範
空行或是以 # 開頭的行即註釋行將被忽略。 可以在前面添加正斜杠 / 忽略當前路徑文件,但不包括子目錄的同名文件。 可以在後面添加正斜杠 / 來忽略文件夾。 可以使用 ! 來否定忽略,即比如在前面用了 *.apk ,然後使用 !a.apk ,則這個a.apk不會被忽略。 * 用來匹配零個或多個字符,如 *.[oa] 忽略所有以".o"或".a"結尾, *~ 忽略所有以 ~ 結尾的文件(這種文件通常被許多編輯器標記為臨時文件); [] 用來匹配括號內的任一字符,如 [abc] ,也可以在括號內加連接符,如 [0-9] 匹配0至9的數; ? 用來匹配單個字符。 看了這麽多,還是應該來個例子: # 忽略 .a 文件 *.a # 但否定忽略 lib.a, 盡管已經在前面忽略了 .a 文件 !lib.a # 僅在當前目錄下忽略 TODO 文件, 但不包括子目錄下的 subdir/TODO /TODO # 忽略 build/ 文件夾下的所有文件 build/ # 忽略 doc/notes.txt, 不包括 doc/server/arch.txt doc/*.txt # 忽略所有的 .pdf 文件 在 doc/ directory 下的 doc/**/*.pdf
Git中文文檔:https://git-scm.com/book/zh/v2
Git(一)Git的簡介安裝與本地倉庫文件可視化管理