SVN:一部のディレクトリを再帰的に無視します


106

ツリーの深さに関係なく、名前を付けbuildたりディレクトリをdistSVNに入れたりしたくありません。

これは可能ですか?gitでは私はちょうど入れました

build
dist

.gitignoreのルートで、再帰的に無視します。svnでこれを行うにはどうすればよいですか?すべての親ディレクトリで小道具セットを行うように言わないでください...


Subversion 1.8を使用している場合は、この回答でネイティブソリューションを確認してください。
フランクKusters

回答:


57

Subversion 1.8以降、現在は再帰的にsvn:global-ignores機能するプロパティがありsvn:ignoreます(最上位ディレクトリに設定してください)。


3
私は少し混乱global-ignoresしてい~/.subversion/configます- ファイルにありますが、SVNリポジトリのディレクトリに設定された継承可能な svn:global-ignoresプロパティも同様にsvn:ignore-これらのさまざまなオプションの概要とそれらの比較方法を提供できますか?--recursiveフラグはそれらにどのように影響しますか?

2
私は自分で調査を行い、このQAの回答で結果を公開しました:stackoverflow.com/a/86052/159145
Dai

[試してみましたが失敗しましたが、objフォルダはまだ表示されます](stackoverflow.com/questions/50960188/…)、それを確認するのを手伝ってくれませんか?
ルーク、

「build / *」と言って、すべてのビルドフォルダー内のビルドの下のすべてを無視できますか?
ヨハネスシャウブ-litb

45

svn propset--recursiveオプションとして取るので、これを行うことができますが、2つの欠点があります。

  1. リポジトリ全体(または少なくともその中のすべてのディレクトリ)をチェックアウトする必要があります。
  2. svn:ignore新しいディレクトリを追加するときは、必ずプロパティを設定する必要があります

42

これを行うことはできません。Subversionには、svn:ignore(再帰的global-ignoresではない)と(リポジトリに固有ではない)2つの無視メカニズムしかありません。


7
svn propset --recursive svn:ignore svn_ignore_rules。ここで、svn_ignore_rulesは無視ルールを含むファイルです(1行に1つ)
georg

