git add和被ignore的文件


如果有如下的目錄結構:

                workspace tree

        |

         ---------------------

   |                             |

 hello.c                           d

 hello.o                           |

 .gitignore                     say.c

             say.o

             .gitignore

在workspace tree的跟目錄下有3個文件hello.c,hello.o,.gitignore以及一個文件夾d,其中根目錄下的.gitignore文件忽略.o文件。在文件夾d下也有3個文件,say.c, say.o,.gitignore,其中文件夾d下的.gitignore不忽略.o文件。hello.o和say.o都是剛剛編譯出來的文件。此時,如果在根目錄下運行

git add *

則會報錯:

The following paths are ignored by one of your .gitignore files:
hello.o
Use -f if you really want to add them
fatal:no files add

 

而如果運行:

git add \*

則可以將d/say.o成功的添加到index中。

 

通過git add --help查詢發現:

1) git add 后面跟的文件有被忽略的文件,那么操作失敗;

2) git add 通過遍歷目錄遇到了要被忽略的文件,此文件不會被加入到index

3) git add 遇到由git展開glob(不是由shell展開)形成的要被忽略的文件,此文件不會被加入到index

 

因此,在上面的情形中,直接運行git add *是進行的shell 展開glob,此時相當於運行git add hello.o(由於shell 展開glob無法cross目錄,因此沒有匹配d/say.o),而hello.o是要被忽略的文件,所以操作失敗;如果運行git add \*,\*由git展開,可以匹配hello.o,d/say.o,根據上面的原則3),hello.o不會被加入到index中,因此此時相當於運行git add d/say.o,所以操作得以正確進行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM