web-dev-qa-db-ja.com

Subversionからファイルを1つチェックアウトする

"単一のファイルをチェックアウトすることはできません。あなたができるチェックアウトの最高レベルはディレクトリレベルです。"

Subversionを使用している場合、どうすればこの問題を回避できますか?

Subversionにこのフォルダがあり、そこにすべての画像が保存されています。その中から1つのファイル(画像)をチェックアウトしたいだけです。このフォルダは本当に大きく、私が今必要としていないものがたくさんあります。

308
bluegene

簡単な答えは、ファイルをチェックアウトするのではなくsvn exportすることです。

しかし、それはあなたが望むものではないかもしれません。あなたが不要なGBのジャンクファイルをダウンロードする必要なしに、ファイルに取り組んでそれをチェックインし直すことを望むかもしれません。

Subversion 1.5以降をお持ちの場合は、スパースチェックアウトを行います。

svn checkout <url_of_big_dir> <target> --depth empty
cd <target>
svn up <file_you_want>

SVNの古いバージョンでは、次のような利点があります。

  • 遠い過去のリビジョンを使ってディレクトリをチェックアウトしましょう。
  • 必要なファイルを更新して、混在するリビジョンを作成します。チェックアウトしたリビジョンにファイルが存在しなくてもこれは機能します。
  • 利益!

別の方法(例えば、ディレクトリがそれが作成されたリビジョンからジャンクしすぎている場合)はあなたが望むファイルのURL-> URLコピーをリポジトリの新しい場所にすることです(事実上これは作業ブランチです)ファイルの)。そのディレクトリをチェックアウトして、変更を加えます。

ターゲットの作業用コピーがなくても、変更したコピーを完全にリポジトリにマージできるかどうかはわかりません。もしそうならそれをやりなさい。

そうでない場合は、残念ながら、ディレクトリ全体をチェックアウトしている他の人を見つけて、それらを実行させる必要があります。それとも、あなたがあなたの修正を加えた時までに、それの残りはダウンロードを終えているでしょう...

389
Steve Jessop

svn exportの代わりにsvn checkoutを試してください。それは単一のファイルに対して機能します。

制限の理由は、checkoutが、リポジトリ、リビジョン、属性などに関するメタ情報を含む作業コピーを作成することです。そのメタデータは、 '。svn'という名前のサブディレクトリに格納されます。そして、単一のファイルはサブディレクトリを持っていません。

106
Mnementh

svn catまたはsvn exportを使用してください。

そのためには、作業ディレクトリを取得する必要はありませんが、行った変更をコミットすることはできません。変更を加えてコミットする必要がある場合は作業ディレクトリが必要ですが、完全に取得する必要はありません。ディレクトリがまだ/ほぼ空だったリビジョンをチェックアウトしてから、 'svn cat'を使用してHEADからファイルを抽出します。

53
Milan Babuškov

チェックアウトせずにリポジトリのreadme.txtを表示したい場合は、次の手順を実行します。

$ svn cat http://svn.red-bean.com/repos/test/readme.txt
これはREADMEファイルです。あなたはこれを読むべきです。

ヒント:作業コピーが古くなっている(またはローカルで変更が加えられていて)作業コピー内のファイルのHEADリビジョンを見たい場合、svn catは自動的にHEADリビジョンを取得します。あなたはそれにパスを与える:

$ cat foo.c
このファイルは私のローカル作業コピーにあり、私が行った変更を含んでいます。

$ svn cat foo.c
リポジトリからの最新の最新リビジョン!

出典

12
GEOCHET

TortoiseSVNと同等の解決策(新しくSVNを採用したので、私はこれを私の会社の内部文書に書いていました)に従います。ここでも共有しておくと便利だと思いました。

