SVNでディレクトリを無視するにはどうすればよいですか?


760

私はSVNを使い始めたばかりで、ソース管理下で不要なキャッシュディレクトリがあります。SVNでディレクトリ/フォルダー全体を無視するにはどうすればよいですか?

OS XとコマンドラインでバージョンTextMateを使用しています。


3
同様の質問がここに回答[SVN checkout ignore folder] [1] [1]:stackoverflow.com/questions/192824/svn-checkout-ignore-folder
mloskot

Subversionでファイルを無視するにはどうすればよいですか? (私は複製がどのように進むかについてあまり気にしません。どちらの答えのセットも明らかに他よりも優れています。)
Jeffrey Bosboom

回答:


796

svn:ignore親ディレクトリのプロパティを設定します。

svn propset svn:ignore dirname .

無視するものが複数ある場合は、プロパティ値を改行で区切ります。その場合、外部エディターを使用してプロパティ値を編集する方が簡単です。

svn propedit svn:ignore .

2
@Kouber:あなたの問題は、シェル拡張がsvn:ignoreプロパティを認識しないことです。したがって、パラメータ*をexplicitylとして使用すると、tmpがcommitコマンドに渡されます。'svn commit -m "その他のアクセント"のようなものを試してください。
MarkusSchaber

4
答えてくれてありがとう。エディターとしてのPico:svn propedit svn:ignore。--editor-CMDピコ
hade

157
注:ディレクトリが既にsvnにある場合、これは機能しません。 svn rm --keep-local dirname最初。(私のsvn stat出力は膨大で、しばらく頭にぶつかりました。)
Erik Aronesty

10
あなたが複数のファイル/フォルダを無視したい場合は、以下のバリアントをtxtファイル、1行ごとにその名前のすべてを追加し、使用:svn propset svn:ignore -F file.txt .
petervaz

2
あなたが設定されていることに注意してくださいsvn:ignoreではなくsvn::ignore、私が行ったように。任意のプロパティを設定できるため、後者はOKに設定され、プロパティを表示および編集できますが、SVNがリストされたファイルを無視することはありません。
Richard Turner

406

次にディレクトリ構造の例を示します。

\project
    \source
    \cache
    \other

projectキャッシュディレクトリが追加されておらず、そのように表示されていることがわかります。

> svn st
M  source
?  cache

ignoreプロパティを設定するには、次のようにします。

svn propset svn:ignore cache。

どこsvn:ignore財産あなたしている設定の名前で、cacheプロパティの値であり、そして.あなたがこのプロパティを設定しているディレクトリです。cacheプロパティを必要とするディレクトリの親ディレクトリである必要があります。

設定されているプロパティを確認するには:

> svn proplist
Properties on '.':
  svn:ignore

の値を確認するにはsvn:ignore

> svn propget svn:ignore
cache

以前に設定したプロパティを削除するには:

svn propdel svn:ignore

17
ここで私がつまずいた、1つのトリッキーなポイント。末尾にスラッシュを追加しないでくださいdirname。たとえば、と入力するときにsvn propset svn:ignore dirname、(bash)シェルがdirnameを入力できるようにすると、末尾にスラッシュが追加され、コマンドが残りますsvn propset svn:ignore dirname/が、フォルダーは無視されません。少なくとも、それは私の経験でした。
David Weinraub

4
「キャッシュ」ディレクトリは引き続き「svn st」にリストされます。それをビューから削除する方法はありますか?(ディスクからの削除なし)
Tom Brito

131

言及することが重要:

コマンドラインでは使用できません

svn add *

これにより、無視されたファイルも追加されます。これは、コマンドラインが拡張され*svn addすべてのファイルを追加する必要があると考えられるためです。したがって、代わりにこれを使用してください:

svn add --force .

@bincoが言ったように正確に行います:機能しsvn add --force *ません。星ではなくドットを使用してください。
manuell

80

これを機能させるためにしばらく時間を費やしたので、ファイルがすでにSVNに存在している場合は、それらにアクセスしてからプロパティをsvn delete編集する必要があることに注意してくださいsvn:ignore

それは当たり前のことのように思えますが、ローカルで無視するだけだと思ったときに?、私のsvn statusリストのように表示され続けました。


8
単に無視して、実際には削除しない場合は、ファイルを削除するときに--keep-localオプションを使用することを忘れないでください。
ディランホームズ

71

少し拡張すると、svnコマンドラインツールでこれを行う場合は、次のように入力します。

svn propedit svn:ignore path/to/dir

選択したテキストエディターを開き、 '*'を入力してその中のすべてを無視し、save + quitを実行します。これにより、svnにディレクトリ自体が含まれますが、その中のすべてのファイルは無視され、ディレクトリを無視するには、親のパス、次にファイル内のディレクトリの名前を入力します。保存した後、更新( 'svn up')を実行し、適切なパスをチェックインします。


