簡體   English   中英

如何將只有新模式的文件添加到Git?

[英]How can I add to Git only files with new mode?

Git可以跟蹤文件的模式(例如755或644)。 我對所有工作文件的chmod進行了全局更新,但是只有其中一些文件的chmod不好。 現在,我混合了一些更新的文件:有些文件具有我之前更新過的新代碼,而有些文件僅具有新模式。 如何僅將具有新模式的文件添加到Git?

在Git文檔中,我找到了一個chmod選項,但是我不確定它是否對我有用。

您可以更改所有文件的模式,然后執行git add . 由於git僅跟蹤更改的內容,因此只會添加模式已更改的文件。

請注意,這適用於正確跟蹤可執行位(git跟蹤的唯一模式)的文件系統。 在Windows上,您可能需要使用鏈接的--chmod選項。

除了在某些Windows系統上之外,簡單的答案就是使用git add . 從工作樹的頂層,或git add -u 重新添加已經添加的文件是無害的。 重新添加現有文件也會獲取其新模式設置。

有關索引/暫存區的更多信息

作為練習,運行以下命令:

git ls-files --stage

在已檢出一堆文件的現有存儲庫上。 (這將在一個較大的存儲庫中打印大量輸出,並且默認情況下不使用尋呼機,因此您可能希望添加| page| less或進行分頁的任何操作。)

該清單的結果告訴您將在您進行的下一次提交中的所有文件。 如果在此git ls-files命令之后立即運行git commit ,您將獲得一個新提交,其中包含正好由git ls-files列出git ls-files ,其模式信息由--stage (作為第一列) )。

將輸出與git status的輸出進行比較:

$ git ls-files --stage | wc -l
    3606

有超過三千六百個文件准備提交! 但:

$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

為什么這些不同? git ls-files報告3606個暫存文件時,為什么git status報告沒有暫存?

答案是, 當前提交(即master提示)具有相同的3606文件:

$ git ls-tree -r HEAD | wc -l
    3606

此外, HEAD提交中的3606文件與索引/登台區域中的3606文件相同(模式,大小和數據字節)。 因此,對這兩個進行比較的 git status表示,它們沒有什么不同,沒有要提交的內容。

如果更改一個文件索引/舞台區,由,或者甚至只是改變了變化這是在工作樹的復印模式,仍然會有停留區3606頁的文件,但這個時候, 會不同。 git ls-files命令將列出所有3606; git status命令將列出不同的文件。 以下哪一項在日常工作中更有用?

索引/暫存區保存每個文件的副本,准備進入下一個提交。 這也是模式(始終為100755100644來源。 無論在索引/暫存區中是什么,運行git commit時都會git commit 您必須運行git add的原因是告訴Git: 從工作樹副本更新索引副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM