<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # git-diff-index > 原文: [https://git-scm.com/docs/git-diff-index](https://git-scm.com/docs/git-diff-index) ## 名稱 git-diff-index - 將樹與工作樹或索引進行比較 ## 概要 ``` git diff-index [-m] [--cached] [<common diff options>] <tree-ish> [<path>…?] ``` ## 描述 將樹對象中找到的blob的內容和模式與工作樹中相應的跟蹤文件或索引中的相應路徑進行比較。當&lt; path&gt;存在參數,僅比較與這些模式匹配的路徑。否則,將比較所有跟蹤的文件。 ## OPTIONS ``` -p ``` ``` -u ``` ``` --patch ``` 生成補丁(請參閱生成補丁的部分)。 ``` -s ``` ``` --no-patch ``` 抑制差異輸出。對于`git show`等默認顯示補丁的命令,或取消`--patch`的效果很有用。 ``` -U<n> ``` ``` --unified=<n> ``` 用&lt; n&gt;生成差異。上下文而不是通常的三行。意味著`-p`。 ``` --raw ``` 以原始格式生成diff。這是默認值。 ``` --patch-with-raw ``` `-p --raw`的同義詞。 ``` --indent-heuristic ``` 啟用改變差異塊邊界的啟發式以使補丁更易于閱讀。這是默認值。 ``` --no-indent-heuristic ``` 禁用縮進啟發式。 ``` --minimal ``` 花些額外的時間來確保產生盡可能小的差異。 ``` --patience ``` 使用“耐心差異”算法生成差異。 ``` --histogram ``` 使用“histogram diff”算法生成diff。 ``` --anchored=<text> ``` 使用“錨定差異”算法生成差異。 可以多次指定此選項。 如果源和目標中都存在一行,只存在一次,并以此文本開頭,則此算法會嘗試阻止它在輸出中顯示為刪除或添加。它在內部使用“耐心差異”算法。 ``` --diff-algorithm={patience|minimal|histogram|myers} ``` 選擇差異算法。變體如下: ``` default, myers ``` 基本的貪心差異算法。目前,這是默認值。 ``` minimal ``` 花些額外的時間來確保產生盡可能小的差異。 ``` patience ``` 生成補丁時使用“耐心差異”算法。 ``` histogram ``` 該算法將耐心算法擴展為“支持低發生的共同元素”。 例如,如果將`diff.algorithm`變量配置為非默認值并想要使用默認值,則必須使用`--diff-algorithm=default`選項。 ``` --stat[=<width>[,<name-width>[,<count>]]] ``` 生成diffstat。默認情況下,文件名部分將使用必要的空間,圖形部分的其余部分將使用。最大寬度默認為終端寬度,如果未連接到終端,則為80列,并且可以被`&lt;width&gt;`覆蓋。可以通過在逗號后面給出另一個寬度`&lt;name-width&gt;`來限制文件名部分的寬度。可以使用`--stat-graph-width=&lt;width&gt;`(影響生成統計圖的所有命令)或設置`diff.statGraphWidth=&lt;width&gt;`(不影響`git format-patch`)來限制圖形部分的寬度。通過給出第三個參數`&lt;count&gt;`,可以將輸出限制為第一個`&lt;count&gt;`行,如果有更多,則可以將`...`限制為`...`。 也可以使用`--stat-width=&lt;width&gt;`,`--stat-name-width=&lt;name-width&gt;`和`--stat-count=&lt;count&gt;`單獨設置這些參數。 ``` --compact-summary ``` 輸出擴展標題信息的精簡摘要,例如文件創建或刪除(“新”或“消失”,如果是符號鏈接,則可選“+ l”)和模式更改(“+ x”或“-x”用于添加或刪除diffstat中的可執行位)。信息放在文件名部分和圖形部分之間。意味著`--stat`。 ``` --numstat ``` 與`--stat`類似,但顯示十進制表示法中添加和刪除的行數以及沒有縮寫的路徑名,以使其更加機器友好。對于二進制文件,輸出兩個`-`而不是`0 0`。 ``` --shortstat ``` 僅輸出`--stat`格式的最后一行,其中包含已修改文件的總數,以及已添加和已刪除行的數量。 ``` --dirstat[=<param1,param2,…?>] ``` 輸出每個子目錄的相對更改量的分布。 `--dirstat`的行為可以通過以逗號分隔的參數列表傳遞來定制。默認值由`diff.dirstat`配置變量控制(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。可以使用以下參數: ``` changes ``` 通過計算已從源中刪除或添加到目標的行來計算dirstat數。這忽略了文件中純代碼移動的數量。換句話說,重新排列文件中的行不會像其他更改那樣計算。這是沒有給出參數時的默認行為。 ``` lines ``` 通過執行常規的基于行的差異分析來計算dirstat數字,并對移除/添加的行數進行求和。 (對于二進制文件,計算64字節塊,因為二進制文件沒有自然的線條概念)。這是比`changes`行為更昂貴的`--dirstat`行為,但它確實計算文件中重新排列的行與其他更改一樣多。結果輸出與您從其他`--*stat`選項獲得的輸出一致。 ``` files ``` 通過計算更改的文件數來計算dirstat數。在dirstat分析中,每個更改的文件都相同。這是計算上最便宜的`--dirstat`行為,因為它根本不需要查看文件內容。 ``` cumulative ``` 計算父目錄的子目錄中的更改。請注意,使用`cumulative`時,報告的百分比總和可能超過100%。可以使用`noncumulative`參數指定默認(非累積)行為。 ``` <limit> ``` 整數參數指定截止百分比(默認為3%)。貢獻低于此百分比變化的目錄不會顯示在輸出中。 示例:以下將計算已更改的文件,同時忽略少于已更改文件總量的10%的目錄,并在父目錄中累計子目錄計數:`--dirstat=files,10,cumulative`。 ``` --summary ``` 輸出擴展標題信息的精簡摘要,例如創建,重命名和模式更改。 ``` --patch-with-stat ``` `-p --stat`的同義詞。 ``` -z ``` 當給出`--raw`,`--numstat`,`--name-only`或`--name-status`時,不要使用路徑名并使用NUL作為輸出字段終止符。 如果沒有此選項,則會引用具有“異常”字符的路徑名,如配置變量`core.quotePath`所述(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。 ``` --name-only ``` 僅顯示已更改文件的名稱。 ``` --name-status ``` 僅顯示已更改文件的名稱和狀態。有關狀態字母的含義,請參閱`--diff-filter`選項的說明。 ``` --submodule[=<format>] ``` 指定子模塊的差異如何顯示。指定`--submodule=short`時,使用_短_格式。此格式僅顯示范圍開頭和結尾的提交名稱。指定`--submodule`或`--submodule=log`時,使用 _log_ 格式。此格式列出 [git-submodule [1]](https://git-scm.com/docs/git-submodule) `summary`等范圍內的提交。指定`--submodule=diff`時,使用 _diff_ 格式。此格式顯示提交范圍之間子模塊內容更改的內聯差異。如果未設置配置選項,則默認為`diff.submodule`或_短_格式。 ``` --color[=<when>] ``` 顯示彩色差異。 `--color`(即沒有 _=&lt;當&gt;_ )與`--color=always`相同時。 _&lt; when&gt;_ 可以是`always`,`never`或`auto`之一。 ``` --no-color ``` 關掉彩色差異。它與`--color=never`相同。 ``` --color-moved[=<mode>] ``` 移動的代碼行的顏色不同。 &lt;模式&gt;如果沒有給出選項,默認為 _no_ ,如果給出沒有模式的選項,則默認為 _zebra_ 。模式必須是以下之一: ``` no ``` 移動的線條不會突出顯示。 ``` default ``` 是`zebra`的同義詞。這可能會在未來轉變為更明智的模式。 ``` plain ``` 在一個位置添加并在另一個位置刪除的任何行都將使用 _color.diff.newMoved_ 進行著色。類似地, _color.diff.oldMoved_ 將用于在diff中的其他位置添加的已刪除行。此模式選擇任何已移動的行,但在檢查中確定是否在沒有置換的情況下移動了代碼塊時,它不是很有用。 ``` blocks ``` 貪婪地檢測至少20個字母數字字符的移動文本塊。使用 _color.diff。{old,new} Moved_ 顏色繪制檢測到的塊。相鄰的街區不能分開。 ``` zebra ``` 在_塊_模式中檢測移動文本塊。使用 _color.diff。{old,new} Moved_ 顏色或 _color.diff。{old,new} MovedAlternative_ 繪制塊。兩種顏色之間的變化表示檢測到新的塊。 ``` dimmed-zebra ``` 與 _zebra_ 類似,但執行了移動代碼的無趣部分的額外調暗。兩個相鄰街區的邊界線被認為是有趣的,其余的是無趣的。 `dimmed_zebra`是不推薦使用的同義詞。 ``` --no-color-moved ``` 關閉移動檢測。這可用于覆蓋配置設置。它與`--color-moved=no`相同。 ``` --color-moved-ws=<modes> ``` 這將配置在執行`--color-moved`的移動檢測時如何忽略空白。這些模式可以以逗號分隔的列表給出: ``` no ``` 執行移動檢測時不要忽略空格。 ``` ignore-space-at-eol ``` 忽略EOL中的空白更改。 ``` ignore-space-change ``` 忽略空格量的變化。這會忽略行尾的空格,并將一個或多個空白字符的所有其他序列視為等效。 ``` ignore-all-space ``` 比較線條時忽略空格。即使一行有空格而另一行沒有空格,這也會忽略差異。 ``` allow-indentation-change ``` 最初忽略移動檢測中的任何空格,然后如果每行的空白變化相同,則僅將移動的代碼塊分組到塊中。這與其他模式不兼容。 ``` --no-color-moved-ws ``` 執行移動檢測時不要忽略空格。這可用于覆蓋配置設置。它與`--color-moved-ws=no`相同。 ``` --word-diff[=<mode>] ``` 使用&lt; mode&gt;顯示單詞diff。劃定改變的單詞。默認情況下,單詞由空格分隔;見下面的`--word-diff-regex`。 &lt;模式&gt;默認為 _plain_ ,必須是以下之一: ``` color ``` 僅使用顏色突出顯示更改的單詞。意味著`--color`。 ``` plain ``` 將單詞顯示為`[-removed-]`和`{+added+}`。如果它們出現在輸入中,則不會嘗試轉義分隔符,因此輸出可能不明確。 ``` porcelain ``` 使用特殊的基于行的格式用于腳本使用。添加/刪除/未更改的運行以通常的統一diff格式打印,從行開頭的`+` / `-` /``字符開始并延伸到行尾。輸入中的換行符由其自身行上的波浪號`~`表示。 ``` none ``` 再次禁用字差異。 請注意,盡管第一個模式的名稱,但如果啟用了顏色,則使用顏色突出顯示所有模式中已更改的部分。 ``` --word-diff-regex=<regex> ``` 使用&lt; regex&gt;決定一個單詞是什么,而不是將非空格的運行視為一個單詞。除非已經啟用,否則還暗示`--word-diff`。 &lt; regex&gt;的每個非重疊匹配被認為是一個詞。這些匹配之間的任何內容都被視為空格并被忽略(!)以查找差異。您可能希望將`|[^[:space:]]`附加到正則表達式,以確保它匹配所有非空白字符。包含換行符的匹配項會在換行符處以靜默方式截斷(!)。 例如,`--word-diff-regex=.`會將每個字符視為一個單詞,并相應地逐個字符地顯示差異。 正則表達式也可以通過diff驅動程序或配置選項設置,參見 [gitattributes [5]](https://git-scm.com/docs/gitattributes) 或 [git-config [1]](https://git-scm.com/docs/git-config) 。明確地覆蓋任何差異驅動程序或配置設置。 Diff驅動程序覆蓋配置設置。 ``` --color-words[=<regex>] ``` 相當于`--word-diff=color`加(如果指定了正則表達式)`--word-diff-regex=&lt;regex&gt;`。 ``` --no-renames ``` 關閉重命名檢測,即使配置文件提供默認值也是如此。 ``` --check ``` 如果更改引入沖突標記或空白錯誤,則發出警告。什么被認為是空白錯誤由`core.whitespace`配置控制。默認情況下,尾隨空格(包括僅由空格組成的行)和在行的初始縮進內緊跟著制表符的空格字符被視為空格錯誤。如果發現問題,則退出非零狀態。與--exit-code不兼容。 ``` --ws-error-highlight=<kind> ``` 突出顯示差異的`context`,`old`或`new`行中的空白錯誤。多個值用逗號分隔,`none`重置先前的值,`default`將列表重置為`new`,`all`是`old,new,context`的簡寫。如果未指定此選項,并且未設置配置變量`diff.wsErrorHighlight`,則僅突出顯示`new`行中的空白錯誤。空白錯誤用`color.diff.whitespace`著色。 ``` --full-index ``` 在生成補丁格式輸出時,在“索引”行上顯示完整的前映像和后映像blob對象名稱,而不是第一個字符。 ``` --binary ``` 除`--full-index`外,還可輸出可用`git-apply`應用的二進制差異。 ``` --abbrev[=<n>] ``` 而不是在diff-raw格式輸出和diff-tree標題行中顯示完整的40字節十六進制對象名稱,而是僅顯示部分前綴。這與上面的`--full-index`選項無關,后者控制diff-patch輸出格式。可以使用`--abbrev=&lt;n&gt;`指定非默認位數。 ``` -B[<n>][/<m>] ``` ``` --break-rewrites[=[<n>][/<m>]] ``` 將完整的重寫更改分為刪除和創建對。這有兩個目的: 它影響了一個更改的方式,相當于一個文件的完全重寫,而不是一系列的刪除和插入混合在一起,只有幾行恰好與文本作為上下文匹配,而是作為單個刪除所有舊的后跟一個單個插入所有新內容,數字`m`控制-B選項的這一方面(默認為60%)。 `-B/70%`指定少于30%的原始文本應保留在結果中,以便Git將其視為完全重寫(即,否則生成的修補程序將是一系列刪除和插入與上下文行混合在一起)。 當與-M一起使用時,完全重寫的文件也被視為重命名的源(通常-M只考慮作為重命名源消失的文件),并且數字`n`控制 - 的這方面 - B選項(默認為50%)。 `-B20%`指定添加和刪除的更改與文件大小的20%或更多相比,有資格被選為可能的重命名源到另一個文件。 ``` -M[<n>] ``` ``` --find-renames[=<n>] ``` 檢測重命名。如果指定了`n`,則它是相似性指數的閾值(即與文件大小相比的添加/刪除量)。例如,`-M90%`表示如果超過90%的文件未更改,Git應將刪除/添加對視為重命名。如果沒有`%`符號,則該數字將作為分數讀取,并在其前面加上小數點。即,`-M5`變為0.5,因此與`-M50%`相同。同樣,`-M05`與`-M5%`相同。要將檢測限制為精確重命名,請使用`-M100%`。默認相似性指數為50%。 ``` -C[<n>] ``` ``` --find-copies[=<n>] ``` 檢測副本以及重命名。另見`--find-copies-harder`。如果指定了`n`,則其含義與`-M&lt;n&gt;`的含義相同。 ``` --find-copies-harder ``` 出于性能原因,默認情況下,僅當在同一變更集中修改了副本的原始文件時,`-C`選項才會查找副本。此標志使命令檢查未修改的文件作為副本源的候選者。對于大型項目來說,這是一項非常昂貴的操作,因此請謹慎使用。提供多個`-C`選項具有相同的效果。 ``` -D ``` ``` --irreversible-delete ``` 省略刪除的原像,即只打印標題而不打印原像和`/dev/null`之間的差異。得到的貼片不適用于`patch`或`git apply`;這僅適用于那些希望在更改后專注于審閱文本的人。此外,輸出顯然缺乏足夠的信息來反向應用這樣的補丁,甚至手動,因此選項的名稱。 與`-B`一起使用時,也省略刪除/創建對的刪除部分中的原像。 ``` -l<num> ``` `-M`和`-C`選項需要O(n ^ 2)處理時間,其中n是潛在的重命名/復制目標的數量。如果重命名/復制目標的數量超過指定的數量,此選項可防止重命名/復制檢測運行。 ``` --diff-filter=[(A|C|D|M|R|T|U|X|B)…?[*]] ``` 僅選擇已添加(`A`),復制(`C`),已刪除(`D`),已修改(`M`),已重命名(`R`)的文件,其類型(即常規文件,符號鏈接,子模塊,...)更改(`T`),未合并(`U`),未知(`X`),或已配對破碎(`B`)。可以使用過濾器字符的任何組合(包括無)。當`*`(全部或全部)添加到組合中時,如果有任何文件與比較中的其他條件匹配,則選擇所有路徑;如果沒有與其他條件匹配的文件,則不會選擇任何內容。 此外,這些大寫字母可以降級為排除。例如。 `--diff-filter=ad`排除添加和刪除的路徑。 請注意,并非所有差異都可以包含所有類型。例如,從索引到工作樹的差異永遠不會有添加條目(因為差異中包含的路徑集受限于索引中的內容)。同樣,如果禁用了對這些類型的檢測,則無法顯示復制和重命名的條目。 ``` -S<string> ``` 查找改變文件中指定字符串出現次數(即添加/刪除)的差異。用于腳本編寫者的使用。 當你正在尋找一個確切的代碼塊(比如一個結構體)時,它很有用,并且想要知道該塊首次出現以來的歷史:迭代地使用該特征將原始圖像中的有趣塊反饋回`-S`,繼續前進,直到你獲得該塊的第一個版本。 也搜索二進制文件。 ``` -G<regex> ``` 查找補丁文本包含與&lt; regex&gt;匹配的添加/刪除行的差異。 為了說明`-S&lt;regex&gt; --pickaxe-regex`和`-G&lt;regex&gt;`之間的區別,請考慮在同一文件中使用以下diff進行提交: ``` + return !regexec(regexp, two->ptr, 1, &regmatch, 0); ... - hit = !regexec(regexp, mf2.ptr, 1, &regmatch, 0); ``` 雖然`git log -G"regexec\(regexp"`將顯示此提交,但`git log -S"regexec\(regexp" --pickaxe-regex`不會(因為該字符串的出現次數沒有改變)。 除非提供`--text`,否則將忽略沒有textconv過濾器的二進制文件的補丁。 有關詳細信息,請參閱 [gitdiffcore [7]](https://git-scm.com/docs/gitdiffcore) 中的 _pickaxe_ 條目。 ``` --find-object=<object-id> ``` 查找更改指定對象出現次數的差異。與`-S`類似,只是參數的不同之處在于它不搜索特定的字符串,而是搜索特定的對象id。 該對象可以是blob或子模塊提交。它意味著`git-log`中的`-t`選項也可以找到樹。 ``` --pickaxe-all ``` 當`-S`或`-G`找到更改時,顯示該更改集中的所有更改,而不僅僅是包含&lt; string&gt;中更改的文件。 ``` --pickaxe-regex ``` 對待&lt; string&gt;賦予`-S`作為擴展的POSIX正則表達式以匹配。 ``` -O<orderfile> ``` 控制文件在輸出中的顯示順序。這會覆蓋`diff.orderFile`配置變量(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。要取消`diff.orderFile`,請使用`-O/dev/null`。 輸出順序由&lt; orderfile&gt;中的glob模式的順序決定。首先輸出所有與第一個模式匹配的路徑名的文件,然后輸出所有與第二個模式(但不是第一個模式)匹配的路徑名的文件,依此類推。路徑名與任何模式都不匹配的所有文件都是最后輸出的,就好像文件末尾有一個隱式匹配所有模式一樣。如果多個路徑名具有相同的等級(它們匹配相同的模式但沒有早期模式),則它們相對于彼此的輸出順序是正常順序。 &lt; orderfile&gt;解析如下: * 空行被忽略,因此可以將它們用作分隔符以提高可讀性。 * 以哈希(“`#`”)開頭的行將被忽略,因此它們可用于注釋。如果以散列開頭,則將反斜杠(“`\`”)添加到模式的開頭。 * 每個其他行包含一個模式。 模式與沒有FNM_PATHNAME標志的fnmatch(3)使用的模式具有相同的語法和語義,但如果刪除任意數量的最終路徑名組件與模式匹配,則路徑名也匹配模式。例如,模式“`foo*bar`”匹配“`fooasdfbar`”和“`foo/bar/baz/asdf`”而不匹配“`foobarx`”。 ``` -R ``` 交換兩個輸入;也就是說,顯示從索引或磁盤文件到樹內容的差異。 ``` --relative[=<path>] ``` 從項目的子目錄運行時,可以告訴它排除目錄外的更改并使用此選項顯示相對于它的路徑名。當您不在子目錄中時(例如,在裸存儲庫中),您可以通過給出&lt; path&gt;來命名哪個子目錄以使輸出相對。作為一個論點。 ``` -a ``` ``` --text ``` 將所有文件視為文本。 ``` --ignore-cr-at-eol ``` 進行比較時,忽略行尾的回車。 ``` --ignore-space-at-eol ``` 忽略EOL中的空白更改。 ``` -b ``` ``` --ignore-space-change ``` 忽略空格量的變化。這會忽略行尾的空格,并將一個或多個空白字符的所有其他序列視為等效。 ``` -w ``` ``` --ignore-all-space ``` 比較線條時忽略空格。即使一行有空格而另一行沒有空格,這也會忽略差異。 ``` --ignore-blank-lines ``` 忽略其行全部為空的更改。 ``` --inter-hunk-context=<lines> ``` 顯示差異之間的上下文,直到指定的行數,從而融合彼此接近的帥哥。如果未設置配置選項,則默認為`diff.interHunkContext`或0。 ``` -W ``` ``` --function-context ``` 顯示整個周圍的變化功能。 ``` --exit-code ``` 使用類似于diff(1)的代碼退出程序。也就是說,如果存在差異則退出1,0表示沒有差異。 ``` --quiet ``` 禁用程序的所有輸出。意味著`--exit-code`。 ``` --ext-diff ``` 允許執行外部diff助手。如果使用 [gitattributes [5]](https://git-scm.com/docs/gitattributes) 設置外部差異驅動程序,則需要將此選項與 [git-log [1]](https://git-scm.com/docs/git-log) 和朋友一起使用。 ``` --no-ext-diff ``` 禁止外部差異驅動程序。 ``` --textconv ``` ``` --no-textconv ``` 在比較二進制文件時允許(或禁止)外部文本轉換過濾器運行。有關詳細信息,請參閱 [gitattributes [5]](https://git-scm.com/docs/gitattributes) 。由于textconv過濾器通常是單向轉換,因此生成的差異適合人類使用,但無法應用。因此,默認情況下,textconv過濾器僅針對 [git-diff [1]](https://git-scm.com/docs/git-diff) 和 [git-log [1]](https://git-scm.com/docs/git-log) 啟用,但不適用于 [git-format-patch [ 1]](https://git-scm.com/docs/git-format-patch) 或差異管道命令。 ``` --ignore-submodules[=<when>] ``` 忽略差異生成中子模塊的更改。 &lt;當&gt;可以是“none”,“untracked”,“dirty”或“all”,這是默認值。使用“none”時,如果子模塊包含未跟蹤或修改的文件,或者其HEAD與超級項目中記錄的提交不同,則可以使用“無”來修改子模塊,并可用于覆蓋[中 _ignore_ 選項的任何設置git-config [1]](https://git-scm.com/docs/git-config) 或 [gitmodules [5]](https://git-scm.com/docs/gitmodules) 。當使用“未跟蹤”時,如果子模塊僅包含未跟蹤的內容(但仍會掃描修改的內容),則子模塊不會被視為臟。使用“臟”忽略對子模塊工作樹的所有更改,僅顯示存儲在超級項目中的提交的更改(這是1.7.0之前的行為)。使用“all”隱藏子模塊的所有更改。 ``` --src-prefix=<prefix> ``` 顯示給定的源前綴而不是“a /”。 ``` --dst-prefix=<prefix> ``` 顯示給定的目標前綴而不是“b /”。 ``` --no-prefix ``` 不顯示任何源或目標前綴。 ``` --line-prefix=<prefix> ``` 為每行輸出預先附加前綴。 ``` --ita-invisible-in-index ``` 默認情況下,“git add -N”添加的條目在“git diff”中顯示為現有空文件,在“git diff --cached”中顯示為新文件。此選項使條目在“git diff”中顯示為新文件,在“git diff --cached”中不存在。可以使用`--ita-visible-in-index`恢復此選項。這兩個選項都是實驗性的,將來可以刪除。 有關這些常用選項的更詳細說明,另請參閱 [gitdiffcore [7]](https://git-scm.com/docs/gitdiffcore) 。 ``` <tree-ish> ``` 要反對的樹對象的id。 ``` --cached ``` 根本不考慮磁盤上的文件 ``` -m ``` 默認情況下,索引中記錄但未簽出的文件將報告為已刪除。該標志使 _git diff-index_ 表示所有未簽出的文件都是最新的。 ## 原始輸出格式 來自“git-diff-index”,“git-diff-tree”,“git-diff-files”和“git diff -raw”的原始輸出格式非常相似。 這些命令都比較了兩組東西;比較的不同之處是: ``` git-diff-index <tree-ish> ``` 比較&lt; tree-ish&gt;以及文件系統上的文件。 ``` git-diff-index --cached <tree-ish> ``` 比較&lt; tree-ish&gt;和索引。 ``` git-diff-tree [-r] <tree-ish-1> <tree-ish-2> [<pattern>…?] ``` 比較兩個參數命名的樹。 ``` git-diff-files [<pattern>…?] ``` 比較索引和文件系統上的文件。 “git-diff-tree”命令通過打印正在比較的內容的哈希來開始輸出。之后,所有命令都會為每個更改的文件打印一個輸出行。 輸出行以這種方式格式化: ``` in-place edit :100644 100644 bcd1234 0123456 M file0 copy-edit :100644 100644 abcd123 1234567 C68 file1 file2 rename-edit :100644 100644 abcd123 1234567 R86 file1 file3 create :000000 100644 0000000 1234567 A file4 delete :100644 000000 1234567 0000000 D file5 unmerged :000000 000000 0000000 0000000 U file6 ``` 也就是說,從左到右: 1. 一個冒號。 2. “src”模式;如果創建或未合并,則為000000。 3. 空間。 4. “dst”模式;如果刪除或未合并,則為000000。 5. 空間。 6. sha1為“src”; 0 {40}如果創建或未合并。 7. 空間。 8. sha1為“dst”; 0 {40}如果創建,未合并或“查看工作樹”。 9. 空間。 10. 狀態,后跟可選的“分數”編號。 11. 使用`-z`選項時的選項卡或NUL。 12. “src”的路徑 13. 使用`-z`選項時的選項卡或NUL;僅適用于C或R. 14. “dst”的路徑;僅適用于C或R. 15. 使用`-z`選項時,LF或NUL終止記錄。 可能的狀態字母是: * 答:添加文件 * C:將文件復制到新文件中 * D:刪除文件 * M:修改文件的內容或模式 * R:重命名文件 * T:更改文件類型 * U:文件已取消合并(您必須先完成合并才能提交) * X:“未知”更改類型(最有可能是錯誤,請報告) 狀態字母C和R后面總是跟一個分數(表示移動或復制的源和目標之間的相似性百分比)。狀態字母M之后可以是文件重寫的分數(表示不相似的百分比)。 &lt; SHA1&gt;如果文件系統上的文件是新文件并且它與索引不同步,則顯示為全0。 例: ``` :100644 100644 5be4a4a 0000000 M file.c ``` 如果沒有`-z`選項,則會引用具有“異常”字符的路徑名,如配置變量`core.quotePath`所述(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。使用`-z`,文件名逐字輸出,行以NUL字節終止。 ## 用于合并的diff格式 “git-diff-tree”,“git-diff-files”和“git-diff --raw”可以使用`-c`或`--cc`選項為合并提交生成diff輸出。輸出與上述格式的不同之處如下: 1. 每個父母都有一個冒號 2. 還有更多“src”模式和“src”sha1 3. status是每個父級的連接狀態字符 4. 沒有可選的“得分”號碼 5. 單路徑,僅適用于“dst” 例: ``` ::100644 100644 100644 fabadb8 cc95eb0 4866510 MM describe.c ``` 請注意,_組合diff_ 僅列出從所有父項修改的文件。 ## 使用-p生成補丁 當“git-diff-index”,“git-diff-tree”或“git-diff-files”使用`-p`選項運行時,“git diff”不帶`--raw`選項或“git log”使用“-p”選項,它們不會產生上述輸出;相反,他們生成一個補丁文件。您可以通過`GIT_EXTERNAL_DIFF`和`GIT_DIFF_OPTS`環境變量自定義此類修補程序的創建。 -p選項產生的內容與傳統的diff格式略有不同: 1. 它前面有一個“git diff”標題,如下所示: ``` diff --git a/file1 b/file2 ``` 除非涉及重命名/復制,否則`a/`和`b/`文件名是相同的。特別是,即使是創建或刪除,`/dev/null`也是_而不是_來代替`a/`或`b/`文件名。 當涉及重命名/復制時,`file1`和`file2`分別顯示重命名/復制的源文件的名稱和重命名/復制的文件的名稱。 2. 它后跟一個或多個擴展標題行: ``` old mode &lt;mode&gt; new mode &lt;mode&gt; deleted file mode &lt;mode&gt; new file mode &lt;mode&gt; copy from &lt;path&gt; copy to &lt;path&gt; rename from &lt;path&gt; rename to &lt;path&gt; similarity index &lt;number&gt; dissimilarity index &lt;number&gt; index &lt;hash&gt;..&lt;hash&gt; &lt;mode&gt; ``` 文件模式打印為6位八進制數,包括文件類型和文件權限位。 擴展標頭中的路徑名不包括`a/`和`b/`前綴。 相似性指數是未更改行的百分比,相異性指數是更改行的百分比。它是一個向下舍入的整數,后跟一個百分號。因此,100%的相似性索引值保留用于兩個相等的文件,而100%的相異性意味著舊文件中的任何行都不會成為新文件。 索引行包括更改前后的SHA-1校驗和。 &lt;模式&gt;如果文件模式沒有改變,則包括在內;否則,單獨的行表示舊模式和新模式。 3. 具有“異常”字符的路徑名被引用,如配置變量`core.quotePath`所述(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。 4. 輸出中的所有`file1`文件在提交之前引用文件,并且所有`file2`文件在提交之后引用文件。將每個更改順序應用于每個文件是不正確的。例如,此補丁將交換a和b: ``` diff --git a/a b/b rename from a rename to b diff --git a/b b/a rename from b rename to a ``` ## 組合差異格式 在顯示合并時,任何差異生成命令都可以使用`-c`或`--cc`選項生成_組合差異_。當顯示與 [git-diff [1]](https://git-scm.com/docs/git-diff) 或 [git-show [1]](https://git-scm.com/docs/git-show) 的合并時,這是默認格式。另請注意,您可以為這些命令中的任何一個提供`-m`選項,以強制使用合并的各個父項生成差異。 _組合diff_ 格式如下所示: ``` diff --combined describe.c index fabadb8,cc95eb0..4866510 --- a/describe.c +++ b/describe.c @@@ -98,20 -98,12 +98,20 @@@ return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1; } - static void describe(char *arg) -static void describe(struct commit *cmit, int last_one) ++static void describe(char *arg, int last_one) { + unsigned char sha1[20]; + struct commit *cmit; struct commit_list *list; static int initialized = 0; struct commit_name *n; + if (get_sha1(arg, sha1) < 0) + usage(describe_usage); + cmit = lookup_commit_reference(sha1); + if (!cmit) + usage(describe_usage); + if (!initialized) { initialized = 1; for_each_ref(get_name); ``` 1. 它前面有一個“git diff”標題,看起來像這樣(當使用`-c`選項時): ``` diff --combined file ``` 或者像這樣(當使用`--cc`選項時): ``` diff --cc file ``` 2. 它后跟一個或多個擴展標題行(此示例顯示了與兩個父項的合并): ``` index &lt;hash&gt;,&lt;hash&gt;..&lt;hash&gt; mode &lt;mode&gt;,&lt;mode&gt;..&lt;mode&gt; new file mode &lt;mode&gt; deleted file mode &lt;mode&gt;,&lt;mode&gt; ``` 只有當&lt; mode&gt;中的至少一個出現時,`mode &lt;mode&gt;,&lt;mode&gt;..&lt;mode&gt;`行才會出現。與其他人不同。具有關于檢測到的內容移動(重命名和復制檢測)的信息的擴展標題被設計為與兩個&lt; tree-ish&gt;的差異一起工作。并且不會被組合diff格式使用。 3. 接下來是兩行的文件/文件頭 ``` --- a/file +++ b/file ``` 與傳統_統一_ diff格式的雙行標題類似,`/dev/null`用于表示創建或刪除的文件。 4. 修改了塊頭格式以防止人們意外地將其饋送到`patch -p1`。創建組合差異格式用于審查合并提交更改,并不適用于應用。此更改類似于擴展_索引_標頭中的更改: ``` @@@ &lt;from-file-range&gt; &lt;from-file-range&gt; &lt;to-file-range&gt; @@@ ``` 組合diff格式的塊頭中有(父項數+ 1)`@`個字符。 與傳統的_統一_差異格式不同,后者顯示兩個文件A和B,其中一列具有`-`(減去 - 出現在A中但在B中刪除),`+`(加 - 缺少A但是添加到B)或`" "`(空格 - 未更改)前綴,此格式將兩個或多個文件file1,file2,...與一個文件X進行比較,并顯示X與每個文件N的不同之處。每個fileN的一列被添加到輸出行之前,以指示X的行與它的不同之處。 N列中的`-`字符表示該行出現在fileN中,但它不會出現在結果中。列N中的`+`字符表示該行出現在結果中,而fileN沒有該行(換句話說,從該父項的角度添加了該行)。 在上面的示例輸出中,函數簽名已從兩個文件中更改(因此,file1和file2中的兩個`-`刪除加上`++`表示添加的一行未出現在file1或file2中)。另外八行與file1相同,但不出現在file2中(因此以`+`為前綴)。 當由`git diff-tree -c`顯示時,它將合并提交的父項與合并結果進行比較(即file1..fileN是父項)。當由`git diff-files -c`顯示時,它將兩個未解析的合并父項與工作樹文件進行比較(即file1是階段2又名“我們的版本”,file2是階段3又名“他們的版本”)。 ## 其他差異格式 `--summary`選項描述新添加,刪除,重命名和復制的文件。 `--stat`選項將diffstat(1)圖形添加到輸出。這些選項可以與其他選項結合使用,例如`-p`,用于人類消費。 當顯示涉及重命名或副本的更改時,`--stat`輸出通過組合路徑名的公共前綴和后綴來緊湊地格式化路徑名。例如,修改4行時將`arch/i386/Makefile`移動到`arch/x86/Makefile`的更改將顯示如下: ``` arch/{i386 => x86}/Makefile | 4 +-- ``` `--numstat`選項提供diffstat(1)信息,但設計用于更容易的機器消耗。 `--numstat`輸出中的條目如下所示: ``` 1 2 README 3 1 arch/{i386 => x86}/Makefile ``` 也就是說,從左到右: 1. 添加的行數; 2. 標簽; 3. 刪除的行數; 4. 標簽; 5. pathname(可能帶有重命名/復制信息); 6. 換行符。 當`-z`輸出選項生效時,輸出格式為: ``` 1 2 README NUL 3 1 NUL arch/i386/Makefile NUL arch/x86/Makefile NUL ``` 那是: 1. 添加的行數; 2. 標簽; 3. 刪除的行數; 4. 標簽; 5. NUL(僅在重命名/復制時存在); 6. 原像中的路徑名; 7. NUL(僅在重命名/復制時存在); 8. postimage中的路徑名(僅在重命名/復制時存在); 9. 一個NUL。 在重命名的情況下,preimage路徑之前的額外`NUL`是允許讀取輸出的腳本判斷正在讀取的當前記錄是單路徑記錄還是重命名/復制記錄而無需提前讀取。讀取添加和刪除的行后,讀取`NUL`將產生路徑名,但如果是`NUL`,則記錄將顯示兩個路徑。 ## 運營模式 您可以選擇是否完全信任索引文件(使用`--cached`標志)或要求diff邏輯顯示任何與stat狀態不匹配的文件為“暫時更改”。這兩項操作確實非常有用。 ## 緩存模式 如果指定了`--cached`,則可以詢問: ``` show me the differences between HEAD and the current index contents (the ones I'd write using 'git write-tree') ``` 例如,假設您已經處理了工作目錄,更新了索引中的一些文件并準備提交。你想要確切地看到**你將提交什么**,而不必編寫新的樹對象并以這種方式進行比較,為此,你只需要做 ``` git diff-index --cached HEAD ``` 示例:假設我已將`commit.c`重命名為`git-commit.c`,并且我已經完成了`update-index`以使其在索引文件中生效。 `git diff-files`根本不會顯示任何內容,因為索引文件與我的工作目錄匹配。但是做一個 _git diff-index_ 會: ``` torvalds@ppc970:~/git> git diff-index --cached HEAD -100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 commit.c +100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 git-commit.c ``` 你可以很容易地看到以上是重命名。 實際上,`git diff-index --cached` **應該**總是完全等同于實際執行 _git寫樹_并進行比較。除了這個,你只想檢查你的位置的情況要好得多。 因此,當你問自己“我已經標記了什么以及與之前的樹有什么區別”時,做一個`git diff-index --cached`基本上非常有用。 ## 非緩存模式 “非緩存”模式采用不同的方法,并且可能更有用,因為它的作用不能用 _git write-tree_ + _git diff-模擬樹_。這就是默認模式。非緩存版本會詢問以下問題: ``` show me the differences between HEAD and the currently checked out tree - index contents _and_ files that aren't up to date ``` 這顯然是一個非常有用的問題,因為它告訴你**可以**提交什么。同樣,輸出將 _git diff-tree -r_ 輸出與tee匹配,但有一個扭曲。 扭曲的是,如果某個文件與索引不匹配,我們就沒有后備存儲的東西,我們使用神奇的“全零”sha1來表示。所以,假設你已經編輯了`kernel/sched.c`,但實際上還沒有對它進行 _git update-index_ - 沒有與新狀態相關的“對象”,你得到: ``` torvalds@ppc970:~/v2.6/linux> git diff-index --abbrev HEAD :100644 100664 7476bb... 000000... kernel/sched.c ``` 即,它表明樹已經改變,`kernel/sched.c`不是最新的,可能包含新的東西。全零sha1意味著要獲得真正的差異,您需要直接查看工作目錄中的對象,而不是執行對象到對象的差異。 | 注意 | 與此類型的其他命令一樣, _git diff-index_ 實際上根本不查看文件的內容。所以也許`kernel/sched.c`實際上并沒有改變,只是你碰到了它。在任何一種情況下,都需要注意 _git update-index_ 才能使索引同步。 | | 注意 | 您可以將文件混合顯示為“已更新”和“在工作目錄中仍然是臟的”。您總是可以告訴哪個文件處于哪個狀態,因為“已更新”的文件顯示有效的sha1,而“與索引不同步”的文件將始終具有特殊的全零值sha1。 | ## GIT 部分 [git [1]](https://git-scm.com/docs/git) 套件
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看