Question

Comment ignorer les fichiers dans Subversion?

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

Était-ce utile?

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 dans HKLM et HKCU .
    • Linux / Unix - ~ / .subversion / config

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.

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.
  • 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

https://github.com/github/gitignore

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:

  1. Obtient les fichiers de statut 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. .
  5. Indique au svn d'ignorer les fichiers de "svnignore.txt"
  6. supprime le fichier

De même, si vous utilisez Tortoise SVN, vous pouvez le faire:

  1. Dans le menu contextuel, sélectionnez "TortoiseSVN", puis "Propriétés"
  2. .
  3. Dans la fenêtre apparue, cliquez sur "Nouveau", puis sur "Avancé"
  4. .
  5. 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"
  6. .
  7. Ok. Ok.
  8. 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:

  1. Obtient les fichiers de statut 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. .
  5. Indique au svn d'ignorer les fichiers de "svnignore.txt"
  6. supprime le fichier
  1. cd ~ / .subversion
  2. ouvrir la configuration
  3. trouvez la ligne comme "global-ignore"
  4. 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.

  1. ouvrez vous utilisez le produit JetBrains (c.-à-d. Pycharm)
  2. puis cliquez sur le bouton "commettre" 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 que vous ne pourrez valider que la liste de modifications par défaut.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top