2012-08-23 124 views
1

我正在建立一個Lemonstand網站,我通過git進行管理。因此,我用下面的.gitignore規則:.gitignore規則不起作用

# Lemonstand 
.htaccess 
php.ini 
boot.php 
index.php 
install.php 
/config/* 
/controllers/* 
/init/* 
/logs/* 
/phproad/* 
/temp/* 
/uploaded/* 
/installer_files/* 
/modules/backend/* 
/modules/blog/* 
/modules/cms/* 
/modules/core/* 
/modules/session/* 
/modules/shop/* 
/modules/system/* 
/modules/users/* 
# add content_*.php if you don't want erase client changes to content 

/modules/gallery/* 
/modules/lddevel/* 
/modules/tweak/* 

(頂塊I got from github,與第二塊是我自己加避免與Lemonstands更新系統問題的一些額外的規則)。

我的問題是,我正在給Lemonstand添加一個自定義發票,它要求在/modules/shop/invoice_templates/之內添加一個文件夾和一些文件,我已將其命名爲cm_standard

因爲這是額外的默認Lemonstand,我要得到這個跟蹤使用Git,所以我嘗試使用以下規則來我gitignore文件的底部:當我

!/modules/shop/invoice_templates/cm_standard/* 

但做一個git add -A,它不拾取該目錄中的文件。即使我做了git add modules/shop/invoice_templates/cm_standard/*它告訴我:

The following paths are ignored by one of your .gitignore files: 
modules/shop/invoice_templates 
Use -f if you really want to add them. 
fatal: no files added 

這進一步表明我沒有正確寫入規則 - 任何人都可以幫忙嗎?謝謝。

+0

'!/ modules/shop/invoice_templates/cm_standard /'會更好嗎? (沒有最後的'*'') – VonC

+0

@VonC - 也嘗試過,沒有工作。 cm_standard是一個目錄,而不是一個文件,我不確定是否在原始問題中明確表達了這一點,這就是爲什麼我最終得到了*。 –

+0

當你想忽略目錄內容時,你永遠不需要''*'':刪除你所有的'*''並檢查是否更好的工作(對於每個目錄,保留最後的'/') – VonC

回答

1

忽略模式用更少的路徑段可以優先模式與多個路徑段,所以你的情況/modules/shop/*是優先於!/modules/shop/invoice_templates/cm_standard/*,有效地從目錄遍歷修剪整個/modules/shop/invoice_templates/它看起來在!/modules/shop/invoice_templates/cm_standard內容甚至前。話雖如此,排序也可能很重要,如果它確實存在,那麼文件內部稍後的規則會優先於先前的規則。

此問題與How do gitignore exclusion rules actually work?非常相似,所以我建議您閱讀它。當debugging rules - 我在最近幾個月將它添加到git中時,您可能會發現check-ignore子命令很有用,它剛剛出現在幾天前發佈的1.8.2版本中。