Avec TortoiseSVN, je peux déplacer un fichier dans la liste des modifications ignore-on-commit, de sorte que lorsque je valide un arbre entier, les modifications apportées à ce fichier ne sont pas validées.
Existe-t-il un moyen de faire quelque chose comme ça en utilisant l'outil de ligne de commande svn?
EDIT: Merci pour les suggestions à utiliser svn:ignore
, mais cela ne fait pas tout à fait ce que je recherchais.
svn:ignore
affecte des choses comme svn add
& svn import
. Il lui donne une liste de modèles de noms de fichiers à ignorer.
J'ai un fichier qui est déjà sous contrôle de code source, mais je souhaite apporter des modifications temporaires à ce fichier que je ne souhaite pas valider plus tard lorsque je valide l'ensemble de l'arborescence des sources. Je fais beaucoup d'autres changements et je pourrais coller une note sur mon moniteur pour me dire de restaurer ce fichier avant de valider l'arborescence, mais ce serait bien si svn pouvait automatiquement ignorer ce fichier.
la source
Réponses:
Subversion n'a pas de fonction intégrée «ne pas valider» / «ignorer lors de la validation», depuis février 2016 / version 1.9. Cette réponse est une solution de contournement de ligne de commande non idéale
Comme le déclare l'OP, TortoiseSVN a une liste de modifications intégrée, "ignore-on-commit", qui est automatiquement exclue des validations. Le client de ligne de commande n'a pas cela, vous devez donc utiliser plusieurs listes de modifications pour accomplir ce même comportement (avec des mises en garde) :
Puisqu'il y a un précédent avec TortoiseSVN, j'utilise "ignore-on-commit" dans mes exemples pour les fichiers que je ne veux pas valider. J'utiliserai «travail» pour les fichiers que je fais, mais vous pouvez choisir le nom que vous voulez.
Tout d'abord, ajoutez tous les fichiers à une liste de modifications nommée "work". Cela doit être exécuté à partir de la racine de votre copie de travail:
Cela ajoutera récursivement tous les fichiers de la copie de travail à la liste de modifications nommée "work". Il y a un inconvénient à cela: comme de nouveaux fichiers sont ajoutés à la copie de travail, vous devrez ajouter spécifiquement les nouveaux fichiers ou ils ne seront pas inclus. Deuxièmement, si vous devez l'exécuter à nouveau, vous devrez alors ajouter à nouveau tous vos fichiers "Ignorer lors de la validation". Pas idéal - vous pouvez commencer à maintenir votre propre liste «ignorer» dans un fichier comme d'autres l'ont fait.
Ensuite, pour les fichiers que vous souhaitez exclure:
Étant donné que les fichiers ne peuvent être que dans une seule liste de modifications, exécuter cet ajout après votre précédent ajout de «travail» supprimera le fichier que vous voulez ignorer de la liste de modifications «travail» et le placera dans la liste de modifications «ignorer lors de la validation».
Lorsque vous êtes prêt à valider les fichiers modifiés que vous souhaitez valider, vous ajoutez simplement "--cl work" à votre validation:
Voici à quoi ressemble un exemple simple sur ma machine:
Une alternative serait d'ajouter simplement chaque fichier que vous souhaitez engager à une liste de modifications «de travail», et même de ne pas maintenir une liste d'ignorance, mais c'est aussi beaucoup de travail. Vraiment, la seule solution simple et idéale est de savoir si / quand cela sera implémenté dans SVN lui-même. Il y a un problème de longue date à ce sujet dans le suivi des problèmes de Subversion, SVN-2858 , au cas où cela changerait à l'avenir.
la source
$svn st --- Changelist 'ignore-on-commit': M database.php M config.php
et pourtant, ils ont été envoyés au dépôt lors de la validation. Une idée de ce que j'ai fait de mal?Je me suis toujours trouvé dans cette situation aussi: et ne changelists travaille pas pour moi - je veux faire une courte liste des fichiers que je ne veux engager, plutôt que de maintenir une liste massive de fichiers que je fais défaut S'engager!
Je travaille sur la ligne de commande linux: ma solution est donc de créer un script / usr / bin / svnn (oui, avec deux 'n's!) Comme suit:
De toute évidence, cela est adapté à ma situation - mais changez simplement DIR et IGNORE_FILES en fonction de votre configuration de développement. N'oubliez pas de changer le script en exécutable avec:
.. puis vous utilisez simplement "svnn" au lieu de "svn" pour exécuter subversion sans craindre de vérifier les changements locaux dans les fichiers de la liste IGNORE_FILES. J'espère que ça aide!
la source
svnn ignore configs/*
- avec des caractères génériques, des cloches et des sifflets. Je pense que j'écris quelque chose comme ça moi-même, puis je reviens ici!svnn
, envisagez de l'appelersvn
et de placer ce script dans quelque chose qui peut être au début de votre PATH, tel que${HOME}/bin
. À partir du script lui-même, vous appelleriez alors/usr/bin/svn
.Je ne crois pas qu'il existe un moyen d'ignorer un fichier dans le référentiel. Nous rencontrons souvent cela avec web.config et d'autres fichiers de configuration.
Bien que pas parfaite, la solution que je vois et utilise le plus souvent est d'avoir un fichier .default et une tâche nante pour créer des copies locales.
Par exemple, dans le référentiel se trouve un fichier appelé
web.config.default
qui a des valeurs par défaut. Ensuite, créez une tâche nant qui renommera tous lesweb.config.default
fichiers enweb.config
qui peut ensuite être personnalisée aux valeurs locales. Cette tâche doit être appelée lorsqu'une nouvelle copie de travail est récupérée ou qu'une génération est exécutée.Vous devrez également ignorer le
web.config
fichier créé afin qu'il ne soit pas validé dans le référentiel.la source
Consultez les listes de modifications , qui peuvent vous fournir une option pour filtrer les fichiers que vous avez modifiés mais que vous ne souhaitez pas valider. SVN ne sautera pas automatiquement un fichier à moins que vous ne le lui disiez - et la façon dont vous lui dites que ce fichier est en quelque sorte différent des autres fichiers est de le mettre dans une liste de modifications.
Cela demande plus de travail pour vous, et vous ne pouvez appliquer la liste de modifications qu'à votre copie de travail (évidemment, imaginez le chaos qui pourrait s'ensuivre si vous pouviez appliquer une propriété «ne jamais mettre à jour» à une révision!).
la source
Je suis venu à ce fil à la recherche d'un moyen de faire un commit "atomique" de seulement quelques fichiers et au lieu d'ignorer certains fichiers lors du commit, je suis allé dans l'autre sens et je n'ai commis que les fichiers que je voulais:
Peut-être que cela aidera quelqu'un.
la source
svn ci
est simplement un alias desvn commit
. La commande Commit permet de faire un commit particulier des fichiers spécifiésLes gars, je viens de trouver une solution. Étant donné que TortoiseSVN fonctionne comme nous le souhaitons, j'ai essayé de l'installer sous Linux - ce qui signifie qu'il fonctionne sous Wine. Étonnamment, cela fonctionne! Tout ce que tu dois faire est:
(La raison pour laquelle il est nécessaire d'exclure des fichiers par CLI est que l'entrée de menu pour faire cela n'a pas été trouvée, je ne sais pas pourquoi. De toute façon, cela fonctionne très bien!)
la source
Les fichiers en conflit ne peuvent pas être validés. Vous pouvez en profiter pour garder vos modifications privées hors du référentiel. Cela fonctionne mieux avec un petit nombre de fichiers.
Pour obtenir un conflit pour
a-file
, votre copie de travail (WC) n'a pas la mise à joura-file
du référentiel, et quea-file
dans votre WC a des modifications qui se trouvent au même emplacement que les modifications dans le référentiel (modifications que vous n'avez pas mises à jour encore). Si vous ne voulez pas attendre les conditions ci-dessus, vous pouvez créer un conflita-file
comme celui-ci:Dans la copie de travail 1 (WC1), ajoutez une ligne de texte en haut de
a-file
, telle que «créer un conflit ici» . Utilisez la syntaxe nécessaire pour ne pas casser le référentiel. Commit àa-file
partir de WC1. Dans WC2, ajoutez une ligne de texte différente en haut dea-file
, comme "je veux un conflit" . Mettez à jour à partir de WC2, et maintenant un fichier doit être en conflit.la source
J'écrirais plutôt un script d'aide bash qui s'exécute
svn commit
sur tous les fichiers dont vous avez besoin et sur aucun de ceux dont vous n'avez pas besoin. De cette façon, vous avez beaucoup plus de contrôle.Par exemple, avec une seule ligne, vous pouvez valider tous les fichiers avec l'extension
.h
et.cpp
auxquels vous avez apporté des modifications (et qui ne provoqueraient pas de conflit):Modifiez / ajoutez des extensions à la
[h|cpp]
pièce. Ajoutez un message de journal entre les guillemets de-m ""
si nécessaire.la source
Certaines des idées proposées peuvent être mises en œuvre comme ceci:
Sous Windows dans PowerShell
tout ajouter à la liste par défaut.ps1
ajouter à ignorer list.ps1
Désormais, vous pouvez créer
svn ci --changelist default
un alias afin de ne pas avoir à le spécifier à chaque fois. L'avantage supplémentaire est que vous pouvez stocker la liste Ignorer lors de la validation (si vous le souhaitez) dans le référentiel.Je fais cela pour certains fichiers qui sont constamment régénérés mais rarement modifiés à la main. Par exemple, j'ajoute un numéro de révision à mes fichiers de configuration sur des espaces réservés spécifiques afin que les fichiers soient modifiés à chaque commit, mais le changement manuel est rare.
la source
J'étais fatigué d'attendre que cela soit intégré à SVN. J'utilisais tortoiseSVN avec ignore-on-commit, mais cela fait apparaître une boîte de dialogue utilisateur que vous ne pouvez pas supprimer de la ligne de commande, et quand je lance mon script de construction et que je vais préparer une tasse de thé, je déteste quand Je reviens pour découvrir qu'il attend l'entrée de l'utilisateur 10% du chemin.
Voici donc un script Windows PowerShell qui valide uniquement les fichiers qui ne sont pas dans une liste de modifications:
la source
Mise à jour du script de user88044.
L'idée est de pousser les fichiers dans la liste des modifications à ne pas valider et d'exécuter le script diabolique.
Le script extrait les fichiers do-not-commit de la commande: svn status --changelist 'do-not-commit'
Le script est placé dans / usr / bin / svnn (sudo chmod + x / usr / bin / svnn)
statut svnn, svnn commit, etc ...
la source
Vous pouvez configurer la liste de modifications "ignore-on-commit" directement avec TortoiseSVN. Pas besoin de configurer une autre liste de modifications, y compris tous les autres fichiers
1) Cliquez sur "SVN Commit ..." (nous n'engagerons pas, juste un moyen de trouver un menu graphique pour la liste des modifications) 2) Dans la liste, faites un clic droit sur le fichier que vous souhaitez exclure. 3) Menu: passer à la liste des modifications> ignorer lors de la validation
La prochaine fois que vous ferez un SVN Commit ... Les fichiers apparaîtront décochés à la fin de la liste, sous la catégorie ignore-on-commit.
Testé avec: TortoiseSVN 1.8.7, Build 25475 - 64 Bit, 05/05/2014 20:52:12, Subversion 1.8.9, -release
la source
C'est tard dans le jeu, mais j'ai trouvé la commande de ligne de commande la plus impressionnante pour ce problème. Fait avec bash. Prendre plaisir.
Ok, alors voici une explication de la commande. Certaines choses devront être modifiées en fonction de votre cas d'utilisation.
J'obtiens une liste de tous les fichiers. Ils commenceront tous par ces caractères d'état (?,!, A, etc.). Chacun a ses propres lignes
J'utilise grep pour filtrer la liste. Il peut être utilisé normalement (pour inclure) ou avec l'option -v (pour exclure). Dans ce cas, il est utilisé pour exclure, avec une phrase "excluant" ce qui sera exclu.
Maintenant, je supprime le caractère de statut et les espaces au début de chaque ligne, puis je cite chaque ligne, en utilisant sed. Certains de mes noms de fichiers contiennent des espaces, d'où la citation.
En utilisant tr, je remplace toutes les nouvelles lignes par des espaces. Maintenant, toute ma liste de fichiers à valider est sur une seule ligne.
Enfin, j'utilise xargs pour exécuter ma commande de validation avec le message. Il effectue la validation et supprime ma liste de fichiers citée comme dernier argument.
Le résultat est que tout fonctionne finalement comme je le souhaite. Je déteste encore un peu svn pour m'avoir forcé à sauter à travers ces foutus cerceaux, mais je peux vivre avec ça. J'imagine.
la source
Comme je faisais face au même problème et que ma recherche sur Google ne me donnait rien, je pense avoir trouvé une solution de contournement. Voici ce que j'ai fait, cela semble fonctionner pour moi, mais comme je suis coincé avec une ancienne version de SVN (<1.5, car il n'a pas l'option --keep-local) et je n'en suis pas un expert , Je ne peux pas être sûr que ce soit une solution universelle. Si cela fonctionne pour vous aussi, faites-le moi savoir!
J'avais affaire à une installation Prestashop que j'avais obtenue de SVN, car d'autres personnes avaient déjà commencé à y travailler. Puisque les paramètres de la base de données ont été définis pour un autre serveur, je les ai modifiés dans un fichier du dossier / config. Comme ce dossier était déjà versionné, le définir dans svn: ignore n'empêcherait pas mes modifications locales d'être validées. Voici ce que j'ai fait:
Maintenant, je peux exécuter svn add --force. à la racine du repo sans ajouter ma configuration, même si elle ne correspond pas à la version du repo (je suppose que je devrais revoir tout cela si je la modifiais une fois de plus, ne testais pas). Je peux également mettre à jour svn sans que mes fichiers ne soient écrasés ou n'obtiennent aucune erreur.
la source
Une solution qui n'ignore pas les modifications des propriétés du répertoire
J'ai essayé d'utiliser la solution basée sur
changelist
, mais j'ai quelques problèmes avec elle. Tout d'abord, mon référentiel contient des milliers de fichiers, donc la liste des modifications à valider est énorme et masvn status
sortie est devenue beaucoup trop longue et devait être analysée pour être utile. Le plus important est que je souhaitais valider les modifications issues d'une fusion, ce qui signifie qu'elles incluent des modifications de propriété. Lors de la validation d'une liste de modifications, les propriétés svn attachées au répertoire ne sont pas validées, j'ai donc dû faire un commit supplémentaire:Vous devrez peut-être le faire pour plusieurs répertoires (ici, j'enregistre les propriétés de
DIR
et du répertoire actuel.
), essentiellement ceux avec unM
dans la deuxième colonne lors de l'exécution de lasvn status
commande.Solution
J'ai utilisé des patchs et
svn patch
. En pseudo-code:Comme d'autres affiches, je finis par utiliser un script pour maintenir la liste des fichiers à ignorer:
Je l'ai généralement utilisé avec
ci
etrevert -R .
.la source
svn:ignore
est votre réponse.Exemple:
la source
l'
*.xml
est le modèle des fichiers à ignorer; vous pouvez également utiliser des noms de répertoires ici.la source