Comment puis-je ignorer des fichiers dans Subversion?

Comment puis-je ignorer des fichiers dans Subversion?

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

565
demandé sur Peter Mortensen 2008-09-17 22:15:55

17 réponses

(cette réponse a été mise à jour pour correspondre au comportement de SVN 1.8 et 1.9)

vous avez 2 questions:

marquer les fichiers comme ignoré:

par "fichier ignoré", je veux dire que le fichier n'apparaîtra pas dans les listes, même s'il est "non suivi en versions": 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 "motif de fichier". La syntaxe et le format des motifs de fichier est expliqué dans la documentation en ligne de SVN: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "file Patterns in Subversion".

Subversion, à partir de la version 1.8 (juin 2013) et plus tard, prend en charge 3 différentes façons de spécifier les motifs de fichiers. Voici un résumé avec des exemples:

1 - Configuration de l'Exécution Zone global-ignores option:

  • C'est un seulement côté client réglage, de sorte que votre global-ignores liste ne sera pas partagée par d'autres utilisateurs, et il s'applique à tous les repos que vous vérifiez sur votre ordinateur.
  • ce paramètre est défini dans votre fichier de zone de Configuration D'exécution.:
    • de Windows (fichier) - C:\Users\{you}\AppData\Roaming\Subversion\config
    • de Windows (registre) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignores dans les deux HKLM et HKCU .
    • Linux / Unix - ~/.subversion/config

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

  • cette information est stockée dans le fichier repo, de sorte que les autres utilisateurs auront les mêmes fichiers ignorés. Similaire à comment .gitignore fonctionne.
  • svn:ignore s'applique aux annuaires et est non récursif ou hérité. Tout fichier ou sous-répertoire immédiat du répertoire parent qui correspond le 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
    

    (de sorte que le fichier ./subdirectory/ignoreThis n'est pas ignoré, même si ignoreThis.txt " est appliqué sur la racine . ).

  • par conséquent, pour appliquer une liste d'ignorer récursivement, vous devez utilisez 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, alors la valeur de l'enfant l'emporte complètement sur les parents, donc il n'y a pas d'effet" additif".
    • donc si vous changez le <filePattern> sur la racine . , alors vous devez le changer avec --recursive pour l'écraser sur l'enfant et le descendant annuaire.
  • je note que la syntaxe en ligne de commande est contre-intuitive.

    • j'ai commencé à supposer que vous ignoreriez un fichier dans SVN en tapant quelque chose comme svn ignore pathToFileToIgnore.txt mais ce n'est pas comme ça que fonctionne la fonctionnalité ignorer de SVN.

3 - le svn:global-ignores bien. Nécessite SVN 1.8 (juin 2013):

  • c'est similaire à svn:ignore , sauf qu'il utilise la fonctionnalité" propriétés héritées " de SVN 1.8.
  • comparez à svn:ignore , le motif du 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-ignores avec le drapeau --recursive , car les motifs de fichiers ignorés hérités sont appliqués automatiquement 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, parce que la terminologie de TortoiseSVN (comme utilisé dans leur Windows Explorer menu system) était initialement trompeuse pour moi - je n'étais pas sûr de ce que la signification du Menu ignorer "ajouter récursivement", "Ajouter *" et "Ajouter ". J'espère que ce billet explique comment la fonction Ignorer est liée à la fonction propriétés SVN. Cela dit, je suggère d'utiliser la ligne de commande pour définir les fichiers ignorés de sorte que vous obtenez une idée de comment cela fonctionne au lieu d'utiliser l'interface graphique, et seulement en utilisant l'interface graphique pour manipuler les propriétés après que vous êtes à l'aise avec la ligne de commande.

lister les fichiers qui sont ignorés:

la commande svn status masquera les fichiers ignorés (c'est-à-dire, les fichiers qui correspondent à un motif RGA global-ignores , ou correspondent au motif svn:ignore d'un répertoire parent immédiat ou correspondent au motif svn:global-ignores d'un répertoire ancêtre.

utilisez l'option --no-ignore pour voir la liste des fichiers. Les fichiers ignorés ont un statut I , puis pipez la sortie grep pour ne montrer 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!

671
répondu andyuk 2017-04-13 13:40:47

utilisez la commande suivante pour créer une liste qui ne se trouve pas dans les fichiers de contrôle de version.

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

puis éditez le fichier en laissez juste les fichiers que vous voulez réellement ignorer . Puis utilisez celui-ci pour ignorer les fichiers énumérés dans le fichier:

svn propset svn:ignore -F ignoring.txt .

Notez le point à la fin de la ligne. Il raconte SVN que la propriété est définie sur le répertoire courant.

supprimer le fichier:

rm ignoring.txt

Enfin s'engager",

svn ci --message "ignoring some files"

vous pouvez alors vérifier quels fichiers sont ignorés via:

svn proplist -v
73
répondu ulitosCoder 2017-08-30 13:39:27

si vous utilisez TortoiseSVN , faites un clic droit sur un fichier et sélectionnez TortoiseSVN / Ajouter pour ignorer la liste . Cela ajoutera le fichier / Joker à 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 pour un projet de Visual Studio. net:

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

vous pouvez trouver cette liste dans le menu contextuel à TortoiseSVN / propriétés .

46
répondu artur02 2014-01-28 16:56:51

Vous pouvez ignorer un fichier ou un répertoire comme .gitignore . Il suffit de créer un fichier texte de la liste des répertoires/fichiers que vous voulez ignorer et exécuter le code ci-dessous:

svn propset svn:ignore -F ignorelist.txt .

OU si vous ne souhaitez pas utiliser un fichier texte, vous pouvez le faire comme ceci:

svn propset svn:ignore "first
 second
 third" .

Source: Karsten Blog - Set svn:ignore pour plusieurs fichiers en ligne de commande

35
répondu Adrian Enriquez 2016-03-05 20:13:35

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 cela:

svn propset svn:ignore -F .svnignore .

Exemples pour .gitignore. Vous pouvez utiliser pour votre .svnignore

https://github.com/github/gitignore

21
répondu d.danailov 2015-04-15 16:23:42

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

svn propedit svn:ignore .

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

11
répondu Yorick 2017-07-26 21:37:07

lors de l'utilisation de propedit assurez-vous de ne pas avoir d'espaces de fuite car cela va provoquer l'exclusion du fichier de la liste des ignorants.

ceux-ci sont insérés automatiquement si vous avez utilisé tab-autocomplete sur linux pour créer le fichier à commencer par:

svn propset svn:ignore 'file1
file2' .
10
répondu Kenneth 2011-03-01 13:54:11

une autre solution est:

svn st | awk '/^?/{print }' > 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 }' > svnignore.txt 
svn propget svn:ignore >> svnignore.txt 
svn propset svn:ignore -F svnignore.txt . 
rm svnignore.txt

Ce qu'il fait:

  1. reçoit les fichiers de statut de la svn
  2. enregistre tous les fichiers avec ? dans le fichier "svnignore.txt "
  3. récupère les fichiers déjà ignorés et les ajoute au fichier" svnignore.txt "
  4. dit au svn d'ignorer les fichiers "svnignore.txt "
  5. supprime le fichier
8
répondu bkbilly 2016-12-01 02:00:34

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 "nouveau", puis "Avancé "
  3. dans la fenêtre apparue vis-à-vis de "nom de la propriété" sélectionnez ou tapez "svn:ignore", vis-à-vis de "valeur de la propriété" tapez nom de fichier ou nom de dossier désiré ou masque de fichier (dans mon cas, il était "*/cible"), cliquez sur" Appliquer propriété récursivement "
  4. Ok. OK.
  5. Commit
6
répondu msangel 2017-09-14 17:32:45

une version plus lisible de réponse de bkbilly:

svn st | awk '/^?/{print }' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt

Ce qu'il fait:

  1. reçoit les fichiers de statut de la 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. dit au svn d'ignorer les fichiers "svnignore.txt "
  5. supprime le fichier
5
répondu LivingDust 2017-09-14 17:31:58

vous pouvez également définir un patron d'ignorer global dans le fichier de configuration de SVN.

3
répondu petr k. 2008-09-17 18:18:16

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

regardez la SVN properties pour la propriété ignore.

pour toutes les choses SVN, le Livre Rouge est une lecture obligatoire.

3
répondu DGM 2015-04-15 16:20:37

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

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

ou

svn propset svn:ignore '*' .
3
répondu Al Conrad 2016-03-05 20:13:00
  1. cd ~/.subversion
  2. open config
  3. trouver la ligne comme 'le-ignore'
  4. définit le type de fichier ignore comme ceci: global-ignores = *.o *.lo *.la *.al .libs *.so .alors?[0-9] *.pyc *.pyo 88 *.rej ~ # # .#* .*.swp .DS_Store node_modules sortie 151920920"
3
répondu 范陆离 2017-01-11 09:54:37

SVN ignore est facile à gérer à TortoiseSVN. Ouvrez TortoiseSVN et cliquez avec le bouton droit de la souris sur le menu Fichier, puis sélectionnez Ajouter pour ignorer la liste.

Ajoute les fichiers de la propriété svn:ignore . Lorsque nous vérifions les fichiers, ceux qui correspondent à svn:ignore seront ignorés et ne se propageront pas.

dans Visual Studio project, nous avons ajouté les fichiers suivants pour les ignorer:

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

nous sommes gérer le code source sur SVN de Comparetrap en utilisant cette méthode avec succès

3
répondu Slack 2018-01-06 11:11:56

utilisez la commande svn status sur votre copie de travail pour afficher l'état des fichiers, les fichiers qui ne sont pas encore sous le contrôle de la version (et qui ne sont pas ignorés) auront un point d'interrogation à côté d'eux.

pour ce qui est d'ignorer les fichiers, vous devez éditer la propriété svn:ignore, lisez le chapitre Ignoring Unversioned Items 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.

2
répondu Andreas Holstenson 2008-09-17 18:19:39
  1. ouvrez vous utilisez JetBrains Produit(c'est à dire Pycharm)
  2. puis cliquez sur le bouton' commit 'sur la barre d'outils supérieure ou utilisez le raccourci 'CTRL + k' screenshot_toolbar
  3. sur l'interface de propagation, déplacez vos fichiers indésirables vers une autre liste de modifications comme suit. screenshot_commit_change
  4. la prochaine fois, vous ne pouvez propager que la liste des modifications par défaut.
0
répondu G. Googol 2018-06-06 06:00:35