亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

directory search
Guides gitattributes giteveryday gitglossary gitignore gitmodules gitrevisions gittutorial gitworkflows Administration git archive git bundle git clean git filter-branch git fsck git gc git instaweb git reflog Basic Snapshotting git add git commit git diff git mv git reset git rm git status Branching and Merging git branch git checkout git log git merge git mergetool git stash git tag Debugging git bisect git blame git grep Email git am git format-patch git request-pull git send-email External Systems git fast-import git svn Getting and Creating Projects git clone git init Git git annotate git archimport git bisect-lk2009 git check-attr git check-mailmap git check-ref-format git checkout-index git cherry git citool git column git credential git credential-cache git credential-store git cvsexportcommit git cvsimport git cvsserver git diff-files git diff-tree git difftool git fast-export git fetch-pack git fmt-merge-msg git get-tar-commit-id git gui git http-backend git http-fetch git http-push git imap-send git index-pack git interpret-trailers git ls-remote git ls-tree git mailinfo git mailsplit git merge-file git merge-index git merge-one-file git merge-tree git mktag git mktree git name-rev git notes git p4 git pack-objects git pack-redundant git pack-refs git parse-remote git patch-id git prune git prune-packed git quiltimport git receive-pack git remote-ext git remote-fd git remote-testgit git repack git replace git rerere git send-pack git sh-i18n git sh-setup git shell git show-branch git show-index git stripspace git unpack-file git unpack-objects git upload-archive git upload-pack git var git verify-commit git verify-tag git whatchanged git worktree Inspection and Comparison git describe git shortlog git show Miscellaneous api credentials api index gitcli gitcore tutorial gitcredentials gitcvs migration gitdiffcore githooks gitk gitnamespaces gitremote helpers gitrepository layout gitsubmodules gittutorial 2 gitweb gitweb.conf pack format User Manual Patching git apply git cherry-pick git rebase git revert Plumbing Commands git cat-file git check-ignore git commit-tree git count-objects git diff-index git for-each-ref git hash-object git ls-files git merge-base git read-tree git rev-list git rev-parse git show-ref git symbolic-ref git update-index git update-ref git verify-pack git write-tree Server Admin git daemon git update-server-info Setup and Config git git config git help Sharing and Updating Projects git fetch git pull git push git remote git submodule
characters

名字

git-update-index  - 將工作樹中的文件內(nèi)容注冊到索引

概要

git update-index             [--add] [--remove | --force-remove] [--replace]             [--refresh] [-q] [--unmerged] [--ignore-missing]             [(--cacheinfo <mode>,<object>,<file>)…]             [--chmod=(+|-)x]             [--[no-]assume-unchanged]             [--[no-]skip-worktree]             [--ignore-submodules]             [--[no-]split-index]             [--[no-|test-|force-]untracked-cache]             [--really-refresh] [--unresolve] [--again | -g]             [--info-only] [--index-info]             [-z] [--stdin] [--index-version <n>]             [--verbose]             [--] [<file>…]

描述

修改索引或目錄緩存。提到的每個文件都更新到索引中,并清除任何unmergedneeds updating狀態(tài)。

另請參閱 git-add [1] ,以更友好的方式對索引執(zhí)行一些最常見的操作。

git update-index處理文件的方式可以使用各種選項進行修改:

選項

--add

如果指定的文件不在索引中,則會添加它。默認行為是忽略新文件。

--remove

如果指定的文件在索引中但缺失,則將其刪除。默認行為是忽略已刪除的文件。

--refresh

查看當前索引,并通過檢查 stat()信息來檢查是否需要合并或更新。

-q

quiet。如果--refresh發(fā)現(xiàn)索引需要更新,則默認行為是錯誤的。git update-index無論如何,這個選項會繼續(xù)。

--ignore-submodules

不要嘗試更新子模塊。此選項僅在通過 --refresh 之前通過。

--unmerged

如果 --refresh 在索引中發(fā)現(xiàn)未合并的更改,則默認行為是錯誤的。git update-index無論如何,這個選項會繼續(xù)。

--ignore-missing

在 --refresh 時忽略丟失的文件

--cacheinfo <mode>,<object>,<path>   --cacheinfo <mode> <object> <path>

直接將指定的信息插入索引。為了向后兼容,您還可以將這三個參數(shù)作為三個單獨的參數(shù),但鼓勵新用戶使用單參數(shù)表單。

--index-info

從標準輸入讀取索引信息。

--chmod=(+|-)x

設(shè)置更新文件的執(zhí)行權(quán)限。

--no-assume-unchanged

