1. 程式人生 > >Git本地庫中的索引(Index)及檔案狀態概述

Git本地庫中的索引(Index)及檔案狀態概述

Git本地庫中的索引Index就是一個二進位制檔案,預設儲存在.git/index路徑下。

1.索引

索引中包含一個列表,列表根據檔名、檔案模式和檔案元資料進行了排序,以便快速檢測檔案的變化。

索引中還包含所有Blob型別的SHA-1識別符號。

2.Git檔案狀態

對於新建立的一個檔案,其狀態為untracked。

通過git add ...命令,可以將該新建檔案的狀態轉換為staged,這個過程就是將新建檔案加入到Index中。

通過git commit命令,可以將處於staged狀態的檔案提交到本地庫的HEAD。

3.git checkout-index命令

將Index中列表的檔案檢出到工作目錄,預設不覆蓋已有檔案。

  • -u, --index,更新所有檢出的檔案的stat資訊(git status)
  • -a, --all,檢出Index中列表的所有檔案
  • -f, --force,檢出時覆蓋已有檔案
  • -n, --no-create,只再次檢出工作目錄中已有的檔案(不建立任何新檔案)
  • --,禁用任何引數
例如:
  • 從Index檢出已有檔案的最新版本,並覆蓋
git checkout-index -n -f
  • 檢出全部檔案到git-export-dir目錄
git checkout-index -a --prefix=git-export-dir/
  • 檢出檔案Makefile,並重命名為.merged-Makefile

git checkout-index --prefix=.merged- Makefile

4.git update-index命令
將工作目錄中的檔案加入到index列表中。
不建議使用該命令,同樣情況下推薦使用git add

如下命令完全等價:

  • 為myFile檔案設定可執行許可權
git add --chmod=+x myFile
git update-index --chmod=+x myFile
  • 為myFile檔案撤銷可執行許可權

git add --chmod=-x myFilegit update-index --chmod=-x myFile

5.git merge-index命令
為Index中需要合併的檔案執行合併操作。
基本用法:

git merge-index [-o] [-q] <merge-program> (-a | [--] <file>*)

示例:

git merge-index cat a_script_file

6.git diff-index命令

該命令比較複雜,我們稍後將詳述。