Question

J'ai un peu joué avec CVS ​​et je ne suis pas très familier avec toutes ses fonctionnalités, mais un énorme ennui pour moi est d'essayer d'ajouter de nouveaux répertoires contenant plus de répertoires.En cours d'exécution "cvs add" ajoute uniquement le contenu du répertoire courant, et en utilisant "cvs import" ne semblait pas non plus être la bonne chose puisque c'est toujours tout le code que je produis (ce tutoriel revendiqué l'importation est pour Sources tierces)

Connaissez-vous un moyen d'ajouter de manière récursive tout ce qui se trouve dans un répertoire donné au projet CVS en cours (ou si SVN ou git facilite considérablement cela) ?

Était-ce utile?

La solution

Ah, des espaces.Cela fonctionnera avec des espaces :

find . -type f -print0| xargs -0 cvs add

Autres conseils

J'ai trouvé que cela fonctionnait assez efficacement :

Tout d'abord, ajoutez tous les répertoires, mais aucun nommé "CVS" :

find . -type d \! -name CVS -exec cvs add '{}' \;

Ajoutez ensuite tous les fichiers, à l'exclusion de tout ce qui se trouve dans un répertoire CVS :

find . \( -type d -name CVS -prune \) -o \( -type f -exec cvs add '{}' \; \)

Maintenant, si quelqu'un a un remède contre l'embarras d'utiliser CVS de nos jours...

J'utilise ceci :

Ajoutez d'abord de manière récursive tous les répertoires moins ceux CVS :

$> find . -type d \! -name CVS -exec cvs add '{}' \;

Ajoutez ensuite tous les fichiers, moins les répertoires CVS :

 find . \( -type d -name CVS -prune \) -o \( -type f -exec cvs add '{}' \; \)

Troisièmement, faites « commit » de manière récursive comme le commentaire « première version » :

 find . \( -type d -name CVS -prune \) -o \( -type f -exec cvs commit -m "first version" '{}' \; \)

Dernier marquage récursif :

 find . \( -type d -name CVS -prune \) -o \( -type f -exec cvs tag -F MY_CVS_TAG '{}' \; \)

Ajoutez d’abord tous les répertoires à CVS

find . -type d -print0| xargs -0 cvs add

Ajoutez ensuite tous les fichiers des répertoires à CVS

find . -type f | grep -v CVS | xargs cvs add

A travaillé pour moi

cvs import n'est pas réservé aux sources tierces.En fait, les répertoires ne sont pas versionnés par CVS, ils ne sont donc pas soumis aux politiques des branches.Tant que vous importez des répertoires vides, tout va bien.

Notez que vous ne pouvez utiliser que cvs add sur les fichiers et dossiers situés dans une copie de travail déjà extraite, sinon vous obtiendrez le "Impossible d'ouvrir CVS/Entries pour la lecture" message.Une technique pour créer un nouveau "module racine" en utilisant cvs add est expliqué dans cet élément de la FAQ WinCVS : http://cvsgui.sourceforge.net/newfaq.htm#add_rootmodule

Si vous êtes sous Windows, TortoiseCVS et WinCVS prennent en charge l'ajout récursif (et la validation facultative) de plusieurs fichiers en une seule opération.Dans WinCvs, recherchez la macro Ajouter> Ajout récursif (commit automatique)...Dans Tortoise, utilisez la commande Ajouter du contenu sur un répertoire.Les deux vous permettront de sélectionner les fichiers à ajouter et les modes d'expansion de mots clés à utiliser pour eux (principalement utilisés pour définir quels fichiers sont binaires).

Pour plus d'informations sur l'ajout récursif dans WinCvs, regardez ici : http://cvsgui.sourceforge.net/newfaq.htm#cvs-add_recursive


