本文經原作者同意,從原始位置 http://blogs.collab.net/subversion/repository-dictated-configuration-day-3-global-ignores 複製。已移除或更新失效的連結。
作者:Paul Burba
張貼 2013-06-26
歡迎閱讀我關於儲存庫指示的設定 (RDC) 的三部曲系列的最後一個主題。在第 2 部分,我們討論了新的 svn:auto-props 屬性。今天,我們將討論涉及 RDC 的另一個新的繼承屬性 svn:global-ignores
。
再次強調,這只是一個快速的複習,如果這些內容聽起來都不熟悉,請快速閱讀 Subversion 版本控制手冊的 此區段。
在 1.7 之前,有兩種方法可以防止 svn add 和 import 子命令新增我們不希望置於版本控制下的特定項目(以及讓 svn status 忽略此類未版本化項目)。這兩種方法在 1.8 中仍然存在
首先,是 global-ignores 執行時期組態選項
### Set global-ignores to a set of whitespace-delimited globs ### which Subversion will ignore in its 'status' output, and ### while importing or adding files and directories. ### '*' matches leading dots, e.g. '*.rej' matches '.foo.rej'. global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__ *.rej *~ #*# .#* .*.swp .DS_Store
其次是 svn:ignore
版本化屬性。此屬性可以設定在任何目錄上,其值預期是 Subversion 應忽略的檔案模式的新行分隔清單。這些模式會附加到執行時期組態中定義的任何忽略模式。
在 Subversion 1.8 中,這些現有的忽略機制加入了 svn:global-ignores
屬性。這個新屬性基本上是 svn:ignore
屬性功能更強大的版本。與較早的屬性一樣,svn:global-ignores
只能設定在目錄上,且其值應為一組換行分隔的檔案樣式 1。這些樣式會附加到 global-ignores 執行時期組態選項中定義的任何樣式,以及任何適用的 svn:ignore
定義的樣式,以決定可忽略的項目。然而,與 svn:ignore
不同的是,svn:global-ignores
屬性是可繼承的,且適用於設定屬性的目錄下的所有路徑 2,而不仅仅是目錄的直接子目錄。
以下簡短範例示範這個新屬性的運作方式。
使用 --no-ignore
選項時,svn:global-ignores
樣式本身會被忽略(與執行時期組態 global-ignores 和 svn:ignore 屬性一樣)。因此,若要查看工作副本中的所有未版本化項目,我們將該選項傳遞給狀態子指令
1.8.0>svn st --no-ignore ? calc\trunk\doc\README.foo I calc\trunk\file.bar I calc\trunk\file.baz I calc\trunk\file.foo I calc\trunk\file.qux
在這裡,我們看到四個檔案被忽略,而一個檔案(README.foo)未版本化,但與任何忽略樣式都不相符。首先,我們來看一下 calc/trunk 上的 svn:ignore 屬性
1.8.0>svn pg svn:ignore -vR Properties on 'calc\trunk': svn:ignore *.foo *.moo
這說明了 file.foo。然後,我們檢查我們的執行時期組態,並找到這個片段
### Set global-ignores to a set of whitespace-delimited globs ### which Subversion will ignore in its 'status' output, and ### while importing or adding files and directories. ### '*' matches leading dots, e.g. '*.rej' matches '.foo.rej'. global-ignores = *.qux
這說明了 file.qux。但 file.bar 和 file.baz 呢?只有一個選項,新的 svn:global-ignores 屬性。當然,在儲存庫的根目錄上,我們找到了該屬性,其樣式說明了其餘兩個被忽略的檔案
1.8.0>svn pg svn:global-ignores -v --show-inherited-props calc\trunk Inherited properties on 'calc\trunk', from '.': svn:global-ignores *.bar *.baz
正如我們在第 2 部分中關於 svn:auto-props 所討論的,svn:global-ignores 應設定在儲存庫樹狀結構中可行範圍內最高的位置。並值得再次提及:務必了解第 1 部分中討論的繼承屬性的限制,以及因此透過 svn:auto-props
和 svn:global-ignores
進行 RDC 的限制。
Paul 是 Apache 軟體基金會 Subversion 專案的提交者,過去九年來一直致力於 Subversion。他在新罕布夏州的家中擔任 Collabnet 的軟體工程師,當他沒有在編寫程式碼時,通常可以發現他與侄子們一起滑雪、與朋友們一起騎山地車,或與妻子一起旅行。在遙遠的過去,Paul 從新罕布夏大學畢業,取得商業學位。不久前,他從波士頓大學取得電腦科學碩士學位。