當指定此標志時,為路徑記錄的對象名稱不會更新。相反,該選項設(shè)置/取消路徑的“假定不變”位。當“假設(shè)不變”位打開時,用戶承諾不更改文件,并允許 Git 假定工作樹文件與索引中記錄的內(nèi)容匹配。如果你想改變工作樹文件,你需要取消設(shè)置該位以告訴 Git 。當在一個非常緩慢的 lstat(2)系統(tǒng)調(diào)用的文件系統(tǒng)(例如 cifs )上處理大項目時,這有時會很有幫助。

如果需要在索引中修改此文件,例如合并提交時,Git 將失?。ㄕ#┮虼?,如果假設(shè)未跟蹤的文件在上游發(fā)生更改,則需要手動處理該情況。

--really-refresh

喜歡--refresh,但無條件地檢查統(tǒng)計信息,而不考慮“假定不變”設(shè)置。

--no-skip-worktree

當指定其中一個標志時,為路徑記錄的對象名稱不會更新。相反,這些選項設(shè)置和取消設(shè)置路徑的 “skip-worktree” 位。有關(guān)更多信息,請參見下面的 “Skip-worktree bit” 部分。

-g   --again

git update-index在索引條目與HEAD提交不同的路徑上運行。

--unresolve

如果文件被意外清除,則在合并期間恢復文件unmergedneeds updating狀態(tài)。

--info-only

不要在對象數(shù)據(jù)庫中為所有跟隨此標志的 <file> 參數(shù)創(chuàng)建對象; 只需將他們的對象 ID 插入索引。

--force-remove

即使工作目錄仍然有這樣的文件,也可以從索引中刪除文件。(暗示 --remove。)

--replace

默認情況下,當path索引中存在文件時,git update-index拒絕嘗試添加path/file。同樣,如果文件path/file存在,path則不能添加文件。使用 --replace 標志,與添加的條目發(fā)生沖突的現(xiàn)有條目將自動刪除警告消息。

--stdin

不要從命令行獲取路徑列表,請從標準輸入讀取路徑列表。路徑由 LF 分隔(即每行一個路徑)。

--verbose

報告索引中正在添加和刪除的內(nèi)容。

--index-version <n>

將結(jié)果索引寫入指定的磁盤格式版本中。支持的版本是2,3和4.當前的默認版本是2或3,取決于是否使用了額外的功能,例如git add -N

版本4執(zhí)行簡單的路徑名壓縮,可減少大型存儲庫中的索引大小30%-50%,從而縮短加載時間。版本4相對年輕(2012年10月首次發(fā)布于1.8.0)。其他 Git 實現(xiàn),如 JGit 和 libgit2 可能還不支持它。

-z

只對--stdin或有意義--index-info; 路徑用 NUL 字符而不是 LF 分隔。

--split-index   --no-split-index

啟用或禁用拆分索引模式。如果分割索引模式已經(jīng)啟用并--split-index再次提供,則 $ GIT_DIR / index 中的所有更改將被推回到共享索引文件。

這些選項會隨core.splitIndex配置變量的值生效(請參閱 git-config [1] )。但是當更改與配置的值相反時會發(fā)出警告,因為配置的值將在下次讀取索引時生效,并且這將消除該選項的預期效果。

--untracked-cache   --no-untracked-cache

啟用或禁用未跟蹤的緩存功能。--test-untracked-cache啟用之前請使用。

這些選項會隨core.untrackedCache配置變量的值生效(請參閱 git-config [1] )。但是當更改與配置的值相反時會發(fā)出警告,因為配置的值將在下次讀取索引時生效,并且這將消除該選項的預期效果。

--test-untracked-cache

只對工作目錄執(zhí)行測試以確??梢允褂梦锤櫟木彺妗H绻阏娴南胧褂盟?,你必須使用--untracked-cache或者之后--force-untracked-cachecore.untrackedCache配置變量手動啟用未跟蹤的緩存。如果測試失敗,退出代碼為1,并顯示一條消息說明哪些功能無法正常工作,否則退出代碼為0并打印 OK 。

--force-untracked-cache

和...一樣--untracked-cache。提供與在舊版本的 Git 的向后兼容性--untracked-cache用來暗示--test-untracked-cache,但此選項將無條件地啟用該擴展。

--

不要將更多的參數(shù)解釋為選項。

<file>

要采取行動的文件。請注意,開頭的文件將.被丟棄。這包括./filedir/./file。如果你不想要這個,那么使用更清晰的名字。這同樣適用于目錄結(jié)尾/和路徑//

Using --refresh

--refresh不會計算新的 sha1 文件或?qū)⑺饕聻槟J?內(nèi)容更改。但它確實做的是“重賽”與索引文件的統(tǒng)計信息,這樣就可以刷新指數(shù)尚未修改的文件,但在統(tǒng)計項是過時的。

例如,你想在做完之后這樣做git read-tree,將 stat 索引詳細信息與正確的文件關(guān)聯(lián)起來。

Using --cacheinfo or --info-only