Mis à part cela cvs import est bien adapté aux ajouts de masse.Cependant, la manière cvs import est implémenté dans Vanilla CVS présente deux inconvénients (car il était initialement écrit pour le code tiers) :

  • il crée une branche obligatoire avec une sémantique particulière.
  • il ne crée pas les métadonnées du référentiel (c'est-à-direles répertoires CVS cachés) nécessaires pour établir le code importé comme copie de travail extraite, ce qui signifie que pour pouvoir réellement travailler avec les fichiers importés, vous devez d'abord les extraire du référentiel

Si vous utilisez CVSNT, vous pouvez éviter les deux inconvénients en spécifiant le -nC option à l'importation. -n est d'éviter la branche "fournisseur" et -C sert à créer les répertoires CVS.

Cette réponse de Mark a été utile (trouvez .-Type f -print0 | xargs -0 cvs ajouter) mais j'ai résolu un problème qui s'est produit lorsque les CV ajoutent d'essayer d'ajouter ses propres fichiers comme tag, entrées, ect.

  1. Ajoutez votre dossier de niveau le plus élevé appelé NEW_FOLDER
cvs add NEW_FOLDER
  1. Utilisez la commande précédente avec quelques exclusions pour ajouter l'arborescence de tous les sous-dossiers

find NEW_FOLDER/ -type d !-nom "CVS" -et !-nom "Tag" -et !-name "Entries.Log" -et !-name "Entrées" -et !-name "Dépôt" -et !-Name "root" -print0 | xargs -0 cvs ajouter

  1. Utilisez la commande précédente avec quelques exclusions pour ajouter tous les fichiers

find NEW_FOLDER/ -type f !-nom "CVS" -et !-nom "Tag" -et !-name "Entries.Log" -et !-name "Entrées" -et !-name "Dépôt" -et !-Name "root" -print0 | xargs -0 cvs ajouter

Je pense que c'est ce que j'ai fait à l'époque de CVS :

find . -type f | xargs cvs add

Ajoutez d’abord tous les répertoires à CVS

find . -type d -print0| xargs -0 cvs add

Ajoutez ensuite tous les fichiers des répertoires à CVS

find . -type f -print0| xargs -0 cvs add

J'utilise ce simple script shell, qui doit être démarré à partir d'un répertoire CVS déjà extrait.Il essaiera bêtement d'ajouter/valider tous les fichiers et répertoires qu'il trouvera lors de sa recherche récursive, donc à la fin, vous devriez vous retrouver avec une arborescence de validation complète.

Enregistrez simplement ceci sous quelque chose comme /usr/bin/cvsadd et n'oublie pas de chmod +x /usr/bin/cvsadd.

#!/bin/sh
# @(#) add files and directories recursively to the current CVS directory
# (c) 2009 by Dirk Jagdmann 

if [ -z "$1" ] ; then
    echo "usage: cvsadd 'import message'"
    exit 1
fi

if [ -d "$2" ] ; then
    cvs add "$2"
    cd "$2" || exit 1
fi

if [ ! -d CVS ] ; then
    echo "current directory needs to contain a CVS/ directory"
    exit 1
fi

XARGS="xargs -0 -r -t -L 1"

# first add all files in current directory
find . -maxdepth 1 -type f -print0 | $XARGS cvs add
find . -maxdepth 1 -type f -print0 | $XARGS cvs ci -m "$1"

# then add all directories
find . -maxdepth 1 -type d -not -name CVS -a -not -name . -print0 | $XARGS "$0" "$1"

Les méthodes déjà discutées feront une recherche récursive, mais cela échouera si vous réactiverez à nouveau la même action (si vous souhaitez ajouter un sous-arbre ajouté encore.Pour ce faire, nous utilisons la sortie de cvs up pour voir quels éléments n'ont pas encore été ajoutés - il y aura un point d'interrogation au début de la ligne.

Nous utilisons des options -0, -print0 et -zZ pour être sûr que nous traitons correctement les espaces dans les noms de fichiers.Nous utilisons également --no-run-if-empty pour éviter de courir si rien ne doit être ajouté.

CVS_PATTERN=/tmp/cvs_pattern
cvs -z3 -q up | egrep '^\?.*' | sed -e 's/^? //' > $CVS_PATTERN
find . -type d \! -name CVS -print0 | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add
find . \( -type d  -name CVS -prune \) -o \( -type f  -print0 \) | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add
cvs commit -m 'commiting tree recursively'

Avec cette approche, nous éviterons de telles erreurs :

cvs add: cannot add special file `.'; skipping
cvs [add aborted]: there is a version in ./dirname1 already

et

cvs add: `./dirname2/filename' already exists, with version number 1.1.1.1

j'aime faire (car le répertoire a besoin d'un ajout)

cvs status 2>/dev/null | awk '{if ($1=="?")system("cvs add "$2)}'

vous devrez peut-être l'exécuter plusieurs fois (d'abord pour le répertoire, puis pour ses enfants) jusqu'à ce qu'il n'y ait plus de sortie

La solution de Marc résout le problème des espaces, mais produit ce problème :

CV ajouter :Impossible d'ouvrir des CV / entrées pour la lecture:Aucun fichier ou répertoire de ce nom
CVS [Ajouter abandonné]:pas de référentiel

Pour résoudre ce problème, la commande à utiliser est :

find . -type f -exec cvs add {} \;

SVN rend définitivement cette tâche triviale, mais utiliser une interface graphique comme Tortoise est encore plus facile.

Cela pourrait être un bon point de départ : http://www-mrsrl.stanford.edu/~brian/cvstutorial/

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