git和 svn不同,僅僅跟蹤文件的變動,不跟蹤目錄。所以,一個空目錄,如果里面沒有文件,即便 git add
這個目錄,另外在別處 check out
的時候,是沒有這個空目錄的。
只跟蹤文件變化,不跟蹤目錄,這么設計是有原因的。但這會帶來一些小麻煩。有時候,確實需要在代碼倉庫中保留某個空目錄。比如測試時需要用到的空目錄。下面來看看如何解決。
其實這里有兩種情況:
一、目錄是空的
這種情況下只需要在目錄下創建.gitkeep
文件,然后在項目的.gitignore
中設置不忽略.gitkeep
.gitkeep 是一個約定俗成的文件名並不會帶有特殊規則
二、目錄中已經存在文件
那就需要首先在根目錄中設置!.gitignore
,然后在目標目錄也創建一個.gitignore
文件,並在文件中設置
1
2
|
*
!.gitignore
|
小結
好了,這樣就可以在項目中提交空目錄了,希望對大家的學習或者工作能有所幫助,如果有疑問大家可以留言交流。
在git中如果想忽略掉某個文件,不讓這個文件提交到版本庫中,可以使用修改根目錄中 .gitignore 文件的方法(如無,則需自己手工建立此文件)。這個文件每一行保存了一個匹配的規則例如:
1
2
3
4
5
6
7
|
# 此為注釋 – 將被 Git 忽略
*.a
# 忽略所有 .a 結尾的文件
!lib.a
# 但 lib.a 除外
/TODO
# 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO
build/
# 忽略 build/ 目錄下的所有文件
doc/*.txt
# 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
|
規則很簡單,不做過多解釋,但是有時候在項目開發過程中,突然心血來潮想把某些目錄或文件加入忽略規則,按照上述方法定義后發現並未生效,原因是.gitignore只能忽略那些原來沒有被track的文件,如果某些文件已經被納入了版本管理中,則修改.gitignore是無效的。那么解決方法就是先把本地緩存刪除(改變成未track狀態),然后再提交:
1
2
3
|
git
rm
-r --cached .
git add .
git commit -m
'update .gitignore'
|
1、剛建立項目時我們為了保證項目結構完整,要提交空的文件夾 , 但是git默認是忽略空目錄的。
這時候我們只需要在git 根目錄下執行
find . -type d -empty -exec touch {}/.gitignore \;
就可以上傳空的文件夾了,本質上是在空目錄里建立了一個.gitignore文件,等文件夾中新建了文件再把它刪掉即可。
2、在頂層目錄中的.gitignore中添加以下內容:
# Ignore everything in this directory
*
# Except this file
!.gitignore