C'est amusant de voir comment chaque question simple (probablement d'un utilisateur de git) signifie de nombreuses réponses trop compliquées. Si cela se produit, c'est Subversion baby.
Valerio Bozz
Réponses:
738
(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 comme «non versionné»: votre client SVN prétendra que le fichier n'existe pas du tout dans le système de fichiers.
Subversion, à partir de la version 1.8 (juin 2013) et versions ultérieures, prend en charge 3 façons différentes de spécifier les modèles de fichiers. Voici un résumé avec des exemples:
1 - Zone de configuration du runtime - global-ignoresoption:
Il s'agit d'un paramètre côté client uniquement , de sorte que votre global-ignoresliste ne sera pas partagée par d'autres utilisateurs et s'applique à tous les dépôts que vous retirez sur votre ordinateur.
Ce paramètre est défini dans votre fichier de zone de configuration d'exécution:
Windows (basé sur des fichiers) - C:\Users\{you}\AppData\Roaming\Subversion\config
Windows (basé sur le registre) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignoresdans HKLMet HKCU.
Linux / Unix - ~/.subversion/config
2 - La svn:ignorepropriété, qui est définie sur des répertoires (pas des fichiers):
Ceci est stocké dans le référentiel, donc les autres utilisateurs auront les mêmes fichiers ignorés. Similaire au .gitignorefonctionnement.
svn:ignoreest 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 svn:ignorepropriété 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
(Le fichier ./subdirectory/ignoreThisn'est donc pas ignoré, même si " ignoreThis.txt" est appliqué à la .racine du référentiel).
Par conséquent, pour appliquer une liste d'ignorance de manière récursive, vous devez utiliser svn propset svn:ignore <filePattern> . --recursive.
Cela créera une copie de la propriété dans chaque sous-répertoire.
Si la <filePattern>valeur est différente dans un répertoire enfant, alors la valeur de l'enfant remplace complètement les parents, il n'y a donc pas d'effet "additif".
Donc, si vous changez le <filePattern>à la racine ., vous devez le changer avec --recursivepour le remplacer dans les répertoires enfant et descendant.
Je note que la syntaxe de ligne de commande est contre-intuitive.
J'ai commencé en supposant que vous ignoreriez un fichier dans SVN en tapant quelque chose comme svn ignore pathToFileToIgnore.txtcela, mais ce n'est pas ainsi que fonctionne la fonction Ignorer de SVN.
3- La svn:global-ignorespropriété. Nécessite SVN 1.8 (juin 2013):
Ceci est similaire svn:ignore, sauf qu'il utilise la fonctionnalité "propriétés héritées" de SVN 1.8.
Comparé à 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 n'est pas nécessaire de définir svn:global-ignoresl' --recursiveindicateur, car les modèles de fichiers ignorés hérités sont automatiquement appliqués lorsqu'ils sont hérités.
Exécuter le même ensemble de commandes que dans l'exemple précédent, mais en utilisant à la svn:global-ignoresplace:
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'elle est utilisée dans leur système de menus de l'Explorateur Windows) était initialement trompeuse pour moi - je ne savais pas quelle était la signification des "Ajouter récursivement", "Ajouter *" et "Ajouter" du menu Ignorer les options. J'espère que ce post explique comment la fonctionnalité 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 compreniez comment cela fonctionne au lieu d'utiliser l'interface graphique, et d'utiliser uniquement 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 statusmasquera les fichiers ignorés (c'est-à-dire les fichiers qui correspondent à un global-ignoresmodèle RGA , ou qui correspondent au modèle d'un répertoire parent immédiat svn:ignoreou qui correspondent au modèle d'un répertoire ancesor svn:global-ignores.
Utilisez l' --no-ignoreoption pour voir ces fichiers répertoriés. Les fichiers ignorés ont le statut I, puis dirigez la sortie vers greppour n'afficher que les lignes commençant par "I".
La commande est:
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
Pour rechercher des fichiers ignorés: svn status -u -v --no-ignore | grep "^ I" | awk "{print \ $ 2}"
Christian Madsen
3
si vous voulez ignorer le fichier ./FolderA/FolderB/FileToIgnore, faites-le depuis votre. dossier: svn propset svn: ignorer "FileToIgnore" FolderA / FolderB /
jnj
8
si vous êtes ssh'ing svn propedit svn:ignore .et qu'aucun éditeur de texte n'est configuré, vous obtiendrez un message d'erreur indiquant svn: E205007: Aucune des variables d'environnement SVN_EDITOR, VISUAL ou EDITOR n'est définie, et aucune option de configuration au moment de l'exécution 'editor-cmd' n'a été trouvé au lieu d'ouvrir un éditeur. Il suffit donc de spécifier - nitor-cmd nano comme celui-cisvn propedit svn:ignore . --editor-cmd nano
Jonathan Morales Vélez
12
Vous pouvez également ignorer les fichiers avec un nom de fichier spécifique dans tous les sous-dossiers en utilisant l'argument "--recursive". ie svn propset svn: ignore "* .jpg". --recursive
Templar
2
svn status | grep '^?'
Grep
91
Utilisez la commande suivante pour créer une liste qui ne se trouve pas sous les fichiers de contrôle de version.
Modifiez ensuite le fichier pour ne laisser que les fichiers que vous souhaitez réellement ignorer . Utilisez ensuite celui-ci pour ignorer les fichiers répertorié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 courant.
Supprimez le fichier:
rm ignoring.txt
Enfin, engagez,
svn ci --message "ignoring some files"
Vous pouvez ensuite vérifier quels fichiers sont ignorés via:
Agréable. Une amélioration mineure est svn status | awk "/^?/ {print \$2}" > ignoring.txt.
Dirk Eddelbuettel
4
pourquoi supprimer le fichier? gardez-le en dépôt si vous devez recréer / ajouter / supprimer
tgkprog
Notez que cette solution n'ignorera pas les fichiers dans les sous-répertoires (même s'ils apparaissent dans ignoring.txt).
shaneb
Cela garderait-il les ignorés existants? Sinon, comment le faire en une seule commande (c'est-à-dire --no-ignore et conserve également les lignes précédées de I)?
a1an
Cela écraserait vos ignorés actuels, essayez: svn pg svn:ignore . >> ignore.txtaprès la première commande d'ajouter les ignorés actuels au fichier.
ulitosCoder
55
.gitignore comme approche
Vous pouvez ignorer un fichier ou un répertoire comme .gitignore. Créez simplement un fichier texte de 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:
Notez que si vous modifiez ultérieurement votre fichier ignoré, vous devez réexécuter la svn:ignorecommande (voir stackoverflow.com/a/58380306/189518 )
Sensei James
50
Si vous utilisez TortoiseSVN , cliquez avec le bouton droit sur un fichier, puis sélectionnez TortoiseSVN / Ajouter pour ignorer la liste . Cela ajoutera le fichier / caractère générique à la svn:ignorepropriété.
svn:ignoresera vérifié lors de l'archivage des fichiers et les fichiers correspondants seront ignorés. J'ai la liste d'ignorance suivante pour un projet Visual Studio .NET:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Vous pouvez trouver cette liste dans le menu contextuel à TortoiseSVN / Propriétés .
Cette réponse était utile. Dans mon cas, je devais changer "." dans le sous-répertoire du fichier que je voulais ignorer et spécifier simplement le modèle de fichier. Aussi, la première fois, j'avais besoin de lancer ceci (je suis sur Mac): export SVN_EDITOR = "nano"
j'ai fait comme tu l'as dit ... mais quand je lance le statut svn. il montre toujours les fichiers ignorés avec "?"
Harshit Gupta
Je n'ai jamais vérifié avec le statut svn, mais avec svn add * et après cette validation svn, ignorer les fichiers n'est pas valider.
d.danailov
si un fichier "a.txt" est déjà en contrôle de version, alors l'ignorer se fait par la commande comme "svn propset svn: ignore -F .svnignore a.txt"? est-ce correct ?
errakeshpd
Si vous ajoutez "a.txt" dans votre fichier .svnignore, je ne suis pas sûr, mais la commande devrait être correcte.
d.danailov
10
Lorsque vous utilisez propedit, assurez-vous de ne pas avoir d'espaces de fin car cela entraînerait l'exclusion du fichier de la liste des ignorés.
Ceux-ci sont insérés automatiquement si vous avez utilisé tab-autocomplete sur linux pour créer le fichier pour commencer:
De plus, 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", en face de "Valeur de la propriété", tapez le nom de fichier souhaité ou le nom du dossier ou le masque de fichier (dans mon cas, c'était "* / cible"), cliquez sur "Appliquer" propriété récursivement "
Merci, votre réponse est la seule à mentionner le configdossier.
Henrique de Sousa
Cette réponse le mentionne également @HenriquedeSousa stackoverflow.com/a/86052/7724 et explique également qu'il s'agit d'un moyen local réservé aux clients d'ignorer les fichiers.
J'aime la réponse de bkbilly, mais cette version rompt chaque ligne pour la rendre plus lisible, et supprime le && qui, dans mes tests, n'a rien fait, car la première ligne crée toujours le fichier temporaire, et ce même fichier temporaire entre toujours dans la liste des ignorés.
LivingDust
Une proposition d'édition aurait plus approprié dans ce cas. Appréciez l'effort!
Jim
Je n'avais pas encore assez de réputation pour suggérer une modification. mais je ne veux pas ruiner un bon protocole. Existe-t-il un README simple sur les directives pour savoir quand il est préférable de suggérer et de modifier plutôt que de publier une nouvelle réponse, etc.?
LivingDust
1
Si votre réponse est exactement la même que celle publiée il y a un an et demi, c'est assez simple. Vous avez même copié l' explication « Ce que ça fait ».
Jim
3
Vous pouvez également définir un modèle d'ignorance global dans le fichier de configuration de SVN.
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 à côté d'eux.
SVN ignore est facile à gérer dans TortoiseSVN. Ouvrez TortoiseSVN et faites un clic droit sur le menu fichier, puis sélectionnez Ajouter à ignorer la liste.
Cela ajoutera les fichiers dans la svn:ignorepropriété. Lorsque nous archivons les fichiers, ceux qui correspondent àsvn:ignore ceux-ci 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 SVN de Comparetrap en utilisant cette méthode avec succès
Comment ignorer les fichiers dans Subversion?
1.Dans l'Explorateur de fichiers,
faites un clic droit sur le nom du dossier du projet SVN
2.Cliquez sur "SVN Valider ..."
3.Une fenêtre " Valider" apparaîtra 4. Faites un clic droit sur le dossier / fichier que vous souhaitez ignorer
5.Cliquez sur Ajouter pour ignorer la liste
6.Sélectionnez le dossier / fichier
7.Commettez le "changement de propriété" à SVN
De plus, comment trouver des fichiers qui ne sont pas sous contrôle de version?
Après l'étape 3 ci-dessus, cliquez sur "Afficher les fichiers non versionnés"
Réponses:
(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 comme «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 fichiers 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) et versions ultérieures, prend en charge 3 façons différentes de spécifier les modèles de fichiers. Voici un résumé avec des exemples:
1 - Zone de configuration du runtime -
global-ignores
option:global-ignores
liste ne sera pas partagée par d'autres utilisateurs et s'applique à tous les dépôts que vous retirez sur votre ordinateur.C:\Users\{you}\AppData\Roaming\Subversion\config
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
dansHKLM
etHKCU
.~/.subversion/config
2 - La
svn:ignore
propriété, qui est définie sur des répertoires (pas des fichiers):.gitignore
fonctionnement.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
svn:ignore
propriété elle-même est ignorée dans les répertoires descendants non immédiats:(Le fichier
./subdirectory/ignoreThis
n'est donc pas ignoré, même si "ignoreThis.txt
" est appliqué à la.
racine du référentiel).Par conséquent, pour appliquer une liste d'ignorance de manière récursive, vous devez utiliser
svn propset svn:ignore <filePattern> . --recursive
.<filePattern>
valeur est différente dans un répertoire enfant, alors la valeur de l'enfant remplace complètement les parents, il n'y a donc pas d'effet "additif".<filePattern>
à la racine.
, vous devez le changer avec--recursive
pour le remplacer dans les répertoires enfant et descendant.Je note que la syntaxe de ligne de commande est contre-intuitive.
svn ignore pathToFileToIgnore.txt
cela, mais ce n'est pas ainsi que fonctionne la fonction Ignorer de SVN.3- La
svn:global-ignores
propriété. Nécessite SVN 1.8 (juin 2013):svn:ignore
, sauf qu'il utilise la fonctionnalité "propriétés héritées" de SVN 1.8.svn:ignore
, le modèle de fichier est automatiquement appliqué dans chaque répertoire descendant (pas seulement les enfants immédiats).svn:global-ignores
l'--recursive
indicateur, car les modèles de fichiers ignorés hérités sont automatiquement appliqués lorsqu'ils sont hérités.Exécuter le même ensemble de commandes que dans l'exemple précédent, mais en utilisant à la
svn:global-ignores
place:Pour les utilisateurs de TortoiseSVN:
Tout cet arrangement était déroutant pour moi, car la terminologie de TortoiseSVN (telle qu'elle est utilisée dans leur système de menus de l'Explorateur Windows) était initialement trompeuse pour moi - je ne savais pas quelle était la signification des "Ajouter récursivement", "Ajouter *" et "Ajouter" du menu Ignorer les options. J'espère que ce post explique comment la fonctionnalité 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 compreniez comment cela fonctionne au lieu d'utiliser l'interface graphique, et d'utiliser uniquement 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 à unglobal-ignores
modèle RGA , ou qui correspondent au modèle d'un répertoire parent immédiatsvn:ignore
ou qui correspondent au modèle d'un répertoire ancesorsvn:global-ignores
.Utilisez l'
--no-ignore
option pour voir ces fichiers répertoriés. Les fichiers ignorés ont le statutI
, puis dirigez la sortie versgrep
pour n'afficher que les lignes commençant par "I".La commande est:
Par exemple:
ta-da!
la source
svn propedit svn:ignore .
et qu'aucun éditeur de texte n'est configuré, vous obtiendrez un message d'erreur indiquant svn: E205007: Aucune des variables d'environnement SVN_EDITOR, VISUAL ou EDITOR n'est définie, et aucune option de configuration au moment de l'exécution 'editor-cmd' n'a été trouvé au lieu d'ouvrir un éditeur. Il suffit donc de spécifier - nitor-cmd nano comme celui-cisvn propedit svn:ignore . --editor-cmd nano
svn status | grep '^?'
Utilisez la commande suivante pour créer une liste qui ne se trouve pas sous les fichiers de contrôle de version.
Modifiez ensuite le fichier pour ne laisser que les fichiers que vous souhaitez réellement ignorer . Utilisez ensuite celui-ci pour ignorer les fichiers répertoriés dans le fichier:
Notez le point à la fin de la ligne. Il indique à SVN que la propriété est définie sur le répertoire courant.
Supprimez le fichier:
Enfin, engagez,
Vous pouvez ensuite vérifier quels fichiers sont ignorés via:
la source
svn status | awk "/^?/ {print \$2}" > ignoring.txt
.svn pg svn:ignore . >> ignore.txt
après la première commande d'ajouter les ignorés actuels au fichier..gitignore comme approche
Vous pouvez ignorer un fichier ou un répertoire comme .gitignore. Créez simplement un fichier texte de la liste des répertoires / fichiers que vous souhaitez ignorer et exécutez le code ci-dessous:
OU si vous ne voulez pas utiliser de fichier texte, vous pouvez le faire comme ceci:
Source: Blog de Karsten - Définir svn: ignorer pour plusieurs fichiers à partir de la ligne de commande
la source
svn:ignore
commande (voir stackoverflow.com/a/58380306/189518 )Si vous utilisez TortoiseSVN , cliquez avec le bouton droit sur un fichier, puis sélectionnez TortoiseSVN / Ajouter pour ignorer la liste . Cela ajoutera le fichier / caractère générique à la
svn:ignore
propriété.svn:ignore
sera vérifié lors de l'archivage des fichiers et les fichiers correspondants seront ignorés. J'ai la liste d'ignorance suivante pour un projet Visual Studio .NET:Vous pouvez trouver cette liste dans le menu contextuel à TortoiseSVN / Propriétés .
la source
Comme personne ne semble l'avoir mentionné ...
Modifiez ensuite le contenu du fichier pour spécifier les modèles à ignorer, quittez l'éditeur et vous avez terminé.
la source
J'ai trouvé l'article .svnignore Exemple pour Java .
Exemple: .svnignore pour Ruby on Rails,
Et après ça:
Exemples pour .gitignore. Vous pouvez utiliser pour votre .svnignore
https://github.com/github/gitignore
la source
Lorsque vous utilisez propedit, assurez-vous de ne pas avoir d'espaces de fin car cela entraînerait l'exclusion du fichier de la liste des ignorés.
Ceux-ci sont insérés automatiquement si vous avez utilisé tab-autocomplete sur linux pour créer le fichier pour commencer:
la source
Une autre solution est:
ou ligne par ligne
Ce qu'il fait:
la source
De plus, si vous utilisez Tortoise SVN, vous pouvez le faire:
la source
la source
config
dossier.Une version plus lisible de la réponse de bkbilly:
Ce qu'il fait:
la source
Vous pouvez également définir un modèle d'ignorance global dans le fichier de configuration de SVN.
la source
svn status
vous dira quels fichiers ne sont pas dans SVN, ainsi que ce qui a changé.Regardez les propriétés SVN pour la propriété ignore.
Pour toutes les choses SVN, le livre rouge est une lecture obligatoire.
la source
Ajouter un répertoire à subversion et ignorer le contenu du répertoire
ou
la source
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 à côté d'eux.
Pour ignorer les fichiers, vous devez modifier la propriété svn: ignore, lisez le chapitre Ignorer les éléments non versionnés dans le svnbook à http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore. html . Le livre décrit également plus sur l'utilisation du statut svn.
la source
SVN
ignore
est facile à gérer dans TortoiseSVN. Ouvrez TortoiseSVN et faites un clic droit sur le menu fichier, puis sélectionnez Ajouter à ignorer la liste.Cela ajoutera les fichiers dans la
svn:ignore
propriété. Lorsque nous archivons les fichiers, ceux qui correspondent àsvn:ignore
ceux-ci seront ignorés et ne seront pas validés.Dans le projet Visual Studio, nous avons ajouté les fichiers suivants à ignorer:
Nous gérons le code source sur SVN de Comparetrap en utilisant cette méthode avec succès
la source
Ce qui a fonctionné pour moi:
Comment ignorer les fichiers dans Subversion?
1.Dans l'Explorateur de fichiers, faites un clic droit sur le nom du dossier du projet SVN
2.Cliquez sur "SVN Valider ..."
3.Une fenêtre " Valider" apparaîtra
4. Faites un clic droit sur le dossier / fichier que vous souhaitez ignorer
5.Cliquez sur Ajouter pour ignorer la liste
6.Sélectionnez le dossier / fichier
7.Commettez le "changement de propriété" à SVN
De plus, comment trouver des fichiers qui ne sont pas sous contrôle de version?
Après l'étape 3 ci-dessus, cliquez sur "Afficher les fichiers non versionnés"
la source
la source