8
とても良い点、ありがとうございます。他のすべての回答は、ネストされたディレクトリのケースを逃しました。したがって、上記の例(機能)は、次に、ignored_directoryエディターに入力します(これは、path / to / dirの1レベル下にあると想定しています)。ただし、これは機能しません:svn propedit svn:ignore。次に、エディターでpath / to / dir / ignored_directoryと入力します。IOW:SVNは、一度に1レベル下のオブジェクトと一致します。
greenoldman 2010年

30

svn:ignore親ディレクトリのプロパティを設定します。

$ cd parentdir
$ svn ps svn:ignore . 'cachedir'

これにより、の現在の値が上書きされますsvn:ignore。あなたは値を編集します:

$ svn pe svn:ignore .

エディターが開きます。1行に1つずつ、複数のパターンを追加できます。

現在の値は次の方法で表示できます。

$ svn pg svn:ignore .

GUIを使用している場合、これを行うためのメニューオプションがあるはずです。


3
svn ps svn:ignore . 'cachedir'結果は cachedir is not under version controlです。svn ps svn:ignore 'cachedir' .私のために働くように変更
DiCaprio

21

上記のすべての貢献に感謝します。ファイルを無視しながら、私の経験からいくつかの追加情報を共有したいと思います。


フォルダが既にリビジョン管理されている場合

のsvnインポートおよびSVN共同私たちは通常、最初の時間のために何をすべきか、ファイルを。

すべてのランタイムキャッシュ、添付ファイルフォルダーはバージョン管理下にあります。そのため、svn ps svn:ignoreの前に、リポジトリから削除する必要があります。

上記のSVNバージョン1.5 svn del --keep-local your_folderではを使用できますが、以前のバージョンの場合、私の解決策は次のとおりです。

  1. svnはフォルダのクリーンなコピーをエクスポートします(.svn隠しフォルダなし)
  2. ローカルとリポジトリのsvn del
  3. svn ci
  4. フォルダをコピーして戻す
  5. ドゥSVN STとフォルダは次のようにフラグが付けられている確認「?」
  6. これで、解決策に従ってsvn psを実行できます

複数のフォルダを無視する必要がある場合

  • 1つのディレクトリに、次のように設定する必要がある2つのフォルダがあります。 svn:ignore
  • 一方を設定すると、もう一方は削除されます。
  • 次に、svn peが必要だと思います

svn peテキストファイルを編集する必要があります。viを使用してテキストエディターを設定する必要がある場合は、このコマンドを使用できます。

export SVN_EDITOR=vi
  1. 「o」で新しい行を開くことができます
  2. 無視するすべてのフォルダ名を入力します
  3. 「esc」キーを押して編集モードを終了します
  4. 「:wq」と入力してEnterから、保存して終了します

ファイルは次のようになります。

runtime
cache
attachments
assets

svn propset svn:ignore -F .ignorethesefiles .ファイルの内容を使用するを使用することもできます。私はそれを維持するのが好きなので、無視されているものを知っています。編集にはフォローアッププロップセットが必要です。
Gerard ONeill、2015年

20

まず削除してください...

ディレクトリfooがすでにバージョン管理下にある場合は、まず次のコマンドで削除します。

svn rm --keep-local foo

...次に無視します:

svn propset svn:ignore foo .

12

