Comment ignorer des fichiers dans Subversion?
Question
Comment ignorer les fichiers dans Subversion?
Comment trouver des fichiers qui ne sont pas sous contrôle de version?
La solution
(Cette réponse a été mise à jour pour correspondre au comportement de SVN 1.8 et 1.9)
Vous avez 2 questions:
Marquage des fichiers comme ignorés:
Par "fichier ignoré" Je veux dire que le fichier n'apparaîtra pas dans les listes même si "non versionné": votre client SVN prétendra que le fichier n'existe pas du tout dans le système de fichiers.
Les fichiers ignorés sont spécifiés par un "modèle de fichier". La syntaxe et le format des modèles de fichier sont expliqués dans la documentation en ligne de SVN: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html " Modèles de fichiers dans Subversion ".
Subversion, à partir de la version 1.8 (juin 2013), prend en charge 3 manières différentes de spécifier des modèles de fichiers. Voici un résumé avec des exemples:
1 - Zone de configuration d'exécution - Option global-ignore
:
- Il s'agit d'un paramètre côté client uniquement . Par conséquent, votre liste
global-ignores
ne sera pas partagée par les autres utilisateurs. Elle s'applique à tous les dépôts sur lesquels vous effectuez un achat. votre ordinateur. - Ce paramètre est défini dans votre fichier de zone de configuration d'exécution:
- Windows (basé sur des fichiers) -
C: \ Utilisateurs \ {vous} \ AppData \ Roaming \ Subversion \ config
- Windows (basé sur le registre) -
Logiciel \ Tigris.org \ Subversion \ Config \ Divers \ global-ignores
dansHKLM
etHKCU
. - Linux / Unix -
~ / .subversion / config
- Windows (basé sur des fichiers) -
2 - La propriété svn: ignore
, définie sur les répertoires (pas les fichiers):
- Ceci est stocké dans le référentiel, ainsi les autres utilisateurs auront les mêmes fichiers ignorés. Semblable à la façon dont
.gitignore
fonctionne. -
svn: ignore
est appliqué aux répertoires et est non récursif ou hérité. Tout fichier ou sous-répertoire immédiat du répertoire parent correspondant au modèle de fichier sera exclu. -
Alors que SVN 1.8 ajoute le concept de "propriétés héritées", la propriété
svn: ignore
elle-même est ignorée dans les répertoires descendants non immédiats:cd ~/myRepoRoot # Open an existing repo. echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt". svn status # Check to see if the file is ignored or not. > ? ./ignoreThis.txt > 1 unversioned file # ...it is NOT currently ignored. svn propset svn:ignore "ignoreThis.txt" . # Apply the svn:ignore property to the "myRepoRoot" directory. svn status > 0 unversioned files # ...but now the file is ignored! cd subdirectory # now open a subdirectory. echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt". svn status > ? ./subdirectory/ignoreThis.txt # ...and is is NOT ignored! > 1 unversioned file
(Ainsi, le fichier
./ sous-répertoire / ignoreThis
n'est pas ignoré, même si "ignoreThis.txt
" est appliqué sur le.
repo root). -
Par conséquent, pour appliquer de manière récursive une liste d’ignorations, vous devez utiliser
svn propset svn: ignore < filePattern > . --recursive
.- Ceci créera une copie de la propriété sur chaque sous-répertoire.
- Si la valeur
< filePattern >
est différente dans un répertoire enfant, la valeur de l'enfant remplacera alors complètement celle des parents, il n'y a donc pas & additif " effet. - Donc, si vous modifiez le
< filePattern >
de la racine.
, vous devez le modifier avec- récursif
pour le remplacer. sur les répertoires enfant et descendant.
-
Je remarque que la syntaxe de la ligne de commande est contre-intuitive.
- J'ai démarré en supposant que vous ignoreriez un fichier dans SVN en tapant quelque chose comme
svn ignore pathToFileToIgnore.txt
mais ce n'est pas ainsi que fonctionne la fonctionnalité d'ignorer de SVN.
- J'ai démarré en supposant que vous ignoreriez un fichier dans SVN en tapant quelque chose comme
3- La propriété svn: global-ignores
. Nécessite SVN 1.8 (juin 2013):
- Ceci est similaire à
svn: ignore
, sauf qu'il utilise les propriétés de SVN 1.8 "héritées par héritage" " fonctionnalité. - Comparez à
svn: ignore
, le modèle de fichier est automatiquement appliqué dans chaque répertoire descendant (pas seulement les enfants immédiats).- Cela signifie qu'il est inutile de définir
svn: global-ignores
avec l'indicateur- récursif
, car les modèles de fichiers ignorés par héritage sont automatiquement appliqués lorsqu'ils sont hérités.
- Cela signifie qu'il est inutile de définir
-
Exécution du même ensemble de commandes que dans l'exemple précédent, mais en utilisant
svn: global-ignores
à la place:cd ~/myRepoRoot # Open an existing repo echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt" svn status # Check to see if the file is ignored or not > ? ./ignoreThis.txt > 1 unversioned file # ...it is NOT currently ignored svn propset svn:global-ignores "ignoreThis.txt" . svn status > 0 unversioned files # ...but now the file is ignored! cd subdirectory # now open a subdirectory echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt" svn status > 0 unversioned files # the file is ignored here too!
Pour les utilisateurs de TortoiseSVN:
Tout cet arrangement était déroutant pour moi, car la terminologie de TortoiseSVN (telle qu'utilisée dans le système de menus de l'Explorateur Windows) m'avait initialement induit en erreur - je ne savais pas ce que signifiait le menu Ignorer "Ajouter récursivement", "Ajouter *". " et " Ajouter " options. J'espère que cet article explique comment la fonction Ignorer est liée à la fonctionnalité Propriétés SVN. Cela dit, je suggère d'utiliser la ligne de commande pour définir les fichiers ignorés afin que vous ayez une idée de son fonctionnement au lieu d'utiliser l'interface graphique, et de n'utiliser que l'interface graphique pour manipuler les propriétés une fois que vous êtes à l'aise avec la ligne de commande.
Liste des fichiers ignorés:
La commande svn status
masquera les fichiers ignorés (c'est-à-dire, les fichiers qui correspondent à un modèle RGA global-ignores
, ou correspondent au svn: du répertoire parent immédiat. ignorer le modèle
ou correspondre au modèle svn: global-ignores
du répertoire ancesor.
Utilisez l'option - no-ignore
pour voir ces fichiers listés. Les fichiers ignorés ont le statut I
, puis dirigez la sortie vers grep
pour afficher uniquement les lignes commençant par "I".
La commande est la suivante:
svn status --no-ignore | grep "^I"
Par exemple:
svn status
> ? foo # An unversioned file
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore
> ? foo # An unversioned file
> I ignoreThis.txt # A file matching an svn:ignore pattern
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore | grep "^I"
> I ignoreThis.txt # A file matching an svn:ignore pattern
ta-da!
Autres conseils
Utilisez la commande suivante pour créer une liste ne se trouvant pas dans les fichiers de contrôle de version.
svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt
Modifiez ensuite le fichier de manière à laisser uniquement les fichiers que vous souhaitez réellement ignorer . Ensuite, utilisez celui-ci pour ignorer les fichiers listés dans le fichier:
svn propset svn:ignore -F ignoring.txt .
Notez le point à la fin de la ligne. Il indique à SVN que la propriété est définie sur le répertoire en cours.
Supprimer le fichier:
rm ignoring.txt
Enfin valider,
svn ci --message "ignoring some files"
Vous pouvez ensuite vérifier quels fichiers sont ignorés via:
svn proplist -v
Si vous utilisez TortoiseSVN , cliquez avec le bouton droit sur un fichier, puis sélectionnez TortoiseSVN / Ajouter à ignorer liste . Cela ajoutera le fichier / caractère générique à la propriété svn: ignore
.
svn: ignore
sera vérifié lorsque vous archivez des fichiers, et les fichiers correspondants seront ignorés. J'ai la liste d'ignorations suivante pour un projet Visual Studio .NET:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Vous pouvez trouver cette liste dans le menu contextuel sous TortoiseSVN / Propriétés .
Vous pouvez ignorer un fichier ou un répertoire tel que .gitignore . Créez simplement un fichier texte contenant la liste des répertoires / fichiers que vous souhaitez ignorer et exécutez le code ci-dessous:
svn propset svn:ignore -F ignorelist.txt .
OU si vous ne voulez pas utiliser de fichier texte, vous pouvez le faire comme ceci:
svn propset svn:ignore "first
second
third" .
Source: Karsten's Blog - Définir svn: ignore plusieurs fichiers en ligne de commande
J'ai trouvé l'article . Exemple .svnignore pour Java .
Exemple: .svnignore pour Ruby on Rails,
/log
/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif
*.*~
Et après cela:
svn propset svn:ignore -F .svnignore .
Exemples pour .gitignore. Vous pouvez utiliser pour votre .svnignore
Comme personne ne semble l'avoir mentionné ...
svn propedit svn:ignore .
Modifiez ensuite le contenu du fichier pour spécifier les modèles à ignorer, quittez l'éditeur et vous avez terminé.
Lorsque vous utilisez propedit, assurez-vous de ne pas avoir d'espaces de fin, car le fichier sera exclu de la liste des ignorés.
Ceux-ci sont insérés automatiquement si vous utilisez tab-autocomplete sur linux pour créer le fichier avec lequel commencer:
svn propset svn:ignore 'file1
file2' .
Une autre solution consiste à:
svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt
ou ligne par ligne
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
Ce que ça fait:
- Obtient les fichiers de statut du svn
- enregistre tous les fichiers avec ? dans le fichier "svnignore.txt "
- Obtient les fichiers déjà ignorés et les ajoute au fichier "svnignore.txt" .
- Indique au svn d'ignorer les fichiers de "svnignore.txt"
- supprime le fichier
De même, si vous utilisez Tortoise SVN, vous pouvez le faire:
- Dans le menu contextuel, sélectionnez "TortoiseSVN", puis "Propriétés" .
- Dans la fenêtre apparue, cliquez sur "Nouveau", puis sur "Avancé" .
- Dans la fenêtre apparue en face de " Nom de la propriété " sélectionnez ou tapez "svn: ignore", à l'opposé de "Valeur de la propriété". saisissez le nom de fichier souhaité ou le nom de dossier ou le masque de fichier (dans mon cas, il s'agissait de "* / target"), cliquez sur "Appliquer la propriété de manière récursive" .
- Ok. Ok.
- S'engager
Une version plus lisible de réponse de bkbilly:
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
Ce que ça fait:
- Obtient les fichiers de statut du svn
- enregistre tous les fichiers avec ? dans le fichier "svnignore.txt "
- Obtient les fichiers déjà ignorés et les ajoute au fichier "svnignore.txt" .
- Indique au svn d'ignorer les fichiers de "svnignore.txt"
- supprime le fichier
- cd ~ / .subversion
- ouvrir la configuration
- trouvez la ligne comme "global-ignore"
- définir ignorer le type de fichier comme ceci: global-ignores = * .o * .lo * .la * .al .libs * .so .so. [0-9] * .pyc * .pyo 88 * .rej ~ # #. # *. *. Swp .DS_Store node_modules output
Vous pouvez également définir un motif d'ignorance global dans le fichier de configuration de SVN.
svn status
vous indiquera quels fichiers ne sont pas dans SVN, ainsi que ce qui a changé.
Consultez les propriétés SVN de la propriété ignore.
Pour tout ce qui concerne SVN, le Livre rouge est obligatoire. .
Ajouter un répertoire à Subversion et ignorer le répertoire contenu
svn propset svn:ignore '\*.*' .
ou
svn propset svn:ignore '*' .
SVN ignore
est facile à gérer dans TortoiseSVN. Ouvrez TortoiseSVN et cliquez avec le bouton droit sur le menu Fichier, puis sélectionnez Ajouter pour ignorer la liste.
Ceci ajoutera les fichiers dans la propriété svn: ignore
.
Lorsque nous archivons les fichiers, ceux qui correspondent à svn: ignore
seront ignorés et ne seront pas validés.
Dans le projet Visual Studio, nous avons ajouté les fichiers suivants à ignorer:
bin obj
*.exe
*.dll
*.pdb
*.suo
Nous gérons le code source sur le réseau SVN de Comparetrap en utilisant cette méthode avec succès
Utilisez la commande svn status sur votre copie de travail pour afficher l'état des fichiers. Les fichiers qui ne sont pas encore sous contrôle de version (et non ignorés) auront un point d'interrogation à leur côté.
Pour ignorer les fichiers, vous devez éditer la propriété svn: ignore, lisez le chapitre Ignorer les éléments non versionnés du livre svnbook à http://svnbook.red-bean.com/fr/1.5/svn.advanced.props.special.ignore.html . Le livre décrit également plus en détail l’utilisation de svn status.
- ouvrez vous utilisez le produit JetBrains (c.-à-d. Pycharm)
- puis cliquez sur le bouton "commettre" dans la barre d'outils supérieure ou utilisez le raccourci "ctrl + k" screenshot_toolbar
- sur l'interface de validation, déplacez vos fichiers indésirables vers une autre liste de modifications comme suit. screenshot_commit_change
- la prochaine fois que vous ne pourrez valider que la liste de modifications par défaut.