[英]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
命令將列出不同的文件。 以下哪一項在日常工作中更有用?
索引/暫存區保存每個文件的副本,准備進入下一個提交。 這也是模式(始終為100755
或100644
來源。 無論在索引/暫存區中是什么,運行git commit
時都會git commit
。 您必須運行git add
的原因是告訴Git: 從工作樹副本更新索引副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.