2011-01-13 10 views
1

私はホストされたサーバー(Linux)にSVNリポジトリを持っており、Windowsマシン(tortoise svnがインストールされている)でローカル作業を行う必要があります。私の質問を簡略化するために、ディレクトリ構造は次のようになります。バージョン管理下で選択フォルダを配置する

 
root 
|--------sub1 
|--------sub2 
|--------sub3 
... 
|--------subN 

各サブXの下に追加のサブフォルダがあります。私は、バージョン管理下にある "sub1"と "sub3"の特定のサブ・サブフォルダのみを必要としているとします。しかし、Windowsでは、tortoisesvnを使って変更をコミットするときに、ルートフォルダを右クリックしてコミットし、選択されたフォルダのルートの下にある任意の変更をコミットすることができます。問題は、ignoreを使用することは非常に面倒なことだと思います。なぜなら、さまざまなレベルの構造で無視するフォルダがたくさんあるからです。

基本的に、私は全体をバージョン管理下に置いて、svnに "ok、今はXとYを除くすべてを無視する"と伝えたいと思います。これを達成する最も簡単な方法は何ですか?

おかげで、 ヨナCVSで

答えて

4

Sparse Directoriesの情報をSubversion Manualにルックアップします。

TortoiseSVNがこれをサポートしているかどうかは分かりませんが、これはあなたが望むことをするでしょう。

初期チェックアウトを行うときは、--depth=emptyオプションを使用する必要があります。リポジトリはチェックアウトされますが、作業ディレクトリにはフォルダはありません。次に、あなたが望む各フォルダに対して、svn update --set-depth infinityを実行する必要があります。それはその1つのフォルダを更新し、更新します。

$ svn co --depth=empty http://svn/repos/project/trunk myproj 
checked out revision 123133 

$ cd myproj 
$ svn update --set-depth=infinity sub1 
[yadda, yadda, yadda] 
$ svn update --set-depth=infinity sub2 
[yadda, yadda, yadda] 

あなたの作業ディレクトリに空のフォルダの束を気にしない場合は、代わりにemptyimmediatesを使用することができます。そのレベルのすべてがチェックアウトされますが、サブディレクトリではチェックアウトされません。フォルダは表示されますが、何も含まれません。その後、あなたはあなたが望むフォルダにsvn updateを行うことができます。しかし、--set-depthを使用しないと、後でサブフォルダの更新に問題が発生します。

+0

+1、私はそれについて考えなかった。 – yvoyer

+0

これはまさに私が必要とする解決策ですが、私はtortoisesvnがupdateコマンドで-set-depthをサポートしているとは思わない – Jonah

0

(SVNの前身)の.cvsignoreファイルがありました。私はSVNで.svnIgnoreファイルがないと思っていますが、私はsvn:ignore機能があることを知っています。あなたのニーズに合ったものがあるかどうかを調べるには、 ".svnIgnore file"のGoogle検索をお試しください。

0

Svnでは、ルートディレクトリを追加せずに、バージョン管理下にないフォルダの下に追加することはできません。

svn:ignoreは、パターンに応じてファイル(svn status)を無視します。すなわち、 svn propset svn:ignore "*.xml" folder/は、フォルダディレクトリの下にあるxmlファイル(バージョン管理下ではありません)を無視します。だから、あなたがファイルを追加してそれを無視しようとすると、後続の変更は依然としてコミットのために考慮されるため、あなたを助けません。

tortoise svnは(guiを使って)作成したファイルを自動的に追加するので、除外するフォルダの変更を元に戻す必要があります。

希望これは

+0

どうすれば問題を解決できますか?最初のインポートを行う前に手動ですべてを無視しますか? – Jonah

+0

すべてのフォルダを追加し、無視するフォルダに無視するように設定します。 FYI:無視するフォルダの親フォルダの無視を設定する必要があります。すなわち、 sub1の 'dir'フォルダを無視したい場合、' svn propset svn:ignore "dir" sub1' – yvoyer

+0

スパースディレクトリが良い解決策になります。 「David W.」を参照してください。回答。 – yvoyer

0

を助け、私はすべてを無視して、特定のものを無視しないようにする方法があるとは思いません。無視したいものは無視しなければなりません。私はこのために使用するコマンドは次のとおりです。

svn propset svn:ignore "sub1 sub2 sub3 ... subN" ./rootDir 

あなたがコミットその後、propsetを実行し、その後、あなたはSVNにしたいディレクトリをインポートする必要があります。実際に無視されたディレクトリをrootDirに追加します。

編集:上記の間違い。

svn propset svn:ignore -F file.txt ./rootDir 

理由は、プロペットに与えられた複数のプロパティに対して、改行を区切る必要があるということです。 hereを参照してください。私はどうしたら上記の問題のためにそう

、:

ls > file.txt 

その後、あなたはバージョン管理したいですかディレクトリを消去し、そのファイルと上からのsvn propsetを呼び出します。

+0

スーパージェームズ、ありがとう。しかし、なぜ私はrootdirにフォルダを追加する前にpropsetが実行されるまで待たなければならないのですか?ディレクトリ構造全体がすでに整っていると仮定して、何も移動したくないとしましょう。最初に無視リストを作成して、完全インポートを実行できますか? – Jonah

+0

できます。私はちょうどそのようにして、まだインポートしていなければ、最初のコミット時にディレクトリを無視します。 – SuperJames

関連する問題