Dans SVN, comment copier uniquement les sous-répertoires d'un répertoire dans un autre répertoire?

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

  •  06-07-2019
  •  | 
  •  

Question

En ligne de commande, je fais habituellement ceci:

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

Ceci copie uniquement le contenu situé sous un dossier dans un autre dossier . Dans SVN, je dois faire la même chose, mais je ne peux pas le comprendre. Je finis toujours avec ceci:

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

SVN vomit même quand j'essaie ceci:

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

Cela dit que ça n'existe pas.

EDIT:

Cela aiderait probablement. La structure de répertoire de mon projet se présente comme suit:

my_project
  /branches
  /tags
  /trunk
  /vendor
    /1.1

Je dois obtenir le contenu du fournisseur 1.1 sous le fournisseur dans le coffre sans que celui-ci ne copie réellement le dossier 1.1.

Était-ce utile?

La solution

Avez-vous envisagé d'utiliser svn merge?

Avec un repo comme celui-ci:

trunk/a_folder/foo
trunk/a_folder/bar
trunk/new_folder/baz

utilisez ces commandes pour fusionner les répertoires foo et bar:

cd trunk/new_folder
svn merge -r1:HEAD http://svn/repo/trunk/a_folder .

Autres conseils

Comme vous l'avez certainement découvert, la copie dans un répertoire cible existant ne fonctionnera pas:

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

car le tronc existe déjà, vous allez donc vous retrouver avec:

svn://my_project/trunk/1.1

L'utilisation de fusion a la propriété regrettable de ne pas conserver l'historique de la balise 1.1 du fournisseur dans Subversion antérieure à la version 1.5 qui avait introduit le suivi de la fusion. Vous ne vous en souciez peut-être pas. Dans ce cas, fusionner serait la bonne solution:

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

La meilleure façon de lire cette fusion est la suivante: Déterminez d’abord les modifications nécessaires pour rendre trunk identique à vendor / 1.1 , puis appliquez ces modifications à la copie de travail donnée. (également du coffre, dans ce cas).

Je tiens à souligner que cette fusion éliminera effectivement tout ce qui se trouvait auparavant dans le coffre. Par conséquent, si vous avez déjà des modifications locales (non-fournisseur) sur le coffre, vous ne souhaitez appliquer que les modifications entre la version 1.1 et la livraison précédente du fournisseur:

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

Si le tronc existe mais qu'il est vide , vous avez le choix: remplacer le tronc ou écrire une petite boucle de shell:

Le remplacement du coffre ressemble à ceci:

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

Exploitation du 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
  done 
)
svn ci trunk

Ce lien explique une solution de contournement.

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

En gros, cela indique que si le dossier de destination n’existe pas dans le référentiel, vous obtiendrez les contacts de votre dossier source dans le dossier de destination.

Voir l'exemple ci-dessous. Le dossier 07-03-2012 n'existe pas dans votre référentiel. Une fois que vous avez exécuté la commande ci-dessous, vous obtiendrez le contenu du dossier HEAD au 07-03-2012.

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

Je pense que ce que vous voulez, c'est que le contenu du coffre se retrouve dans le dossier /tags/version-1.0 / sans qu'il y ait un dossier supplémentaire / trunk . Là. C'est mauvais: /tags/version-1.0/trunk/stuff . C’est bien: /tags/version-1.0/stuff .

Pour obtenir cela, je fais un processus en 2 étapes:

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

Vous êtes très très proche:

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

supprimez simplement le / * du premier argument.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top