SVNチェックアウト無視フォルダー


98

SVNチェックアウトのフォルダーを無視できますか?ビルドサーバーでのチェックアウト時にDOCフォルダーを無視する必要があります。

編集:外部を無視するオプションはありません。必要な外観がいくつかあります。


:このチェックアウトstackoverflow.com/questions/116074/...
hephestos

回答:


104

チェックアウト時にフォルダーを直接無視することはできませんが、svn 1.5ではスパースチェックアウトを使用できます。例えば:

$ svn co http://subversion/project/trunk my_checkout --depth immediates

これにより、プロジェクトトランクのファイルとディレクトリが「my_checkout」にチェックインされますが、それらのディレクトリには再帰しません。例えば:

$ cd my_checkout && ls
bar/ baz foo xyzzy/

次に、「バー」のコンテンツを取得するには:

$ cd bar && svn update --set-depth infinity

注:これを防ぐいくつかの1.5バージョンにバグがありましたsvn: Shallowing of working copy depths is not yet supported
gcb

79

はい、SVN 1.6を使用できます。最初にチェックアウトを行ってから、フォルダーを除外対象としてマークし、不要なフォルダーを削除する必要があります。

svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs

これ以降、作業コピーを更新しても、ドキュメントフォルダーは再作成されません。

http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/およびhttp://subversion.apache.org/docs/release-notes/1.6.html#sparse-を参照してください。詳細については、ディレクトリの除外

トム


2
自分の仕事に関係のない巨大なフォルダをチェックアウトする必要がなくなったので賛成です。
dohpaz42 2013年

1
これは素晴らしいことです。svnのクリーンアップと合わせて、12 GiBを節約できました。
JonnyJD 2015

1
これはまだすべてを最初にチェックアウトしていませんか?
Huangism

9

1.5より前のバージョンでは、最上位のフォルダのみをチェックアウトしてから選択的に更新すると、それ以降の更新では、チェックアウトしたものにのみ影響することがわかりました。つまり。

svn co -N foo
cd foo
svn up -N bar
svn up

-Nフラグは、操作を非再帰的にします。上記はfooレベルで他のものをチェックアウトしません、例えば。フォルダがあると言うとlala、最後のsvn upはそのフォルダをチェックアウトしませんが、更新されbarます。

しかし、後でできるsvn up lalaので、チェックアウトに追加できます。

おそらくこれは1.5でも動作します。


6

これはTortoiseSVNクライアント1.7.1にあります(一部の古いバージョンでも利用できる場合があります):

  • SVNチェックアウト->リポジトリのURLを選択

  • 「チェックアウト項目」(「チェックアウトの深さ」の下)をクリックして、必要なフォルダのみを選択してください!


4

docsフォルダーを外部リポジトリーに配置して、を使用できますsvn checkout --ignore-externals


これが、前のジョブで事前に作成されたコンポーネントの一部をスキップすることになったものです。
マークベッシー

2
どういうexternal repository意味かわかりません。説明できますか?
ビクター

4

はい、Subversion 1.5にスパースチェックアウトと呼ばれる機能があり、まさにこの種のことを実行できます。


2
それを読むと、まばらなチェックアウトはチェックアウトの深さを制限するだけのように見えます。特定のフォルダを無視することはできません。
ジョンミリキン

確かに、--depth immediatesで親フォルダーの深さを制限するなど、少し余分な手間をかける必要があるかもしれません。次に、無視したいフォルダーを除く他のすべてのフォルダーをチェックアウトします。ポイントは、ツールを使用する必要がある場合にそこにあるということです。
グレッグヒューギル

私はSparseCheckoutsの言及に感謝し、確かに興味深いですが、この応答は元の質問に対応していません。確かに、一度に1つのファイルをチェックアウトできます。その結果、特定のファイルのローカルコピーが必要になりますが、各ファイルを個別に実行するのは大変です。この質問の作成者は、xフォルダーの深さではなく、特定のフォルダーを無視することについて尋ねており、コンピューターに作業を許可していると思います。推奨されているのと同じ作業を手動で行うこともできます。
バリーピッカー

1.6以降のバージョンでは、フォルダーを無視して、作業コピーに含める/除外する内容(v1.5は非常に制限されています)svnbook.red-bean.com/en/1.7/svnの
FruitBreak 2015

3

この質問で、回帰テストを除外しながらWebKitソースをチェックアウトする方法を探しました。私は次のようになりました:

svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
  --depth immediates

cd WebKit
find . \
  -maxdepth 1 -type d \
  -not -name '.*' \
  -not -name '*Tests' \
  -not -name 'Examples' \
  -not -name 'Websites' \
  | (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)

除外は必要に応じて変更できますが、。*は作業ディレクトリ(すでに最新)とすべての.svnディレクトリをスキップすることをお勧めします。


これは何語?
子犬2014

これらはUNIXシェルコマンドです(これらはスクリプトファイルとして保存および実行することもできます)
mrlem

2

私は最近、同じタスクを解決しました。リポジトリの下にあるフォルダー/ファイルの即時リストを取得して、必要なエントリーを除外し、残りのフォルダーをチェックアウトして、存在する場合は即時ファイルを更新するという考え方です。これが解決策です:

    # Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
    # This files are to be excluded (folders are ending with '/')
    # this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
    # Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
    # Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
    # Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
    # Initial nonrecursive checkout of repository - just empty
    # to the current (./) working directory
svn co $rpath ./ --depth empty && \
    # Update the files
svn up $files &&\
    # Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`

ソースの作業ディレクトリに移動します。コマンドをコピーします。ペースト。適切なURLを変更し、パターンを除外します。コマンドを実行します。

おかげで、


1
開発者にとって6年とは何でしょう?最後の行に$ ubrpathがあります。そのセットはどこですか?
D-Klotz、2016

1
@ D-Klotz、ありがとうございます。代わりに$ rpathにしてください。これは、リポジトリパスに設定されます。<br/> 1年遅れてごめんなさい
bv。

1

いいえ、無視はファイルを追加するためだけです。
スパースチェックアウトを使用できます(svn 1.5を使用している場合)


1

他のいくつかの人が述べたように、チェックアウトするときにsvn:externalsプロパティを使用して--ignore-externalsオプションを使用するだけで済みます。ただし、注意すべき点の1つは、svn:externalsが必ずしも別のリポジトリを参照する必要がないことです。同じリポジトリ内の他のフォルダへの参照にすることができます。

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