web-dev-qa-db-fra.com

Comment ignorer des fichiers dans Subversion?

Comment ignorer des fichiers dans Subversion?

Aussi, comment trouver des fichiers qui ne sont pas sous contrôle de version?

589
andyuk

(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 s'il est "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 décrits 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 ultérieure, 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-ignores:

  • Il s’agit d’un paramètre côté client uniquement. Par conséquent, votre liste global-ignores ne sera pas partagée par d’autres utilisateurs. Elle s’applique à toutes les mises en pension que vous extrayez sur votre ordinateur.
  • Ce paramètre est défini dans votre fichier de 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 à la fois 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 fonctionne .gitignore.
  • 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
    

    (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 de non-respect de manière récursive, vous devez utiliser svn propset svn:ignore <filePattern> . --recursive.

    • Cela 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 remplace complètement les parents, il n'y a donc pas d'effet "additif".
    • Donc, si vous modifiez le <filePattern> sur le . racine, vous devez le changer avec --recursive pour le remplacer dans les répertoires enfant et descendant.
  • Je remarque que la syntaxe de la ligne de commande est contre-intuitive.

    • J'ai commencé en partant du principe 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 fonction 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 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 de 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 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 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 leur système de menus de Windows Explorer) m'avait initialement induite en erreur - je ne savais pas quelle était la signification des options "Ajouter de manière récursive", "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 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 qui sont 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 au modèle svn:ignore d'un répertoire parent immédiat ou au modèle svn:global-ignores de tout autre répertoire ancesor.

Utilisez l'option --no-ignore pour voir ces fichiers listés. Les fichiers ignorés ont un statut de I, puis dirigez la sortie vers grep pour afficher uniquement 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!

690
andyuk

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

Editez ensuite le fichier dans ne laissez que les fichiers que vous souhaitez 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 commettre,

svn ci --message "ignoring some files"

Vous pouvez ensuite vérifier quels fichiers sont ignorés via:

svn proplist -v
76
ulitosCoder

Si vous utilisez TortoiseSVN , cliquez avec le bouton droit sur un fichier, puis sélectionnez TortoiseSVN/Add pour ignorer la 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 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 à l'adresse TortoiseSVN/Properties.

47
artur02

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 un 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

36
Adrian Enriquez

J'ai trouvé l'article .svnignore Example for 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

21
d.danailov

Comme personne ne semble l'avoir mentionné ...

svn propedit svn:ignore .

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

15
Yorick

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' .
10
Kenneth

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 de statut du svn
  2. Enregistre tous les fichiers avec? vers 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
8
bkbilly

De plus, 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 propriété", sélectionnez ou tapez "svn: ignore", à l'opposé de "Valeur de propriété", tapez le nom de fichier souhaité ou le nom du dossier ou le masque de fichier (dans mon cas, il s'agissait de "*/target"), cliquez sur "Appliquer". propriété récursivement "
  4. D'accord. D'accord.
  5. Commettre
7
msangel

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 de statut du svn
  2. Enregistre tous les fichiers avec ? vers 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
5
LivingDust
  1. cd ~/.subversion
  2. config ouverte
  3. trouve la ligne comme 'global-ignores'
  4. définir ignorer le type de fichier comme ceci: global-ignores = * .o * .lo * .la * .al .libs * .so .so. [0-9] * .pyc * .pyo * .rej ~ # #. # *. *. swp .DS_Store node_modules output
4
范陆离

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.

Cela ajoutera les fichiers dans la propriété svn:ignore . Lorsque nous archiverons 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 SVN de Comparetrap en utilisant cette méthode avec succès

3
Slack

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

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

Pour tout ce qui concerne SVN, le Livre rouge est une lecture obligatoire.

3
DGM

Vous pouvez également définir un motif d'ignorance global dans le fichier de configuration de SVN.

3
petr k.

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

svn propset svn:ignore '\*.*' .

ou

svn propset svn:ignore '*' .
3
Al Conrad

Utilisez la commande svn status sur votre copie de travail pour afficher le statut 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 à l'adresse 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.

2
Andreas Holstenson
  1. ouvrez vous utilisez le produit JetBrains (c.-à-d. Pycharm)
  2. cliquez ensuite sur le bouton "Valider" 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 pourrez valider que la liste de modifications par défaut.
0
G. Googol