Comment puis-je append tous les fichiers sans version à SVN?

Je cherche un bon moyen pour automatiquement “append svn” tous les fichiers non versionnés dans une copie de travail sur mon repository SVN.

J’ai un serveur en direct qui peut créer quelques fichiers qui doivent être sous contrôle de code source. Je voudrais avoir un petit script que je peux exécuter pour les append automatiquement, au lieu de les parcourir et de les append un par un.

Mon serveur exécute Windows Server 2003, donc une solution Unix ne fonctionnera pas.

    svn add --force * --auto-props --parents --depth infinity -q

    Bon conseil! Une remarque: mon Eclipse ajoute automatiquement de nouveaux fichiers à la liste des ignorés. Cela peut être une question de configuration, mais de toute façon: il y a l’option --no-ignore qui aide.

    Après cela, vous pouvez vous engager:

     svn commit -m 'Adding a file' 

    Ceci est une question différente de la mienne mais il y a une réponse qui appartient à cette question:

     svn status | grep '?' | sed 's/^.* /svn add /' | bash 

    Ce qui fonctionne est ceci:

     c:\work\repo1>svn add . --force 

    Ajoute le contenu des sous-répertoires.

    N’ajoute pas de fichiers ignorés.

    Répertorie quels fichiers ont été ajoutés.

    Le point dans la commande indique le répertoire en cours, il peut être remplacé par un nom de répertoire ou un chemin d’access spécifique si vous souhaitez append un répertoire différent de celui en cours.

    Cela a fonctionné pour moi:

     svn add `svn status . | grep "^?" | awk '{print $2}'` 

    ( Source )

    Comme vous avez déjà résolu votre problème pour Windows, il s’agit d’une solution UNIX (suivant Sam). J’ai ajouté ici que je pense qu’il est toujours utile pour ceux qui atteignent cette question en demandant la même chose (car le titre n’inclut pas le mot clé “WINDOWS”).

    Note (février 2015): Comme commenté par “bdrx”, la commande ci-dessus pourrait être simplifiée de la manière suivante:

      svn add `svn status . | awk '/^[?]/{print $2}'` 

    Cette méthode doit gérer les noms de fichiers qui contiennent des nombres / combinaisons d’espaces différents …

     svn status /home/websites/website1 | grep -Z "^?" | sed s/^?// | sed s/[[:space:]]*// | xargs -i svn add \"{}\" 

    Voici une explication de ce que fait cette commande:

    • Liste tous les fichiers modifiés.
    • Limiter cette liste aux lignes avec ‘?’ au début – c.-à-d. de nouveaux fichiers.
    • Retirer le ‘?’ caractère au début de la ligne.
    • Supprimez les espaces au début de la ligne.
    • Pipe les noms de fichiers dans xargs pour exécuter le svn add plusieurs fois.

    Utilisez l’argument -i de xargs pour gérer la possibilité d’importer des noms de fichiers avec des espaces dans ‘svn add’ – fondamentalement, -i définit {} à utiliser comme espace réservé pour que nous puissions placer les “caractères autour du nom de fichier utilisé par ‘svn append’.

    Un avantage de cette méthode est que cela doit gérer les noms de fichiers avec des espaces.

    TortoiseSVN a cette fonctionnalité intégrée, si vous êtes prêt à utiliser une solution sans ligne de commande. Cliquez avec le bouton droit sur le dossier de niveau supérieur et sélectionnez Ajouter

     svn add --force . 

    Cela appenda tout fichier non versionné dans le répertoire en cours et tous les répertoires enfants versionnés.

    Ceci est documenté sur svn book et le plus simple et fonctionne parfaitement pour moi

     svn add * --force 

    http://svnbook.red-bean.com/en/1.6/svn.ref.svn.c.add.html

    Utilisation:

     svn st | grep ? | cut -d? -f2 | xargs svn add 

    Comme cet article est marqué Windows, je pensais que je trouverais une solution pour Windows. Je voulais automatiser le processus et j’ai créé un fichier de chauve-souris. J’ai résisté à faire une console.exe en C #.

    Je voulais append des fichiers ou des dossiers qui ne sont pas ajoutés dans mon référentiel lorsque je commence le processus de validation.

    Le problème avec la plupart des réponses est qu’ils répertorieront les fichiers non versionnés qui devraient être ignorés selon ma liste d’ignorance dans TortoiseSVN .

    Voici mon paramètre de crochet et fichier de lot qui fait cela

    Script de tortue:

     "start_commit_hook". (where I checkout) working copy path = C:\Projects command line: C:\windows\system32\cmd.exe /c C:\Tools\SVN\svnadd.bat (X) Wait for the script to finish (X) (Optional) Hide script while running (X) Always execute the script 

    svnadd.bat

     @echo off rem Iterates each line result from the command which lists files/folders rem not added to source control while respecting the ignore list. FOR /F "delims==" %%G IN ('svn status ^| findstr "^?"') DO call :DoSVNAdd "%%G" goto end :DoSVNAdd set addPath=%1 rem Remove line prefix formatting from svn status command output as well as rem quotes from the G call (as required for long folder names). Then rem place quotes back around the path for the SVN add call. set addPath="%addPath:~9,-1%" svn add %addPath% :end 

    J’utilise toujours:

    Copier coller

     svn st | grep "^\?" | awk "{print \$2}" | xargs svn add $1 
     for /f "usebackq tokens=2*" %%i in (`svn status ^| findstr /r "^\?"`) do svn add "%%i %%j" 

    Dans cette implémentation, vous aurez des problèmes dans le cas où vos dossiers / noms de fichiers ont plus d’un espace comme ci-dessous:

     "C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\Sega Mega 2" "C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\One space" "C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\Double space" "C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\Single" 

    de tels cas sont couverts par simple:

     for /f "usebackq tokens=1*" %%i in (`svn status ^| findstr /r "^\?"`) do svn add "%%j" 

    Si vous utilisez Linux ou utilisez Cygwin ou MinGW dans Windows, vous pouvez utiliser des solutions de type bash comme celles-ci. Contrairement à d’autres similaires présentés ici, celui-ci prend en compte les espaces de noms de fichiers:

     svn status| grep ^? | while read line ; do svn add "`echo $line|cut --complement -c 1,2`" ;done 

    Après avoir passé un peu de temps à essayer de comprendre comment append récursivement certains des fichiers, je pensais que ce serait valable de partager ce qui fonctionnait pour moi:

     FOR /F %F IN ('dir /s /b /a:d') DO svn add --depth=empty "%F" FOR /F %F IN ('dir /s /b /a *.cs *.csproj *.rpt *.xsd *.resx *.ico *.sql') DO svn add "%F" 

    Voici quelques explications.

    La première commande ajoute tous les répertoires. La deuxième commande ajoute uniquement les fichiers aux motifs spécifiés.

    Laissez-moi vous donner plus de détails:

    • FOR: vous savez, le contrôle de la boucle.
    • / F: signifie prendre les fichiers et les répertoires (pas sûr exactement).
    • % F: c’est une variable; il prendra la valeur de chacun des fichiers listés à la fois; il pourrait avoir un autre nom de caractère unique.
    • IN: pas besoin d’expliquer, non?
    • (‘dir / s / b / a: d’): la commande DOS qui listera les répertoires; dans mon cas / s est récursif, / b ne prend que le chemin complet, / a: d signifie seulement le répertoire; changez-le comme vous le souhaitez en gardant les parenthèses et les apostrophes.
    • DO: signifie que ce qui vient ensuite dans la commande est ce qui sera exécuté pour chaque répertoire
    • svn add –depth = empty: c’est le commando SVN désiré à exécuter; la définition de profondeur signifie append uniquement le répertoire et non les fichiers qui s’y trouvent.
    • “% F”: c’est comme ça que vous utilisez la variable définie précédemment.

    Dans la deuxième commande, les seules différences sont la commande dir et la commande svn, je pense que c’est assez clair.

    Je pense avoir fait quelque chose de similaire avec:

     svn add . --recursive 

    mais pas sûr si ma mémoire est correcte ;-p