3
「svn propset --recursive svn:ignore --file svn_ignore_rules」私にとってsvn-1.7.6では、 'svn_ignore_rules'という名前のファイルを再帰的に無視しています[編集:以下のコメントの 'wytten'
に従って

9
コメント者へ:質問者が言ったように、「すべての親ディレクトリで小道具セットを行うように言わないでください...」。
Kevin Reid 2013年

5
Subversion 1.8
Squirrelで

17

これは私にとってはうまくいきます:

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

2
おかげで、うまくいきました...ところで、*。txtと* .pdfの両方を無視する唯一の方法は、それらのパターンをファイルに入れて、 'svn propset --file'オプションを使用することでした
wytten

13

〜/ .subversion / configまたは/ etc / subversion / configファイルに追加します。

[miscellany]
global-ignores = build dist

できれば、レポごとに実行したい
Paul Tarjan

1
ええと、レポごとにそれを行う簡単な方法があるかどうかはわかりません。プリコミットフックは特定のパターンを拒否する可能性がありますが、完全なソリューションではありません。各親ディレクトリのsvn:ignoreは機能しますが、再帰的には機能しません。別のリポジトリで作業するときに、スクリプトで構成ファイルを交換することもできますが、それは追加の手順です。
jspcal

1
何をしないビルドは、distの意味ですか?
IgorGanapolsky

9

バージョン管理からディレクトリを削除することで、ビルドとディストリビューターを無視することが可能です。秘訣は--keep-localオプションを使用してディレクトリを作業コピーに残すことです。例えば:

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

ディレクトリはsubversionによって追跡されなくなりますが、コンパイラーの出力などを保持するために作業コピーに残っています。

乾杯、ジョー


7

たとえば、フォルダー構造:

Project/
Project/dist/

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

ignoreコマンドの前にdistコンテンツのsvn deleteを実行することをお勧めします。これにより、ブランチのdistは空になります。

私のために働いて、今日テストされました。 こちらが少し説明のあるページです


6

すべてのリポジトリにあるそのようなファイルをすべて無視するにはglobal-ignores、ユーザーごとの構成ファイルにを追加します。

Unixライクなシステムでは、この領域はユーザーのホームディレクトリに.subversionという名前のディレクトリとして表示されます。Win32システムでは、SubversionはSubversionという名前のフォルダーを作成します。通常は、ユーザーのプロファイルディレクトリのアプリケーションデータ領域内にあります

構成オプションを参照

残念ながら、これを行うリポジトリごとのオプションはありません。それは基本的にユーザーごと、またはディレクトリごとなので、複数にするのsvn:ignoresがおそらく迷惑な方法です。


1
できれば、レポごとに実行するほうがよい
Paul Tarjan

ああ、それからあなたは運が悪い。@Kevin Reidが言うように-あなたはディレクトリごとまたはユーザーごとに持っています。
ブレアコンラッド

6

まず、作業コピーの一番上のフォルダーに移動し、そこにファイル(.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/


これは非常に役に立ちました。これは、svnでgitのような無視動作を取得するために見つけた最良の方法です。どうもありがとう。
ジョナサンウィルソン

6

Subversion 1.8以降では、現在のリポジトリにグローバル無視を設定することが可能です。

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

また、.svnignoreという名前のフォルダーを作成し、条件を書き込むこともできます。

build
dist

1行につき1つの条件を覚えてください。build/ *またはdist / debugの設定は無駄です。次に、次のコマンドを実行します。

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

完璧に動作します!新しくチェックアウトしたリポジトリで最初のコマンドを実行するだけです。
gaurav

3

ファイルを作成し、無視をファイルに追加します

インゴアリスト:

file1 
directory1
file2
etc...

次に、次のコマンドを適用します

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

directoryはディレクトリの名前です。ディレクトリ/サブディレクトリと同様にサブカテゴリ化できます。または、*を使用して、現在のディレクトリをメモします。

これは、シェルとしてbashを使用していることを前提としています


ここの$ nは何ですか?
IgorGanapolsky

1
@igor Ganapolsky-$ nはforループの変数です。ループするシーケンスのインデックスとして設定されます。この場合、上記の例の「ディレクトリ」で指定されたディレクトリ。
jncc99 2016

3
svn propset --recursive svn:ignore svn_ignore_rules .

ここで、svn_ignore_rulesは無視ルールを含むファイルです-1行に1つ

もちろん、リポジトリに新しいディレクトリを追加するたびに再実行する必要があります

svn_ignore_rulesは、リポジトリへの書き込みアクセス権を持つ他のユーザーが再利用できるように、リポジトリにチェックインされていると見なすこともできます


2
cd parent_dir#再帰的に無視されるフォルダーを含むディレクトリ
svn propedit svn:ignore。#svn-prop.tmpを開きます
フォルダーを参加させる
^ X
Y
commit -m「ターゲットディレクトリを無視」

助けてくれた、フォルダパターンの設定に問題があった、SVNはそのフォルダがリポジトリにないことを順守していたがset EDITOR=notepadsvn propedit svn:ignore .うまくいった...
Betlista

1

このおそらく一般的な問題の解決策はないようですので、私は私たちの解決策を共有したいと思います。他のユーザーがすでに明らかにしたようにsvn:ignore、このプロパティを使用するか、これを単一のディレクトリに適用する(したがって、新しいディレクトリには適用しない)かglobal-ignores、単一のユーザーに適用する(リポジトリに属さない)を使用できます。

人生を少し簡単にするために、私はという名前のregファイルを作成し、Settings.Svn.regそれをリポジトリのルートに追加しました。これで誰もが一度このregfileをダブルクリックでき、設定が完了しました。

REGEDIT4

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

私は本当にSVNリポジトリ内のソリューションに感謝します。誰かが知っている場合は、それを共有してもらえますか?


0

1つの方法は、コミット前またはコミット後のフックに何らかのチェックを追加することですが、リポジトリサーバーを所有していない場合は簡単に確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.