2012-12-26 81 views
3

我剛纔已下載(沒有克隆!)CakePHP 2.2.4。 目錄containains一個.gitignore文件:git add忽略修改-f

# only the relevant part here 
/app/Config 
/app/tmp 

現在我執行這些命令,因爲目錄(和它們的初始內容)配置TMP原本從未承諾:

git add -f Config 
git add -f tmp 

我與tmp目錄沒有問題,因爲在那裏沒有文件被改變,只有新文件將被創建!

相反,我不得不修改Config文件夾中的某些文件(例如數據庫配置)。 但Git現在要我git add這些修改過的文件了!

我該如何忽略這些修改?

我也可以重新整個Git回購,因爲我沒有創建/修改太多。


我修改CakePHP的解決實際問題的

我的新*.gitignore文件的CakePHP:

# removed: /app/Config/ 

# start edit 
/app/Config/* 
!/app/Config/Schema/ 
!/app/Config/*.default.php 
# end edit 

/app/tmp 
/lib/Cake/Console/Templates/skel/tmp/ 
/plugins 
/vendors 
/build 
/dist 
.DS_Store 
/tags 

我也後綴的所有文件/應用/配置。默認

  • acl.ini.default.php。

  • acl.default.php。

  • bootstrap.default.php。

  • core.default.php。

  • database.php.default - > database.default.php

  • email.php.default - > database.default.php

編輯:這是更好地具有*.default.php而不是*.php.default,因爲如果mod_rewrite失敗(儘管這不太可能),這會阻止將文件輸出到瀏覽器。

回答

3

Git不跟蹤目錄;只有文件。所以當你運行git add -f Config時,git只是在Config之下的工作樹中添加所有文件,而不是目錄本身。由於這些文件被Git跟蹤(因此覆蓋忽略規則),改變它們會導致Git認爲工作樹很髒。

這些規則爲Configtmp存在於CakePHP的.gitignore文件中,因爲整個目錄可以被Git有效地忽略;不需要顯式創建空目錄,因爲CakePHP可能會自動創建它們。

如果你想讓Git知道,應該有一個目錄中有,但忽略它的內容有些道理,那麼你可以添加的.gitignore文件中Configtmp包含的規則*,這將告訴它忽略該目錄中的所有內容。但是,由於.gitignore文件存在,它將保持目錄本身。


更新:如果你想存儲在Git的一個「默認」的配置將被每個工作拷貝基礎上定製的,你是下一個不同的更好犯了模板配置文件當存儲庫被克隆並填充特定於環境的配置選項時,該名稱可以被複制到新的(被忽略的)文件中。

正如我所看到的,配置文件本身不應該保留在版本控制之下,因爲它們需要根據使用工作副本的環境來定製,所以以這種方式保存模板副本似乎是自然的解決方案(這是Wordpress所做的)。

+0

不幸的是,CakePHP沒有創建基本的tmp目錄和配置文件。有沒有辦法告訴Git它應該提交這些文件一次,它應該忽略任何進一步的文件更改? – ComFreek

+0

據我所知並不如此。你爲什麼想這樣做? –

+0

問題是,如果有人會克隆我的回購,他不會得到* Config *目錄,因此他必須從其他來源複製和粘貼基本文件。但與此同時,我不想將我的個人/本地更改提交到所有文件。我在SO([答案鏈接](http://stackoverflow.com/a/761116/603003))上找到了'git update-index --assume-unchanged',這是我在找什麼? – ComFreek