GIT底層命令之git ls files

2021-10-02 06:43:01 字數 4979 閱讀 2274

git-ls-files  - 顯示有關索引和工作樹中檔案的資訊

git ls-files [-z] [-t] [-v] [-f]

(--[cached|deleted|others|ignored|stage|unmerged|killed|modified])*

(-[c|d|o|i|s|u|k|m])*

[--eol]

[-x |--exclude=]

[-x |--exclude-from=]

[--exclude-per-directory=]

[--exclude-standard]

[--error-unmatch] [--with-tree=]

[--full-name] [--recurse-submodules]

[--abbrev] [--] […​]

這將目錄快取索引中的檔案列表與實際工作目錄列表合併,並顯示兩者的不同組合。

下面的乙個或多個選項可用於確定顯示的檔案:

-c   --cached

在輸出中顯示快取的檔案(預設)

-d --deleted

在輸出中顯示已刪除的檔案

-m --modified

在輸出中顯示已修改的檔案

-o --others

在輸出中顯示其他(即未跟蹤的)檔案

-i --ignored

在輸出中只顯示被忽略的檔案。在索引中顯示檔案時,只列印排除模式匹配的檔案。顯示「其他」檔案時,只顯示通過排除模式匹配的檔案。

-s --stage

在輸出中顯示暫存內容的模式位,物件名稱和階段編號。

--directory

如果整個目錄被分類為「其他」,則只顯示其名稱(帶有斜線)而不是其全部內容。

--no-empty-directory

不要列出空目錄。沒有 - 目錄無效。

-u --unmerged

在輸出中顯示未合併的檔案(forces --stage)

-k --killed

在檔案系統上顯示由於檔案/目錄衝突而需要刪除的檔案以使checkout-index成功。

-z\0行輸出終止,不要引用檔名。有關更多資訊,請參閱下面的output。

-x --exclude=跳過未匹配的檔案匹配模式。請注意,模式是乙個外殼萬用字元模式。有關更多資訊,請參閱下面的exclude patterns。

-x --exclude-from=從讀取排除模式; 每行1個。

--exclude-per-directory=讀取僅適用於中的目錄及其子目錄的其他排除模式。

--exclude-standard

在每個目錄中新增標準git排除項:.git / info / exclude,.gitignore和使用者的全域性排除檔案。

--error-unmatch

如果任何沒有出現在索引中,則將其視為錯誤(返回1)。

--with-tree=當使用--error-unmatch將使用者提供的(即路徑模式)引數展開為路徑時,假定自從指定的後索引中刪除的路徑仍存在。使用此選項-s或-u選項沒有任何意義。

-t此功能已半棄用。對於編寫指令碼的目的,git-status [1] --porcelain和git-diff-files [1] --name-status幾乎總是優越的選擇,使用者應該檢視git-status [1] --short或git-diff [1] --name-status以獲得更多使用者友好的選擇。

此選項在每行開始時用以下標記(後跟乙個空格)標識檔案狀態:h快取

sskip-worktree

m未合併

rremoved/deleted

cmodified/changed

kto be killed

?other

-v與-t標記為assume unchanged(請參閱git-update-index [1])的檔案類似,但使用小寫字母。

--full-name

從子目錄執行時,該命令通常會輸出相對於當前目錄的路徑。該選項強制相對於專案頂部目錄輸出路徑。

--recurse-submodules

在儲存庫中的每個子模組上遞迴呼叫ls-files。目前只支援 - 快取記憶體模式。

--abbrev=不顯示完整的40位元組十六進製制物件行,只顯示部分字首。非預設位數可以用--abbrev = 來指定。

--debug

在描述檔案的每一行之後,新增更多關於其快取條目的資料。這旨在顯示盡可能多的手動檢查資訊; 確切的格式可能會隨時更改。

--eol

顯示檔案的和。是當「text」屬性為「auto」(或未設定且core.autocrlf不為false)時由git使用的檔案內容標識。是「文字」,「無」,「lf」,「crlf」,「混合」或「」。