単一ファイルのチェックアウト:Subversionは単一ファイルのチェックアウトをサポートしません。ディレクトリ構造のチェックアウトのみをサポートします。 (参照: http://Subversion.tigris.org/faq.html#single-file-checkout )。 これは、作業コピーとしてチェックアウトされたすべてのディレクトリで、変更/ファイルリビジョンに関するメタデータが内部の隠しフォルダ(.svn/_svn)として格納されるためです。現在のところ、これは単一ファイルではサポートされていません(v1.6)

代替の推奨戦略:あなたは直接あなたがあなたの単一のファイルに行ってチェックアウトすることができることに続いて、一度だけチェックアウトディレクトリ部分をする必要があるでしょう。親フォルダとディレクトリ構造をまばらにチェックアウトします。スパースチェックアウトは、基本的にコンテンツファイルを作成せずにフォルダ構造のみをチェックアウトすることです。そのため、ディレクトリ構造のみをチェックアウトし、問題があるためすべてのファイルをチェックアウトする必要はありません。参照: http://tortoisesvn.net/docs/release/TortoiseSVN_jp/tsvn-dug-checkout.html

ステップ1:リポジトリブラウザに進む

ステップ2:作業したいファイルがすべて含まれているリポジトリー内の親フォルダーを右クリックして、「チェックアウト」を選択します。

ステップ3:新しいポップアップウィンドウ内で、チェックアウトディレクトリがローカルPCの正しい場所を指していることを確認します。 「チェックアウトの深さ」というラベルの付いたドロップダウンメニューもあります。必要に応じて、「この項目のみ」または「フォルダを含む即時の子」を選択してください。あなたが入れ子になったフォルダで作業したいなら、あなたは直接あなたが次に進むことができますそうでなければあなたが入れ子になったフォルダのために再びこの全体の手順に従わなければならないでしょう。

ステップ4:親フォルダはローカルに選択されたフォルダ内にあるはずです。SVN(隠しフォルダ ".svn")で監視されています。 "または" _svn "が表示されます。リポジトリ内で、チェックアウトしたい単一のファイルを単独で右クリックし、「アイテムをリビジョンに更新」オプションを選択します。単一のファイルを作成してリポジトリにチェックインすることができます。

これが役に立つことを願っています。

8
Kaushik Gopal

あなたは2つのステップでそれをすることができます:

  1. メタ情報のみを含む空のSVNリポジトリをチェックアウトします。

    $ cd /tmp
    
    $ svn co --depth empty http://svn.your.company.ca/training/trunk/sql
    
  2. svn upを実行して指定のファイルを更新します。

    $ svn up http://svn.your.company.ca/training/trunk/sql/showSID.sql
    
6
user2920375

あなたが本当に必要とするもののための更新は、ファイルを別のフォルダのチェックアウトに含めることによってカバーすることができます。

SVN 1.6から、あなたは ファイルの外部 、一種のsvnリンクを作ることができます。つまり、単一のファイルを含む別のバージョン管理フォルダを作成できます。このフォルダのチェックアウトでファイルへの変更をコミットすることも可能です。

それは非常に簡単です、あなたがファイルを含めたいフォルダをチェックアウトして、そして単にフォルダにプロパティを追加してください

svn propedit svn:externals .

このような内容で:

file.txt /repos/path/to/file.txt

これをコミットした後、ファイルはフォルダの今後のチェックアウトに表示されます。基本的には動作しますが、上記のリンク先のドキュメントで説明されているようにいくつかの制限があります。

5
Mikkel Blanné

それを閲覧して単一のファイルをエクスポートするだけです。 HTTPアクセスがある場合は、Webブラウザを使用してファイルを見つけて入手してください。

編集後に元に戻す必要がある場合は、もう少し手間がかかりますが、svn import関数がある可能性があります。

4
Oli

リポジトリブラウザでファイルを右クリックし、[名前を付けて保存]を使用します。私はTortoiseSVNを使用しています。

4
Dave Anderson

Steve Jessop's answer 私にはうまくいきませんでした。 SVNのヘルプファイルを読みましたが、あなたがPhotoshopをしているのでなければ、もう一度チェックインしたくない画像があるのであれば、exportはバージョン管理されていないのでチェックアウトよりも良いコマンドです(しかしそれはマイナーです)。

そして- depth ARGはemptyではなく--- filesで直接ディレクトリに入れるべきです。そのため、フィールドだけではなくすべてのフィールドを取得できますが、emptyはリポジトリからなしを返します。

 svn co --depth files <source> <local dest>

または

svn export --depth files <source> <local dest>

他の答えに関しては、catはあなたがテキストだけに役立つ内容を読むことを可能にします、すべてのもののイメージではありません。

4
Vass

単にリビジョン情報のないファイルが欲しいなら

svn export <URL>
2
Ted

Subversion 1.5では、サブディレクトリ(さまざまな--depthフラグ)をチェックアウトせずにディレクトリのファイル(すべて)をチェックアウトすることが可能になりました。あなたが求めたものではありませんが、「すべてより少ない」という形式です。

2
jackr

ファイルをエクスポートするだけで後で更新する必要がない場合は、SVNコマンドを使用しなくても実行できます。

TortoiseSVNリポジトリブラウザを使用してファイルを選択し、右クリックして「RLをクリップボードにコピー」を選択します。そのURLをブラウザに貼り付けると、ログイン後にファイルのダウンロードを促すメッセージが表示されます。

これにより、希望のリビジョンを選択してファイルの古いバージョンをダウンロードすることもできます。

これはあなたのSVNサーバーがウェブインターフェースを持っている場合に有効であることに注意してください。

1
Daniel

作業コピーの一部ではない単一のファイルをディレクトリにチェックアウトしたいと思いました。

次のURLでファイルを入手しましょう。 http://Subversion.repository.server/repository/module/directory/myfile

svn co  http://Subversion.repository.server/repository/module/directory/myfile /**directoryb**

そこで、私はダミーディレクトリにしたいターゲットファイルを含む与えられたディレクトリをチェックアウトしました(URLが/etcで終わっている場合はetcbと言います)。

それから私は私が欲しかったファイルだけを残すために私が必要としなかった目標ディレクトリのすべてのファイルからファイル。svn/entriesを空にしました。この。svn/entriesファイルには、各ファイルの属性を持つレコードがあるので、取得および保存したいファイルに関するレコードだけを残します。 。

今度は '' .svn ''をディレクトリにコピーするだけです。これが新しい「作業コピー」になります。それからあなたがする必要があります:

cp .svn /directory
cd /directory
svn update myfile

ディレクトリディレクトリがバージョン管理下になりました。単なる一時的な作業コピーであるディレクトリdirectorybを削除することを忘れないでください。

1
hendergassler

このようなことをしなさい:

mkdir <your directory>/repos/test

svn cat http://svn.red-bean.com/repos/test/readme.txt > <your directory>/repos/test/readme.txt

基本的には、SVNからファイルを取得するディレクトリを作成するという考え方です。 svn catコマンドを使用して、出力を同じ名前のファイルにリダイレクトします。デフォルトでは、猫はstdioの情報をダンプします。

1
Manish Singh

スパースチェックアウト手法を使用すると、すでにチェックアウトされているか存在している特定のファイルを簡単なトリックでチェックアウトできます。

Windowsのエクスプローラで 'this item only'オプションを使ってあなたのリポジトリのトップレベルをチェックアウトした後、あなたはまずあなたが更新する必要があるファイルを右クリックしなければなりません。コンテキストメニューで[レポブラウザ]を選択します。リポジトリブラウザでそのファイルAGAINを見つけ、右クリックします。コンテキストメニューに「リビジョンへのアップデート項目」が表示されるはずです。

それが文書化されていない機能なのか、それとも単なるバグなのか私にはわかりません。このトリックを最終的に見つけるには、長時間の勤務時間がかかりました。私は使っています TortoiseSVN 1.6.2。

1
devXen

この問題は以下によってカバーされます:

http://Subversion.tigris.org/issues/show_bug.cgi?id=82

Svnから単一のファイルをチェックアウトし、変更を加え、そして変更をリポジトリにコミットすることを可能にするスクリプトが添付されていますが、残りのディレクトリをチェックアウトするために "svn up"を実行することはできません。 svn-1.3、1.4、1.6でテストされています。

0
ddkilzer

他の答えのどれも私のために働かなかったので私はこのハックを使用してそれをした:

$ cd /yourfolder
svn co https://path-to-folder-which-has-your-files/ --depth files

これは、リモートパスからのファイルのみを持つ新しいローカルフォルダを作成します。それからあなたはここに持ちたいファイルへのシンボリックリンクをすることができます。

0
Lacho Tomov