SVN を使い始めたばかりで、ソース管理下に不要なキャッシュ ディレクトリがあります。SVNでディレクトリ/フォルダ全体を無視するにはどうすればよいですか?
23 に答える
svn:ignore親ディレクトリのプロパティを設定します。
svn propset svn:ignore dirname .
無視するものが複数ある場合は、プロパティ値を改行で区切ります。その場合、外部エディターを使用してプロパティ値を編集する方が簡単です。
svn propedit svn:ignore .
ディレクトリ構造の例を次に示します。
\project
\source
\cache
\other
キャッシュディレクトリが追加されておらず、そのように表示されprojectていることがわかります。
> svn st
M source
? cache
無視プロパティを設定するには、次のようにします。
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
重要なお知らせ:
コマンドラインでは使用できません
svn add *
これにより、無視されたファイルも追加されます。これは、コマンド ラインが展開され、すべてのファイルを追加する必要があると考えられる*ためです。svn addしたがって、代わりにこれを使用します。
svn add --force .
少し拡張すると、svn コマンドライン ツールでこれを行う場合は、次のように入力します。
svn propedit svn:ignore path/to/dir
これにより、選択したテキストエディターが開き、「*」と入力してその中のすべてを無視し、保存して終了します-これにより、ディレクトリ自体がsvnに含まれますが、その中のすべてのファイルが無視されます。ディレクトリを無視するには、親のパスを入力し、ファイル内のディレクトリの名前を入力します。保存後、更新 ('svn up') を実行し、適切なパスをチェックインします。
svn:ignore親ディレクトリのプロパティを設定します。
$ cd parentdir
$ svn ps svn:ignore . 'cachedir'
これにより、 の現在の値が上書きされますsvn:ignore。次の方法で値を編集します。
$ svn pe svn:ignore .
これにより、エディターが開きます。1 行に 1 つずつ、複数のパターンを追加できます。
現在の値は次の方法で表示できます。
$ svn pg svn:ignore .
GUI を使用している場合は、これを行うためのメニュー オプションが必要です。
上記のすべての貢献に感謝します。ファイルを無視しながら、私の経験からいくつかの追加情報を共有したいと思います。
フォルダがすでにリビジョン管理されている場合
ファイルをsvn importおよびsvn coした後、通常最初に行うこと。
すべてのランタイム キャッシュ、添付ファイル フォルダーはバージョン管理下に置かれます。したがって、svn ps svn:ignoreの前に、リポジトリから削除する必要があります。
上記の SVN バージョン 1.5 では を使用できますsvn del --keep-local your_folderが、以前のバージョンの場合、私の解決策は次のとおりです。
- svn exportフォルダーのクリーン コピー (
.svn隠しフォルダーなし) - svn delローカルとリポジトリ、
- svnci
- フォルダをコピーして戻す
- svn stを実行し、フォルダーに「?」のフラグが付けられていることを確認します。
- これで、ソリューションに従ってsvn psを実行できます
複数のフォルダーを無視する必要がある場合
- 1 つのディレクトリに、次のように設定する必要がある 2 つのフォルダがあります。
svn:ignore - 一方を設定すると、もう一方は削除されます。
- 次に、svn peが必要なのだろうか
svn peテキストファイルを編集する必要があり、必要に応じてこのコマンドを使用して、viを使用してテキストエディターを設定できます。
export SVN_EDITOR=vi
- 「o」で新しい行を開くことができます
- 無視するすべてのフォルダ名を入力します
- 「esc」キーを押して編集モードから抜け出します
- 「:wq」と入力し、ヒットEnterして保存して終了します
ファイルは次のようになります。
runtime
cache
attachments
assets
まずは外して…
ディレクトリfooがすでにバージョン管理下にある場合は、最初に次のように削除します。
svn rm --keep-local foo
...次に無視します:
svn propset svn:ignore foo .
特定の SVN クライアントTortoiseSVNを使用している場合、コミット時にアイテムを右クリックして [無視リストに追加] を選択するオプションがあります。
...そして、複数のディレクトリ(ファイルbuild/ temp/と*.tmpファイルなど)を無視したい場合は、2つのステップでそれを行うことができます(最初の無視プロパティを無視して無視プロパティを編集する(ここで他の回答を参照))か、次のようなものを書くことができます
svn propset svn:ignore "build
temp
*.tmp" .
コマンドラインで。
複数のエントリを無視するコマンドは少しトリッキーで、バックスラッシュが必要です。
svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .
このコマンドは、現在のディレクトリにあるcache、tmp、null、およびという名前のものをすべて無視します。and_so_on
複数の無視のためのBashワンライナー:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
ネストされたディレクトリを無視するのに問題がありました。無視したいトップディレクトリは「svnstatus」では表示されませんでしたが、すべてのサブディレクトリで表示されました。これはおそらく他のすべての人にとって自明ですが、私はそれを共有したいと思いました:
例:
/トランク
/ trunk / cache
/ trunk / cache / subdir1
/ trunk / cache / subdir2
cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
ファイルを無視するためのこのような恐ろしい、偽の、難しい方法に対する「ありがとう」 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 に「古い」サブディレクトリを無視するように指示します。
プロジェクト ディレクトリの名前が /Project で、キャッシュ ディレクトリの名前が /Project/Cache の場合、/Project に Subversion プロパティを設定する必要があります。プロパティ名は「svn:ignore」、プロパティ値は「Cache」にする必要があります。
プロパティの詳細については、Subversion マニュアルのこのページを参照してください。
ジェイソンの答えはうまくいくでしょう。ただし、svn:ignore を "." に設定する代わりに、キャッシュ ディレクトリでは、キャッシュ ディレクトリが常に存在するとは限らない場合に備えて、親ディレクトリの svn:ignore プロパティに「キャッシュ」を含めることができます。私はこれを多くの「使い捨て」フォルダーで行います。
TortoiseSVN のような SVN のフロントエンド、またはある種の IDE 統合を使用している場合は、コミット/追加操作と同じメニューに無視オプションもあるはずです。
SVN が無視するディレクトリを保持するには:
- これにより、リポジトリからファイルが削除されますが、ディレクトリは SVN の管理下に置かれます。
svn delete --keep-local path/directory_to_keep/*
- 次に、ディレクトリ (およびすべてのコンテンツ) を無視するように設定します。
svn propset svn:ignore "*" path/directory_to_keep
svn:ignoreプロパティを設定します。ほとんどの UI svn ツールには、これを行う方法と、リンクのコマンド ラインの説明があります。
バージョンを使用しているため、実際には非常に簡単です。
- チェックアウトしたコピーを閲覧する
- 無視するディレクトリをクリックします
- 右側の [無視] ボックスで、[編集] をクリックします。
- *.* と入力してすべてのファイルを無視します (または、jpg ファイルのみの場合は *.jpg など)。
末尾のスラッシュにも注意してください。images/*私の無視設定ファイルに含めても無視されないことがわかりました./images/。私が実行したときsvn status -u、それはまだ表示されました? images。そのため、無視設定を単にimagesスラッシュなしに変更しました。ステータスチェックを実行し、それをクリアしました。
この単純なアクティビティを行う方法を探すのに多くの時間を失った後、適切な説明を見つけるのは難しくありませんでした.
まずサンプル構造を
$svn st ? プロジェクト/トランク/ターゲット ? プロジェクト/トランク/myfile.x
1 – 最初にエディターを構成します。私の場合は vim export SVN_EDITOR=vim
2 – 「svn propedit svn:ignore project/trunk/」は新しいファイルを開き、「target」と入力してファイルを保存して閉じると、ファイルとサブディレクトリを追加できます。
$svn st ? プロジェクト/トランク/myfile.x
ありがとう。