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のコンテンツをトランクに取り込む必要があります。
解決
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.1タグの履歴を保存することができず、マージトラッキングが導入された1.5より前のSubversionに不幸な特性があります。気にしないかもしれません。この場合、マージが正しい解決策になります。
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はリポジトリに存在しません。次のコマンドを実行すると、07-03-2012にHEADフォルダーの内容が取得されます。
svn cp <URL>/HEAD/ <URL>/branches/07-03-2012 -m "test"
必要なのは、余分な / trunk
フォルダーがなくても、トランクの内容が /tags/version-1.0 /
フォルダーになることだと思いますそこ。つまり、これは悪いです: /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
最初の引数から / *
をドロップするだけです。