快速學習Git-Tortoise Git使用指南

  • 2019 年 12 月 25 日
  • 筆記

創建版本庫

什麼是版本庫呢?版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄裡面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以「還原」。由於git是分散式版本管理工具,所以git在不需要聯網的情況下也具有完整的版本管理能力。

創建一個版本庫非常簡單,可以使用git bash也可以使用tortoiseGit。首先,選擇一個合適的地方,創建一個空目錄(D:tempgitrepository)。

使用Git Bash

在當前目錄中點擊右鍵中選擇Git Bash來啟動。

或者在開始菜單中啟動。注意如果是從開始菜單啟動的gitbash需要切換目錄到倉庫所在的目錄。

創建倉庫執行命令:

$ git init
使用Tortoise Git

使用Tortoise Git時只需要在目錄中點擊右鍵菜單選擇「在這裡創建版本庫」

版本庫創建成功,會在此目錄下創建一個.git的隱藏目錄,如下所示:

在windows中如何顯示隱藏目錄隱藏目錄請自行百度

概念版本庫:「.git」目錄就是版本庫,將來文件都需要保存到版本庫中。 工作目錄:包含「.git」目錄的目錄,也就是.git目錄的上一級目錄就是工作目錄。只有工作目錄中的文件才能保存到版本庫中。

添加文件
添加文件過程

在D:tempgitrepository目錄下創建一個mytest.txt文件

文本文件變為帶「+」號的圖標:

提交文件:在mytest.txt上再次點擊右鍵選擇「提交」,此時將文件保存至版本庫中。

工作區和暫存區

Git和其他版本控制系統如SVN的一個不同之處就是有暫存區的概念。

什麼是工作區(Working Directory)? 工作區就是你在電腦里能看到的目錄,比如我的reporstory文件夾就是一個工作區。

有的同學可能會說repository不是版本庫嗎怎麼是工作區了?其實repository目錄是工作區,在這個目錄中的「.git」隱藏文件夾才是版本庫。這回概念清晰了吧。

Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。

如下圖所示:

分支和HEAD的概念我們稍後再講。前面講了我們把文件往Git版本庫里添加的時候,是分兩步執行的:

  • 第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
  • 第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。

因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改。 你可以簡單理解為,需要提交的文件修改通通放到暫存區,然後,一次性提交暫存區的所有修改。

修改文件
提交修改

被版本庫管理的文件不可避免的要發生修改,此時只需要直接對文件修改即可。修改完畢後需要將文件的修改提交到版本庫。 在mytest.txt文件上點擊右鍵,然後選擇「提交」

查看修改歷史

在開發過程中可能會經常查看程式碼的修改歷史,或者叫做修改日誌。來查看某個版本是誰修改的,什麼時間修改的,修改了哪些內容。 可以在文件上點擊右鍵選擇「顯示日誌」來查看文件的修改歷史。

差異比較

當文件內容修改後,需要和修改之前對比一下修改了哪些內容此時可以使用「比較差異功能」

還原修改

當文件修改後不想把修改的內容提交,還想還原到未修改之前的狀態。此時可以使用「還原」功能

注意:此操作會撤銷所有未提交的修改,所以當做還原操作是需要慎重慎重!!!

刪除文件

需要刪除無用的文件時可以使用git提供的刪除功能直接將文件從版本庫中刪除。

將java工程提交到版本庫

第一步:將參考資料中的java工程project-test複製到工作目錄中

第二步:將工程添加到暫存區

點擊確定完成暫存區添加。

忽略文件或文件夾

在此工程中,並不是所有文件都需要保存到版本庫中的例如「bin」目錄及目錄下的文件就可以忽略。好在Git考慮到了大家的感受,這個問題解決起來也很簡單,在Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去,Git就會自動忽略這些文件。

如果使用TortoiseGit的話可以使用菜單項直接進行忽略。

選擇保留本地文件。完成後在此文件夾內會多出一個.gitignore文件,這個文件就是文件忽略文件,當然也可以手工編輯。其中的內容就是把bin目錄忽略掉。

提交程式碼

將程式碼添加到master分支上,其中.gitignore文件也需要添加到暫存區,然後提交到版本庫。

忽略文件語法規範
空行或是以 # 開頭的行即注釋行將被忽略。  可以在前面添加正斜杠 / 來避免遞歸,下面的例子中可以很明白的看出來與下一條的區別。  可以在後面添加正斜杠 / 來忽略文件夾,例如 build/ 即忽略build文件夾。  可以使用 ! 來否定忽略,即比如在前面用了 *.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