--cacheinfo用于注冊不在當前工作目錄中的文件。這對于最小檢出合并很有用。

假設(shè)你有一個路徑為 mode 和 sha1 的文件,說:

$ git update-index --cacheinfo <mode>,<sha1>,<path>

--info-only用于注冊文件而不將其放置在對象數(shù)據(jù)庫中。這對于僅狀態(tài)存儲庫很有用。

這兩個--cacheinfo--info-only的行為類似:該指數(shù)已經(jīng)更新,但對象數(shù)據(jù)庫是沒有的。--cacheinfo對象位于數(shù)據(jù)庫中但文件不在本地可用時非常有用。--info-only文件可用時非常有用,但不希望更新對象數(shù)據(jù)庫。

Using --index-info

--index-info是一種更強大的機制,可讓您從標準輸入中提供多個條目定義,并專門為腳本設(shè)計。它可以采用三種格式的輸入:

  1. 模式SP sha1 TAB 路徑第一種格式是“git-apply --index-info”報告的內(nèi)容,并且用于在3路合并時重建用于偽合并基礎(chǔ)樹的部分樹。

  2. 模式 SP 類型 SP sha1 TAB 路徑第二種格式是將git ls-tree輸出填充到索引文件中。

  3. 模式 SP sha1 SP 階段 TAB 路徑此格式用于將更高階段放入索引文件并匹配git ls-files --stage輸出。

要將更高級的條目放置到索引中,首先應(yīng)通過為路徑輸入 mode = 0 條目來刪除路徑,然后以第三種格式提供必要的輸入行。

例如,從這個索引開始:

$ git ls-files -s100644 8a1218a1024a212bb3db30becd860315f9f3ac52 0       frotz

您可以將以下輸入提供給--index-info

$ git update-index --index-info0 0000000000000000000000000000000000000000        frotz100644 8a1218a1024a212bb3db30becd860315f9f3ac52 1        frotz100755 8a1218a1024a212bb3db30becd860315f9f3ac52 2        frotz

輸入的第一行提供0作為刪除路徑的模式; 只要格式良好,SHA-1 無關(guān)緊要。然后第二行和第三行輸入該路徑的階段1和階段2條目。在上述之后,我們最終得出這個結(jié)論:

$ git ls-files -s100644 8a1218a1024a212bb3db30becd860315f9f3ac52 1        frotz100755 8a1218a1024a212bb3db30becd860315f9f3ac52 2        frotz

使用“假定不變”位

Git 中的許多操作都依賴于您的文件系統(tǒng)來lstat(2)實現(xiàn)高效的實現(xiàn),因此st_mtime可以便宜地檢查工作樹文件的信息,以查看文件內(nèi)容是否已從記錄在索引文件中的版本發(fā)生更改。不幸的是,一些文件系統(tǒng)效率不高lstat(2)。如果你的文件系統(tǒng)是其中的一個,你可以將“假設(shè)不變”位設(shè)置為你沒有改變的路徑,以便 Git 不要這樣檢查。請注意,在路徑上設(shè)置此位并不意味著Git 會檢查文件的內(nèi)容以查看它是否已更改 - 它使 Git 忽略任何檢查并假定它更改。當你修改工作樹文件時,你必須在修改它們之前或之后,通過刪除“假定不變”位來明確告訴 Git 。

為了設(shè)置“不變”位,使用--assume-unchanged選項。要取消設(shè)置,請使用--no-assume-unchanged。要查看哪些文件具有“假定不變”位,請使用git ls-files -v(請參閱 git-ls-files [1] )。

該命令查看core.ignorestat配置變量。如果這是真的,路徑與更新git update-index paths...,并與其他 Git 的更新路徑命令,同時更新索引和工作樹(例如git apply --index,git checkout-index -ugit read-tree -u)被自動標記為“假設(shè)不變”。請注意,如果找到工作樹文件與索引匹配(假如您想將它們標記為“假定不變”),則“假設(shè)不變”位設(shè)置。git update-index --refreshgit update-index --really-refresh

例子

To update and refresh only the files already checked out:

$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh

在與低效的文件系統(tǒng)core.ignorestat設(shè)置

$ git update-index --really-refresh              (1)$ git update-index --no-assume-unchanged foo.c   (2)$ git diff --name-only                           (3)$ edit foo.c
$ git diff --name-only                           (4)M foo.c
$ git update-index foo.c                         (5)$ git diff --name-only                           (6)$ edit foo.c
$ git diff --name-only                           (7)$ git update-index --no-assume-unchanged foo.c   (8)$ git diff --name-only                           (9)M foo.c
  1. 強制 lstat(2)為匹配索引的路徑設(shè)置“不變”位。

  2. 標記要編輯的路徑。

  3. 這會執(zhí)行 lstat(2)并查找與路徑匹配的索引。

  4. 這會執(zhí)行 lstat(2)并發(fā)現(xiàn)索引與路徑匹配。

  5. 注冊新版本以索引集“假定不變”位。

  6. 并假定它不變。

  7. 即使在你編輯它之后。

  8. 你可以在事后了解這個變化。

  9. 現(xiàn)在它檢查 lstat(2)并發(fā)現(xiàn)它已被更改。

