相关文章推荐
淡定的金鱼  ·  SQL/MySQL/DAO层框架 - 知乎·  1 年前    · 
心软的蘑菇  ·  [软件] ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

Via command line, I usually do this:

cp -rRp /path/to/a\_folder/. /path/to/another\_folder

This copies just the contents underneath a_folder to another_folder. In SVN I need to do the same thing, but can't figure it out. I always end up with this:

/path/to/another\_folder/a\_folder

SVN throws up even when I try this:

svn copy file:///path/to/a\_folder/* file:///path/to/another\_folder

It says it does not exist.

EDIT:

This would probably help. The directory structure for my project looks like this:

my_project
  /branches
  /tags
  /trunk
  /vendor

I need to get the contents of 1.1 under vendor into the trunk without it actually copying the 1.1 folder.

As you've certainly discovered, copying to a target directory that already exists won't work:

svn cp svn://my_project/vendor/1.1 svn://my_project/trunk

because trunk already exists, so you'd end up with:

svn://my_project/trunk/1.1

Using merge has the unfortunate property of not keeping history of the vendor 1.1 tag in subversion prior to 1.5 which introduced merge tracking. You may not care. In this case merge would be the correct solution:

svn co svn://my_project/trunk trunk-wc svn merge svn://my_project/trunk svn://my_project/vendor/1.1 trunk-wc

The best way to read this merge is: First determine the changes necessary to to make trunk identical to vendor/1.1, then apply those changes to the given working copy (also of trunk, in this case).

I should point out that this merge will effectively blow away anything that was in trunk previously. So, if you have local (non-vendor) modifications already on the trunk, you'll want to apply just the changes between 1.1 and the previous vendor drop:

svn co svn://my_project/trunk trunk-wc svn merge svn://my_project/vendor/1.0 svn://my_prjoect/vendor/1.1 trunk-wc

If trunk exists, but is empty you've got two choices: replace the trunk, or write a little shell loop:

Replacing the trunk looks like this:

svn rm svn://my_project/trunk svn cp svn://my_project/vendor/1.1 svn://my_project/trunk

Leveraging the shell (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 svn ci trunk

http://svn.haxx.se/users/archive-2004-12/1537.shtml

Basically what it says is that if the destination folder is not existing in the repo, you will get the contencts of your source folder in the destination folder.

See below example. The folder 07-03-2012 does not exist in your repo. Once you execute the below command, you will get the contents of HEAD folder in 07-03-2012.

svn cp <URL>/HEAD/ <URL>/branches/07-03-2012 -m "test"

I think that what you want is that the contents of the trunk end up in the /tags/version-1.0/ folder without there being an extra /trunk folder there. i.e. This is bad: /tags/version-1.0/trunk/stuff. This is good: /tags/version-1.0/stuff.

To get this I do a 2 step process:

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

You're very, very close:

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

just drop the /* from the first argument.

This is not helpful, as op wants to copy subdirectories to the other folder, and not the folder itself to the other folder. – Daenerys Feb 2, 2021 at 1:54

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.