簡體   English   中英

SVN:遞歸地忽略一些目錄

[英]SVN: Ignore some directories recursively

我不希望任何名為builddist目錄進入我的SVN,無論它在樹中有多深。

這可能嗎? 在git我剛剛放

build
dist

在我的.gitignore根目錄,它遞歸忽略。 我怎么用svn做這個? 請不要告訴我在每個父母的目錄上做一個propset ...

從subversion 1.8開始,現在有svn:global-ignores屬性,它的作用類似於svn:ignore但是遞歸(所以在你的頂級目錄中設置它)

svn propset--recursive作為一個選項,所以你可以做到這一點,有兩個缺點:

  1. 你必須檢查整個存儲庫(或至少其中的所有目錄),和
  2. 你必須記住在添加新目錄時設置svn:ignore屬性

這是不可能的。 Subversion中只有兩種忽略機制, svn:ignore (非遞歸)和global-ignores (不特定於存儲庫)。

這對我有用:

 svn propset --recursive svn:ignore *.zip <dir_tree_with_no_zips>

添加到〜/ .subversion / config或/ etc / subversion / config文件:

[miscellany]
global-ignores = build dist

通過從版本控制中刪除目錄,可以忽略構建和分配。 訣竅是使用--keep-local選項將目錄保留在工作副本中。 例如:

svn rm dist --keep-local
svn ci -m'removed build directory from version control'

subversion將不再跟蹤該目錄,但它仍然會在您的工作副本中保存編譯器輸出等。

歡呼,喬

例如文件夾結構:

Project/
Project/dist/

cd Project
svn propset svn:ignore '*' dist/
svn ci -m "content of dist ignored"

在ignore命令之前對dist內容進行svn刪除是很好的,因此對於branches dist將為空。

為我工作,今天進行測試。 這是一個解釋它的頁面

為了忽略所有存儲庫中的所有此類文件,您可以向每用戶配置文件添加global-ignores

在類Unix系統上,此區域在用戶的主目錄中顯示為名為.subversion的目錄。 在Win32系統上,Subversion創建一個名為Subversion的文件夾,通常位於用戶配置文件目錄的Application Data區域內

請參閱配置選項

不幸的是,沒有每個存儲庫選項來執行此操作。 它基本上是每個用戶或每個目錄,所以多個svn:ignores可能是要走的路,盡管它很煩人。

您首先必須移動到工作副本的頂級文件夾並在那里創建一個文件(例如.svnignore),您應該在其中放置您想要忽略的所有模式,例如(對於Android項目):

bin
gen
proguard
.classpath
.project
local.properties
Thumbs.db
*.apk
*.ap_
*.class
*.dex

然后運行以下命令(請記住,您必須位於工作副本的頂級文件夾中):

svn propset svn:ignore -R -F .svnignore .

這僅適用於尚未受版本控制的文件夾和文件。 如果您希望開始被忽略的文件夾(或文件)也被忽略,請通過運行以下命令將其從版本控制中刪除:

svn rm --keep-local <path>

從這篇解釋一切的精彩文章中得到了所有這些: http//superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/

在subversion 1.8 over中,可以為當前存儲庫設置global-ignores。

svn propset svn:global-ignores build .
svn propset svn:global-ignores dist .

您還可以創建名為.svnignore的文件夾,並編寫條件。

build
dist

記住每行一個條件,設置build / *或dist / debug是徒勞的。 然后執行命令:

svn propset svn:global-ignores -F .svnignore .

創建一個文件並將您的忽略添加到其中

則會忽略列表:

file1 
directory1
file2
etc...

然后應用以下命令

for n in directory; do svn propset svn:ignore -F ignore-list $n; done

directory是您的目錄的名稱,您可以對目錄/子目錄進行子分類。 或者使用*來記錄您所在的當前目錄。

這假設您使用bash作為shell

svn propset --recursive svn:ignore svn_ignore_rules .

其中svn_ignore_rules是一個包含忽略規則的文件 - 每行一個

當然,每次向repo添加新目錄時都必須重新運行它

svn_ignore_rules也可以被視為已檢入倉庫,可由具有對倉庫的寫入權限的其他用戶重新使用

cd parent_dir #the directory containing folder to be ignored recursively
svn propedit svn:ignore . #will open up svn-prop.tmp
enlist folder(s)
^X
Y
commit -m 'ignore targeted direcoty'

一種方法是在提交前或提交后掛鈎添加某種檢查,但如果您不擁有repo服務器則直接注意。

由於似乎沒有解決這個可能常見的問題,我想分享我們的解決方案。 正如其他人已經明確的那樣,您可以使用svn:ignore屬性,這適用於單個目錄(因此不適用於新目錄),或者您使用適用於單個用戶的global-ignores (但不屬於到存儲庫)。

為了讓生活更輕松,我創建了一個名為Settings.Svn.reg的reg文件,並將其添加到存儲庫的根目錄中。 現在每個人都可以雙擊這個regfile一次,並完成設置。

REGEDIT4

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany]
"global-ignores"="obj *.suo *.bak *.pdb *.user *.Cache*"

我真的很感激SVN存儲庫中的解決方案,所以如果有人知道,你願意分享嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM