Comment ignorer les fichiers dans Subversion?

Comment ignorer les fichiers dans Subversion?

Comment puis-je trouver des fichiers qui ne sont pas sous contrôle de version?

(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 “non versionnées”: votre client SVN fera comme si le fichier n’existait 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 trois manières différentes de spécifier des modèles de fichiers. Voici un résumé avec des exemples:

1 – Zone de configuration du runtime – option global-ignores :

  • Il s’agit d’un paramètre côté client uniquement , de sorte que votre liste d’ global-ignores sera pas partagée par les autres utilisateurs et s’applique à toutes les mises en attente effectuées sur votre ordinateur.
  • Ce paramètre est défini dans le fichier de votre zone de configuration d’exécution:
    • Windows (basé sur un fichier) – C:\Users\{you}\AppData\Roaming\Subversion\config
    • Windows (basé sur le registre) – Software\Tigris.org\Subversion\Config\Miscellany\global-ignores dans HKLM et HKCU .
    • Linux / Unix – ~/.subversion/config

2 – La propriété svn:ignore , qui est définie sur les répertoires (pas les fichiers):

  • Ceci est stocké dans le repository, donc les autres utilisateurs auront les mêmes fichiers d’ignorance. Similaire à la façon .gitignore fonctionne .gitignore .
  • svn:ignore est appliqué aux répertoires et n’est pas 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 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 

    (Donc, le fichier ./subdirectory/ignoreThis n’est pas ignoré, même si ” ignoreThis.txt ” est appliqué à la racine . Repo).

  • Par conséquent, pour appliquer récursivement une liste d’ svn propset svn:ignore . --recursive vous devez utiliser svn propset svn:ignore . --recursive svn propset svn:ignore . --recursive .

    • Cela créera une copie de la propriété sur chaque sous-répertoire.
    • Si la valeur est différente dans un répertoire enfant, la valeur de l’enfant remplace complètement les parents, il n’y a donc pas d’effet “additif”.
    • Donc, si vous modifiez le sur la racine . , alors vous devez le changer avec --recursive pour l’écraser dans les répertoires enfant et descendant.
  • Je remarque que la syntaxe de la 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.txt mais ce n’est pas ainsi que la fonctionnalité d’ svn ignore pathToFileToIgnore.txt SVN fonctionne.

3- La propriété svn:global-ignores . 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.
  • 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 --recursive , car les modèles de fichiers svn:global-ignores --recursive sont automatiquement appliqués à mesure qu’ils sont hérités.
  • Exécuter le même ensemble de commandes que dans l’exemple précédent, mais en utilisant 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! 

Pour les utilisateurs de TortoiseSVN:

Cet arrangement était déroutant pour moi, car la terminologie de TortoiseSVN (telle qu’utilisée dans leur système de menus Windows Explorer) me trompait initialement – je ne savais pas quelle était la signification du menu Ignorer “Ajouter récursivement”, “Ajouter *” et “Ajouter” options J’espère que cet article 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 d’avoir une idée de son fonctionnement au lieu d’utiliser l’interface graphique, et d’utiliser l’interface graphique uniquement pour manipuler les propriétés après avoir utilisé la ligne de commande.

Liste des fichiers qui sont ignorés:

La commande svn status cachera les fichiers ignorés (c’est-à-dire les fichiers qui correspondent à un modèle global-ignores RGA ou correspondra à un svn:ignore du répertoire parent immédiat svn:ignore pattern ou correspond au modèle svn:global-ignores du répertoire ancesor).

Utilisez l’option --no-ignore pour voir ces fichiers répertoriés. Les fichiers ignorés ont le statut I , puis transmettent la sortie à 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!

Utilisez la commande suivante pour créer une liste non sous les fichiers de contrôle de version.

 svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt 

Ensuite, éditez le fichier pour ne laisser que les fichiers que vous souhaitez ignorer . Ensuite, utilisez 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 dans le répertoire en cours.

Supprimer le fichier:

 rm ignoring.txt 

Enfin, commettez,

 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 pour ignorer la liste . Cela appenda 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 suivante d’ignorer pour un projet Visual Studio .NET:

 bin obj *.exe *.dll _ReSharper *.pdb *.suo 

Vous pouvez trouver cette liste dans le menu contextuel de TortoiseSVN / Properties .

Vous pouvez ignorer un fichier ou un répertoire comme .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: Blog de Karsten – Set svn: ignore pour plusieurs fichiers en ligne de commande

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

https://github.com/github/gitignore

Lorsque vous utilisez propedit, assurez-vous de ne pas avoir d’espaces de fin car cela entraînera l’exclusion du fichier 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 en commençant par:

 svn propset svn:ignore 'file1 file2' . 

Comme personne ne semble l’avoir mentionné …

 svn propedit svn:ignore . 

Ensuite, éditez le contenu du fichier pour spécifier les modèles à ignorer, quittez l’éditeur et vous avez terminé.

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:

  1. Obtient les fichiers d’état du svn
  2. Enregistre tous les fichiers avec ? dans le fichier “svnignore.txt”
  3. Obtient les fichiers déjà ignorés et les ajoute au fichier “svnignore.txt”
  4. Indique au svn d’ignorer les fichiers dans “svnignore.txt”
  5. Supprime le fichier

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:

  1. Obtient les fichiers d’état du svn
  2. Enregistre tous les fichiers avec ? dans le fichier “svnignore.txt”
  3. Obtient les fichiers déjà ignorés et les ajoute au fichier “svnignore.txt”
  4. Indique au svn d’ignorer les fichiers dans “svnignore.txt”
  5. Supprime le fichier

Aussi, si vous utilisez Tortoise SVN, vous pouvez le faire:

  1. Dans le menu contextuel, sélectionnez “TortoiseSVN”, puis “Propriétés”
  2. Dans la fenêtre apparue cliquez sur “Nouveau”, puis “Avancé”
  3. Dans la fenêtre apparue opposée à “Nom de la propriété”, sélectionnez ou tapez “svn: ignore”, en regard de “Valeur de la propriété”, tapez le nom du fichier ou le nom du dossier ou le masque (dans mon cas, “* / target”), cliquez sur “Appliquer propriété récursive ”
  4. D’accord. D’accord.
  5. Commettre

Vous pouvez également définir un modèle global d’ignorance dans le fichier de configuration de SVN.

svn status vous indiquera quels fichiers ne sont pas dans SVN, ainsi que ce qui a changé.

Examinez les propriétés SVN pour la propriété ignore.

Pour tout ce qui concerne SVN, le livre rouge doit être lu.

Ajouter un répertoire à subversion et ignorer le contenu du répertoire

 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 du fichier, puis sélectionnez Ajouter à la liste des fichiers ignorés.

Cela appenda les fichiers dans la propriété svn:ignore . Lorsque nous archivons les fichiers, nous vérifions ces fichiers avec svn:ignore qui 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

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 dont vous avez besoin pour éditer la propriété svn: ignore, lisez le chapitre Ignorer les éléments sans version dans svnbook à l’ adresse http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore. html . Le livre décrit également l’utilisation de svn status.

  1. cd ~ / .subversion
  2. config ouverte
  3. trouver la ligne comme ‘global-ignores’
  4. set ignore file type comme ceci: global-ignores = * .o * .lo * .la * .al .libs * .so .so. [0-9] * .pyc * .pyo 88 * .rej ~ # #. # *. *. swp .DS_Store output_modules_noeud
  1. ouvrez vous utilisez le produit JetBrains (c.-à-d. Pycharm)
  2. puis cliquez sur le bouton ‘commit’ dans la barre d’outils supérieure ou utilisez le raccourci ‘ctrl + k’ screenshot_toolbar
  3. sur l’interface de validation, déplacez vos fichiers indésirables vers une autre liste de modifications comme suit. screenshot_commit_change
  4. la prochaine fois, vous ne pouvez valider que la liste de modifications par défaut.