跳過工作樹位

Skip-worktree 位可以在一個(長)句子中定義:當讀取一個條目時,如果它被標記為 skip-worktree ,那么 Git 會假裝它的工作目錄版本是最新的并且讀取索引版本。

詳細說來,“reading” 是指檢查文件是否存在,讀取文件屬性或文件內(nèi)容。工作目錄版本可能存在或不存在。如果存在,其內(nèi)容可能與索引版本匹配。寫作不受此位影響,內(nèi)容安全仍然是第一要務(wù)。請注意,Git can更新工作目錄文件,即標記為 skip-worktree ,如果這樣做是安全的(即工作目錄版本與索引版本匹配)

雖然這個位看起來與假定不變的位相似,但它的目標不同于假設(shè) - 未改變的位。當兩者都設(shè)置時,跳過工作樹也優(yōu)先于假定 - 不變的位。

分割索引

此模式專為具有非常大的索引的存儲庫而設(shè)計,旨在減少重復寫入這些索引所需的時間。

在這種模式下,索引被分成兩個文件,$ GIT_DIR / index 和 $ GIT_DIR / sharedindex。<SHA-1> 。在 $ GIT_DIR / index(分割索引)中累計更改,而共享索引文件包含所有索引條目并保持不變。

當分割索引中的條目數(shù)達到由 splitIndex.maxPercentChange 配置變量(請參閱 git-config [1] )指定的水平時,分割索引中的所有更改將被推回到共享索引文件。

每次創(chuàng)建新的共享索引文件時,如果舊共享索引文件的修改時間比 splitIndex.sharedIndexExpire 配置變量(請參閱 git-config [1] )指定的修改時間早,則會刪除舊共享索引文件。

為避免刪除仍在使用的共享索引文件,每次創(chuàng)建或讀取基于共享索引文件的新拆分索引時,都會將其修改時間更新為當前時間。

未追蹤緩存

該緩存旨在加速涉及確定未跟蹤文件的命令,如git status

該功能通過記錄正在工作的樹目錄的 mtime,然后省略讀取目錄和統(tǒng)計調(diào)用來針對 mtime 未更改的目錄中的文件。為此st_mtime,如果目錄中的文件被添加,修改或刪除,底層操作系統(tǒng)和文件系統(tǒng)必須更改目錄字段。

您可以測試文件系統(tǒng)是否支持該--test-untracked-cache選項。--untracked-cache用于在 Git 的舊版本中隱式執(zhí)行該測試的選項,但不再是這種情況。

如果要啟用(或禁用)此功能,使用core.untrackedCache配置變量(請參閱 git-config [1] )比在每個存儲庫中使用--untracked-cache選項更容易git update-index,尤其是如果您希望跨所有存儲庫使用此配置變量,因為您可以將配置變量設(shè)置為true(或false$HOME/.gitconfig一次,并使其影響您所觸摸的所有存儲庫。

core.untrackedCache配置變量發(fā)生變化時,在下一次命令讀取索引時,未追蹤的緩存將添加到索引中或從索引中刪除; 而在--[no-|force-]untracked-cache使用時,未跟蹤的緩存立即添加到索引或從索引中刪除。

組態(tài)

該命令授予core.filemode配置變量。如果您的存儲庫位于可執(zhí)行位不可靠的文件系統(tǒng)上,則應(yīng)將其設(shè)置為false(請參閱 git-config [1])。這會導致該命令忽略文件系統(tǒng)中索引和文件模式中記錄的文件模式差異,如果它們僅在可執(zhí)行位上不同。在這樣一個不幸的文件系統(tǒng)上,你可能需要使用git update-index --chmod=。

非常相似,如果core.symlinks配置變量設(shè)置為false(參見 git-config [1]),符號鏈接將作為純文件檢出,并且此命令不會修改從符號鏈接到常規(guī)文件的記錄文件模式。

該命令查看core.ignorestat配置變量。參見Using "assume unchanged" bit上面的部分。

該命令還查看core.trustctime配置變量。當 inode 更改時間通過 Git 外部的某些東西(文件系統(tǒng)搜尋器和備份系統(tǒng)使用 ctime 標記處理的文件)定期修改時(參見 git-config [1] ),它會很有用。

未跟蹤的緩存擴展可以通過core.untrackedCache配置變量啟用(請參閱 git-config [1] )。

Previous article: Next article: