コマンドラインを介して、私は通常これを行います:
cp -rRp /path/to/a\_folder/. /path/to/another\_folder
これにより、a_folderの下のコンテンツのみがanother_folderにコピーされます。 SVNでも同じことをする必要がありますが、理解できません。私はいつもこれで終わります:
/path/to/another\_folder/a\_folder
これを試してもSVNがスローされます:
svn copy file:///path/to/a\_folder/* file:///path/to/another\_folder
存在しないと書いてあります。
編集:
これはおそらく役立つでしょう。私のプロジェクトのディレクトリ構造は次のようになります。
my_project
/branches
/tags
/trunk
/vendor
/1.1
実際に1.1フォルダーをコピーせずに、ベンダー下の1.1のコンテンツをトランクに取り込む必要があります。
Svn mergeの使用を検討しましたか?
このようなレポを考えると:
trunk/a_folder/foo
trunk/a_folder/bar
trunk/new_folder/baz
次のコマンドを使用して、fooディレクトリとbarディレクトリをマージします。
cd trunk/new_folder
svn merge -r1:HEAD http://svn/repo/trunk/a_folder .
あなたが確かに発見したように、 すでに存在するターゲットディレクトリにコピーする 動作しません:
svn cp svn:// my_project/vendor/1.1 svn:// my_project/trunk
トランクはすでに存在するため、次のようになります。
svn://my_project/trunk/1.1
mergeを使用すると、マージトラッキングが導入された1.5より前のSubversionでベンダー1.1タグの履歴が保持されないという不幸な特性があります。あなたは気にしないかもしれません。この場合、マージが正しい解決策になります。
svn co svn:// my_project/trunk trunk-wc svn merge svn:// my_project/trunk svn:// my_project/vendor/1.1 trunk-wc
このマージを読み取る最良の方法は、最初にtrunk
をvendor/1.1
と同一にするために必要な変更を決定し、次にそれらの変更を特定の作業コピー(この場合はトランク)に適用することです。
このマージにより、以前はトランクにあったものがすべて効果的に吹き飛ばされることを指摘しておく必要があります。したがって、トランクにローカル(ベンダー以外)の変更が既にある場合は、1.1と以前のベンダードロップの間の変更のみを適用する必要があります。
svn co svn:// my_project/trunk trunk-wc svn merge svn://my_project/vendor/1.0 svn:// my_prjoect/vendor/1.1 trunk-wc
トランクは存在するが空の場合、トランクを置き換えるか、小さなシェルループを作成するかの2つの選択肢があります。
トランクの交換は次のようになります。
svn rm svn:// my_project/trunk svn cp svn:// my_project/vendor/1.1 svn:// my_project/trunk
シェルの活用(bash):
svn co svn:// my_project/trunk trunk svn co svn://my_project/vendor/1.1 1.1 (cd 1.1 for x in *; do svn cp $ x../trunk done ) svn ci trunk
このリンクは回避策を説明しています。
http://svn.haxx.se/users/archive-2004-12/1537.shtml
基本的には、宛先フォルダーがリポジトリに存在しない場合、宛先フォルダーにソースフォルダーの内容が含まれるということです。
以下の例を参照してください。フォルダー07-03-2012はリポジトリに存在しません。以下のコマンドを実行すると、2012年7月3日のHEADフォルダーの内容が表示されます。
svn cp <URL>/HEAD/ <URL>/branches/07-03-2012 -m "test"
トランクの内容は、余分な/tags/version-1.0/
フォルダーがなくても、最終的に/trunk
フォルダーに格納されるようにする必要があると思います。つまり、これは悪いことです:/tags/version-1.0/trunk/stuff
。これは適切です:/tags/version-1.0/stuff
。
これを取得するには、2つのステップのプロセスを実行します。
svn copy http://localhost/MyProject/trunk http://localhost/MyProject/tags/
# now I have /MyProject/tags/trunk
svn rename http://localhost/MyProject/tags/trunk http://localhost/MyProject/tags/version-1.0
あなたはとても、とても近いです:
svn copy -m"Copy Directory" file:///path/to/a_folder file:///path/to/another_folder
/*
最初の引数から。