2013-07-21 50 views
0

我想忽略具有特定擴展名(例如* .config)的所有文件,因爲它們是生成的,除了名爲「packages.config」的靜態文件外。實質上,開發人員不應該在app.config,bob.config,web.config或任何其他擴展名爲「.config」的文件中不小心簽入。除了svn中的packages.config,忽略* .config的適當模式是什麼?

什麼是svn:ignore的合適模式?

我試過

如果我設置svn:無視

*.exe 
*.dll 
[Bb]in 
[Oo]bj 
[Rr]elease 
[Dd]ebug 
*.config 

那麼所有的文件將被忽略,包括packages.config。這是預料之中的。因此,我想驗證我可以排除文件名中包含所有配置文件。

*.exe 
*.dll 
[Bb]in 
[Oo]bj 
[Rr]elease 
[Dd]ebug 
packages.config 

哪個技巧。

但是,我無法得到該模式的反例。我搜索了互聯網的例子,並發現使用"^"和另一個使用"!"提及。

我試圖

*.exe 
*.dll 
[Bb]in 
[Oo]bj 
[Rr]elease 
[Dd]ebug 
!packages.config 

這並沒有收到預期的效果。在這一點上,我意識到我顯然不明白如何實現這一點。所以我嘗試加入!packages.config然後*.config

*.exe 
*.dll 
[Bb]in 
[Oo]bj 
[Rr]elease 
[Dd]ebug 
!packages.config 
*.config 

*.config然後!packages.config

*.exe 
*.dll 
[Bb]in 
[Oo]bj 
[Rr]elease 
[Dd]ebug 
*.config 
!packages.config 

並添加^packages.config

*.exe 
*.dll 
[Bb]in 
[Oo]bj 
[Rr]elease 
[Dd]ebug 
^packages.config 

,沒有工作。

來源

很多,我訪問的重點是如何排除文件的網站。

回答

0

一句話:你不能。 ..

但是,如果您的存儲庫中已有packages.config,那麼即使svn ignore設置爲*.config,也不會將忽略爲。您不能忽略存儲庫中已有的東西。

但是,從您的需要,聽起來好像您可以使用我的pre-commit hook更好地控制您的情況。我的鉤子獲取控制文件中指定的規則列表。對於文件規則,與文件名稱匹配的最後一條規則是它們被授予的訪問權限。在你的情況,你將有兩個規則:

[FILE Configuration files must be named "packages.config"] 
file = **/*.config 
access = no-add 
users = @ALL 

[FILE Configuration files must be named "packages.config"] 
file = **/packages.config 
access = read-write 
users = @ALL 

如果有人試圖添加bob.config,到庫,我的第一條規則生效。 bob.config匹配*.config,並且該規則表示不能添加任何以.config結尾的文件。

但是,如果有人嘗試添加packages.config到存儲庫,它會奏效,因爲雖然packages.config匹配的規則和第一條規則禁止它,packages.config也符合第二條規則允許它。第二條規則勝過第一條規則。

作爲獎勵,我的預提交鉤子將禁止在bob.config中添加,即使用戶試圖忽略忽略(用戶可以自由執行)。