Comment ignorer les fichiers dans Subversion?
De plus, comment trouver des fichiers qui ne sont pas sous contrôle de version?
Comment ignorer les fichiers dans Subversion?
De plus, comment trouver des fichiers qui ne sont pas sous contrôle de version?
Réponses:
(Cette réponse a été mise à jour pour correspondre au comportement de SVN 1.8 et 1.9)
Vous avez 2 questions:
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:
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
dans HKLM
et HKCU
.~/.subversion/config
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:
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/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.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:
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!
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.
La commande svn status
masquera les fichiers ignorés (c'est-à-dire les fichiers qui correspondent à un global-ignores
modèle RGA , ou qui correspondent au modèle d'un répertoire parent immédiat svn:ignore
ou qui correspondent au modèle d'un répertoire ancesor svn:global-ignores
.
Utilisez l' --no-ignore
option pour voir ces fichiers répertoriés. Les fichiers ignorés ont le statut I
, puis dirigez la sortie vers grep
pour 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
ta-da!
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.
svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt
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:
svn proplist -v
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.
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:
svn propset svn:ignore "first
second
third" .
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:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Vous pouvez trouver cette liste dans le menu contextuel à TortoiseSVN / Propriétés .
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é.
J'ai trouvé l'article .svnignore Exemple pour Java .
Exemple: .svnignore pour Ruby on Rails,
/log
/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif
*.*~
Et après ça:
svn propset svn:ignore -F .svnignore .
Exemples pour .gitignore. Vous pouvez utiliser pour votre .svnignore
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:
svn propset svn:ignore 'file1
file2' .
Une autre solution est:
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 qu'il fait:
De plus, si vous utilisez Tortoise SVN, vous pouvez le faire:
config
dossier.
Une version plus lisible de la 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 qu'il fait:
Vous pouvez également définir un modèle d'ignorance global dans le fichier de configuration de SVN.
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.
Ajouter un répertoire à subversion et ignorer le contenu du répertoire
svn propset svn:ignore '\*.*' .
ou
svn propset svn:ignore '*' .
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.
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:
bin obj
*.exe
*.dll
*.pdb
*.suo
Nous gérons le code source sur SVN de Comparetrap en utilisant cette méthode avec succès
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"