web-dev-qa-db-ja.com

SVNで、ディレクトリのサブディレクトリだけを別のディレクトリにコピーするにはどうすればよいですか?

コマンドラインを介して、私は通常これを行います:

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のコンテンツをトランクに取り込む必要があります。

23
user4903

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 .
9
Jerub

あなたが確かに発見したように、 すでに存在するターゲットディレクトリにコピーする 動作しません:

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 

このマージを読み取る最良の方法は、最初にtrunkvendor/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 
20
bendin

このリンクは回避策を説明しています。

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"
6
dushshantha

トランクの内容は、余分な/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
3
Mike Wodarczyk

あなたはとても、とても近いです:

svn copy -m"Copy Directory" file:///path/to/a_folder file:///path/to/another_folder

/*最初の引数から。

1
Ken Gentle