...そして、複数のディレクトリ(たとえばbuild/ temp/*.tmpファイル)を無視したい場合は、2つのステップ(最初のファイルを無視して無視のプロパティを編集(ここで他の回答を参照))で行うか、次のように記述します。

svn propset svn:ignore "build
temp
*.tmp" .

コマンドラインで。


12

特定のSVNクライアントTortoiseSVNを使用している場合は、コミット時に、アイテムを右クリックして[無視リストに追加]を選択するオプションがあります。


9

複数のエントリを無視するコマンドは少しトリッキーで、バックスラッシュが必要です。

svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .

このコマンドは、名前の何かを無視しますcachetmpnull、およびand_so_onカレントディレクトリに。


6
そして明確にするために:ここのバックスラッシュはsvnの機能ではありません。シェルで複数行の文字列を入力する方法にすぎません。エディターを使用して、複数の行を記述することもできます。
2011年

バックスラッシュはbashには必要ありません。bashは、 "が開いていて行を処理しないことを認識するのに十分なほどスマートです。必要なのは、キャッシュ、tmp、nullの後にEnterキーを押すことだけです。bashがプロンプトを>に変更して、まだコマンドを入力しています。別の方法として、コマンド(svn)の入力を開始し、次にescを押してからvを押します。これにより、エディタにコマンドを入力できるようになります。完了したらZZを押してコマンドを実行します。実行したくない場合は、:q !.
Michael Potter

1
svn propset svn:ignore -F .ignorethesefiles .ファイルを使用できるようになります。そして、述べたように、あなたは常にpropeditを持っています。
Gerard ONeill、2015年

5

ネストされたディレクトリを無視するのに問題がありました。無視したい最上位のディレクトリは「svn status」で表示されませんが、すべてのサブディレクトリは表示されました。これはおそらく他のすべての人には自明ですが、私はそれを共有したいと思いました。

例:

/トランク

/ trunk / cache

/ trunk / cache / subdir1

/ trunk / cache / subdir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci

4

「ありがとう」 svnは、ファイルを無視するこのような恐ろしく、偽り、難しい方法です。

だから私はスクリプトsvn-ignore-allを書きました:

#!/bin/sh

# svn-ignore-all

# usage: 
#   1. run svn status to see what is going on at each step 
#   2. add or commit all files that you DO want to have in svn
#   3. remove any random files that you don't want to svn:ignore
#   4. run this script to svn:ignore everything marked '?' in output of `svn status`

svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

また、特定のファイル/パス名のリストを無視するには、このバリアントsvn-ignoreを使用できます。私はsvn-ignore-allは本当にxargs svn-ignoreのようであるべきだと思います。

#!/bin/sh

# svn-ignore

# usage:
#   svn-ignore file/to/ignore ...

for f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

もう1つ:多くのランダムファイルでsvnチェックアウトを汚染する傾向があります。コミットするときは、これらのファイルを「古い」サブディレクトリに移動し、「古い」を無視するようにsvnに指示します。


ねえ、サム、いいスクリプトですね。質問が頭に浮かびました。問題は、リポジトリの一部であるフォルダ全体を無視することが機能しないという事実に起因しているのではないでしょうか。無視リストに追加したフォルダ内の基本的に変更されたファイルですか?常に実行するのは面倒なので、スクリプトを回避する方法はあるのでしょうか。あなたは?
SquareCat 2014

いいえ、実際には使用しません。私のファイルをクリーンアップしてみてください
サムワトキンス


3

プロジェクトディレクトリの名前が/ Projectで、キャッシュディレクトリの名前が/ Project / Cacheの場合、/ Projectにsubversionプロパティを設定する必要があります。プロパティ名は "svn:ignore"で、プロパティ値は "Cache"である必要があります。

プロパティの詳細については、Subversionマニュアルのこのページを参照しください。


3

ジェイソンの答えはトリックを行います。ただし、svn:ignoreを "。"に設定する代わりに キャッシュディレクトリでは、キャッシュディレクトリが常に存在するとは限らない場合は、ディレクトリのsvn:ignoreプロパティに「キャッシュ」を含めることができます。私はいくつかの「使い捨て」フォルダでこれを行います。


3

SVNが無視するディレクトリを保持するには:

  1. これにより、リポジトリからファイルが削除されますが、ディレクトリはSVNの制御下に置かれます。

svn delete --keep-local path / directory_to_keep / *

  1. 次に、ディレクトリ(およびすべてのコンテンツ)を無視するように設定します。

svn propset svn:ignore "*" path / directory_to_keep


2

TortoiseSVNのようなSVNのフロントエンド、または何らかのIDE統合を使用している場合は、コミット/追加操作と同じメニューに無視オプションもあるはずです。



1

バージョンを使用しているので、実際には非常に簡単です。

  • チェックアウトしたコピーを閲覧する
  • 無視するディレクトリをクリックしてください
  • 右側の[無視]ボックスで[編集]をクリックします
  • すべてのファイルを無視するには*。*と入力します(jpgファイルのみの場合は* .jpgなど)

1

末尾のスラッシュにも注意してください。images/*無視設定ファイルに含めても無視されないことがわかりました./images/。私が走っsvn status -uたとき、それはまだ示されました? images。だから、私は無視する設定を単にimagesスラッシュなしに変更しました。ステータスチェックを実行し、それをクリアしました。


1

次の方法でEclipseで解決:

まず、フォルダーをプロジェクトに同期します。

チーム->同期

次のビューであるチームビューでは、SVNサーバーにコミットできるすべてのリソースを確認できます。

したがって、無視するリソースのリソースフォルダーを選択し、それを使用して無視できます

チーム->に追加svn:ignore

その後、確認ウィンドウで最初のオプション「名前で無視」を選択してください。

たとえば、ターゲットフォルダーとそれらの.classリソースを無視したい場合は、同期を行い、同期ビューでターゲットフォルダーを選択します。その後、私は選択します

チーム->追加

に移動svn:ignoreし、確認ウィンドウで最初のオプションを確認します。


0

この簡単なアクティビティの方法を探すために多くの時間を失った後、私は投稿することにしました。適切な説明を見つけるのは難しくありませんでした。

まずサンプル構造をみましょう

$ svn st?プロジェクト/トランク/ターゲット?project / trunk / myfile.x

1 –最初にエディターを構成し、mycase vim export SVN_EDITOR = vimで

2 –「svn propedit svn:ignore project / trunk /」は新しいファイルを開き、ファイルとサブディレクトリを追加できます。「target」と入力すると、ファイルを保存して閉じ、機能します。

$ svn st?project / trunk / myfile.x

ありがとう。

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