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

StackOverflow https://stackoverflow.com/questions/260658

  •  06-07-2019
  •  | 
  •  

質問

コマンドライン経由で、私は通常これを行います:

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

最初の引数から / * をドロップするだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top