Git學習 Chapter 1——Class 4:Git中的文件比對

        首先聲明,本書的知識總結來源於《完全學會Git,GitHub,Git Server的24堂課》一書,如有任何疑問請參考原書內容查證,我這裏更多的只是記錄,也會盡量結合自己的學習和使用經驗加一些自己的體會。Git安裝請移步至Git中文官網或者百度一下

1,本篇內容

本篇主要介紹一下在Git中如何通過指令進行文件夾中文件,已添加索引文件以及倉庫中文件的比對以及如何倉庫中取出文件,主要內容包括:

  • 文件差異性比較
  • 從倉庫中取文件
  • 修改文件名稱
  • 暫存文件或者文件夾狀態
  • 清理文件

 

2,詳細內容

2.1 文件的差異性比較

我們知道,文件有三種,一種是放在文件夾中,一種是已經添加到索引的,還有一種是已經提交到倉庫的。所以,比較不同文件之間的差異性對應的指令也不太一樣;書中有一張圖很好,但是我這邊不太方便放,所以我就簡單列舉一下:

  • git diff(difftool) fileName:表示比較文件夾文件與索引中或者倉庫中的區別
  • git diff(difftoll) --cache  fileName:表示比較索引中與倉庫中文件的差異性
  • git diff(difftoll) 節點  fileName:表示比較索引中與倉庫中文件的差異性
  • git diff(difftool) 節點1 節點2 fileName:表示比較倉庫中兩個簡單文件的差異性
  • git diff --no-index fileName1 fileName2:表示比較文件夾中兩個文件的差異性

下面簡單演示一下幾條語句的實際操作效果:

上面是使用git diff指令查看,可能不是很明顯,我們可以通過上週學習的設置的BCompare來實現,下面就來看一下比對效果:

可見,最後一條比較文件夾中的文件指令,並沒有出現我們的比對工具。

2.2 從文檔庫中取文件

這部分相對簡單,主要就是git checkout的指令的延伸,我們可以根據添加不同的參數來取不同的文件,不同節點的文件等等功能

  • git checkout 節點標識 fileName1 fileName2 ...

在這裏,有一點需要特別注意,那就是我們取出的文件內容和Git中最新版本該文件內容不一致時,這個取出的文件內容會自動記錄到索引中,之後執行commit指令的話,該文本的內容會更新到最新的版本中,如果需要避免這個問題,在取出文件後執行下面指令清除Git索引:

  • git reset HEAD

這裏我只演示前半部分,後半部分就不演示了:

 

其實除了通過文件名進行文件查找外,還可以通過字符串進行文件查找:

  • git grep 'string content' 節點標識:查找指定節點含有字符串的文件
  • git grep -e 'string1' -e 'string2' 節點標識:查找指定節點含有字符串1或者2的文件
  • git grep -e 'string1' --and -e 'string2' 節點標識:查找指定節點含有字符串1和2的文件

上面字符串之間與或關係還可以組合進行,比如下面這一條:

git grep \(-e 'string1' -e 'string2'\) --and \(-e 'string3' -e 'string4'\) 節點標識

2.3 修改文件的名稱

兩種方式:

  • 先使用PC 資源管理器修改,添加再提交,Git會判斷文件內容,如果一樣則刪除文檔庫中文件,添加最新提交文件
  • 直接通過git mv oldName newName,然後提交即可

下面就來看一下:

上面的示例演示通過git mv指令修改e.txt爲ee.txt,在通過windows資源管理器方式把ee.txt改爲e.txt。

2.4 暫存文件的狀態與清理Git文檔庫

暫存文件的狀態指的是暫存當前文件夾中文件的內容,然後把最新的節點文件同步到本地文件夾,我們結合最新的節點進行其他的工作開發,然後再恢復到之前文件的狀態,主要的指令如下:

  • git stash save:存儲Git追蹤文件與最新節點文件之間的差異性,並把被追蹤的文件還原成成最新節點的文件
  • git checkout 節點標識 . :取出執行上面指令時保存在文檔庫中文檔版本
  • git stash pop/apply:取出暫存文件,併合併到當前文件夾文件中

上面說的有點饒人,下面看一下具體的演示就明白了:

 

關於上面需要注意一下:

(1)因爲我暫存狀態之後,沒有做任何操作,比如你提交了一次commit之後,那麼後面的取對比文件版本就使用:

git checkout HEAD^1 .

(2)注意,比較不同狀態文件內容之間的差異性

關於清理Git文檔(也即垃圾回收gc)這一塊;我們主要先了解一下幾條指令的概念:

  • git  gc :執行默認的清理流程
  • git  gc -aggresive:比較細緻的檢查和清理文件,耗時,不建議常用
  • git  gc --auto:會先判斷當前Git庫是否需要清理
  • git  gc --no-prune:要求Git不要清理不使用的文件,只需要整理即可。

後續每週固定更新4篇左右,共24課,預計5-6周更新完成。歡迎掃碼關注:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章