「」表示該檔案不是常規檔案,它不在索引中或在工作樹中無法訪問。

它是「」,「 - text」,「text」,「text = auto」,「text eol = lf」,「text eol = crlf」時檢查或提交時使用的屬性。由於支援git 2.10「text = auto eol = lf」和「text = auto eol = crlf」。

索引(「i / 」)和工作樹(「w / 」)中的均顯示為常規檔案,後面跟著(「attr / 」)。

不要將更多的引數解釋為選項。

要顯示的檔案。如果沒有給出檔案,則顯示與其他指定標準相匹配的所有檔案。

例子:我們在工作區新建了test2.txt和test3.txt,並檢視暫存區檔案的變化,

對這兩個檔案一起進行add,我們檢視index發現這兩個檔案的sha-1值是一樣的e69de29bb2d1d6434b8b29ae775ad8c2e48c5391

然後給test2.txt檔案新增內容"test2 first line"並add,發現兩個值不一樣了

yaosht@yaosht-pc mingw64 ~/gitclient (master)

$ touch test2.txt

yaosht@yaosht-pc mingw64 ~/gitclient (master)

$ touch test3.txt

yaosht@yaosht-pc mingw64 ~/gitclient (master)

$ git status

on branch master

changes to be committed:

(use "git restore --staged ..." to unstage)

modified: test.txt

untracked files:

(use "git add ..." to include in what will be committed)

test2.txt

test3.txt

yaosht@yaosht-pc mingw64 ~/gitclient (master)

$ git add test2.txt test3.txt

yaosht@yaosht-pc mingw64 ~/gitclient (master)

$ git status

on branch master

changes to be committed:

(use "git restore --staged ..." to unstage)

modified: test.txt

new file: test2.txt

new file: test3.txt

yaosht@yaosht-pc mingw64 ~/gitclient (master)

$ cd .git

lyaosht@yaosht-pc mingw64 ~/gitclient/.git (git_dir!)

$ git ls-files -s

100644 54b2fa9ce1e9110abf16bfa55053aef717a6c8e8 0 .gitignore

100644 b180ac571959898b0587adcc61376b06947e9aae 0 readme.en.md

100644 a8bce25e3e3ef95a8aded942c12fd54d5c70b589 0 readme.md

100644 08fe2720d8e3fe3a5f81fbb289bc4c7a522f13da 0 test.txt

100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 test2.txt

100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 test3.txt

yaosht@yaosht-pc mingw64 ~/gitclient (master)

$ echo "test2 first line" >> test2.txt

yaosht@yaosht-pc mingw64 ~/gitclient/.git (git_dir!)

$ git ls-files -s

100644 54b2fa9ce1e9110abf16bfa55053aef717a6c8e8 0 .gitignore

100644 b180ac571959898b0587adcc61376b06947e9aae 0 readme.en.md

100644 a8bce25e3e3ef95a8aded942c12fd54d5c70b589 0 readme.md

100644 08fe2720d8e3fe3a5f81fbb289bc4c7a522f13da 0 test.txt

100644 a2246f0bf1a5f2cb401c8ad02d37f442bc1e18a8 0 test2.txt

100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 test3.txt

git底層命令

cd d git 進入d git目錄下 git init 初始化 git config user.name hxd 建立使用者 git config user.email hxd 163.com 建立使用者郵件 cat git config 檢視使用者資訊 echo 11111 hxd.log 建立...

Git 底層原理

二.git 目錄結構 三.git add 與 git commit 簡單原理 四.建立與合併分支簡單原理 五.git rebase 簡單原理 六.開始從底層入手 git 七.git add 命令底層原理 八.git add 和 git commit 中間的操作 tree 物件的生成 九.git co...

git底層實現

通過使用本地git看一下git的add,commit是在幹什麼,分支又是什麼 add commit在幹什麼 git中有乙個物件資料庫,存放三種物件blob tree和commit find git objects type f 檢視所有物件blob是檔案內容,tree是檔案目錄結構,以下幾條命令實現...