Je viens de commencer à utiliser SVN et j'ai un répertoire de cache dont je n'ai pas besoin sous contrôle de source. Comment puis-je ignorer tout le répertoire/dossier avec SVN?
J'utilise versions et TextMate sous OS X et en ligne de commande.
Définissez la propriété svn:ignore
du répertoire parent:
svn propset svn:ignore dirname .
Si vous devez ignorer plusieurs éléments, séparez-les par des lignes nouvelles dans la valeur de la propriété. Dans ce cas, il est plus facile de modifier la valeur de la propriété à l'aide d'un éditeur externe:
svn propedit svn:ignore .
Voici un exemple de structure de répertoire:
\project
\source
\cache
\other
Lorsque vous êtes dans project
, vous voyez que votre répertoire de cache n’est pas ajouté et s’affiche comme tel.
> svn st
M source
? cache
Pour définir la propriété ignore, faites
svn propset svn: ignorer le cache.
où svn:ignore
est le nom de la propriété que vous définissez, cache
est la valeur de la propriété et .
est le répertoire sur lequel vous définissez cette propriété. Il doit s'agir du répertoire parent du répertoire cache
qui nécessite la propriété.
Pour vérifier quelles propriétés sont définies:
> svn proplist
Properties on '.':
svn:ignore
Pour voir la valeur de svn:ignore
:
> svn propget svn:ignore
cache
Pour supprimer les propriétés précédemment définies:
svn propdel svn:ignore
Important à mentionner:
Sur la ligne de commande, vous ne pouvez pas utiliser
svn add *
Cela ajoutera également les fichiers ignorés, car la ligne de commande développe *
et donc svn add
croit que vous souhaitez que tous les fichiers soient ajoutés. Utilisez donc ceci à la place:
svn add --force .
Comme j'ai passé un certain temps à essayer de faire fonctionner cela, il convient de noter que si les fichiers existent déjà dans SVN, vous devez les svn delete
, puis éditer la propriété svn:ignore
.
Je sais que cela semble évident, mais ils continuaient à apparaître sous la forme ?
dans ma liste svn status
, alors que je pensais que cela les ignorerait localement.
Pour développer légèrement, si vous faites cela avec l'outil de ligne de commande svn, vous voulez taper:
svn propedit svn:ignore path/to/dir
qui va ouvrir votre éditeur de texte de choix, puis tapez '*' pour tout ignorer, et enregistrez + quitter - cela inclura le répertoire lui-même dans svn, mais ignorera tous les fichiers qu'il contient, pour ignorer le répertoire, utilisez la commande chemin du parent, puis tapez le nom du répertoire dans le fichier. Après la sauvegarde, lancez une mise à jour ('svn up'), puis enregistrez le chemin approprié.
Définissez la propriété svn:ignore
sur le répertoire parent:
$ cd parentdir
$ svn ps svn:ignore . 'cachedir'
Cela écrasera toute valeur actuelle de svn:ignore
. Vous pouvez éditer la valeur avec:
$ svn pe svn:ignore .
Ce qui ouvrira votre éditeur. Vous pouvez ajouter plusieurs modèles, un par ligne.
Vous pouvez afficher la valeur actuelle avec:
$ svn pg svn:ignore .
Si vous utilisez une interface graphique, il devrait y avoir une option de menu pour le faire.
Merci pour toutes les contributions ci-dessus. J'aimerais simplement partager des informations supplémentaires issues de mes expériences tout en ignorant les fichiers.
Lorsque les dossiers sont déjà sous contrôle de révision
Après svn import et svn co les fichiers, ce que nous faisons habituellement pour la première fois.
Tous les dossiers de pièces jointes et de cache d'exécution seront sous contrôle de version. donc, avant svn ps svn: ignore , nous devons le supprimer du référentiel.
Avec SVN version 1.5 ci-dessus, nous pouvons utiliser svn del --keep-local your_folder
, mais pour une version antérieure, ma solution est la suivante:
.svn
dossier caché)Lorsque plusieurs dossiers doivent être ignorés
svn:ignore
svn pe
devra éditer le fichier texte. Vous pouvez utiliser cette commande si nécessaire pour définir votre éditeur de texte à l'aide de vi :
export SVN_EDITOR=vi
Le fichier ressemble à quelque chose comme ceci:
runtime
cache
attachments
assets
Si votre répertoire foo
est déjà sous contrôle de version, supprimez-le d'abord avec:
svn rm --keep-local foo
svn propset svn:ignore foo .
... et si vous souhaitez ignorer plusieurs répertoires (par exemple, fichiers build/
temp/
et *.tmp
), vous pouvez le faire en deux étapes (en ignorant le premier et en modifiant les propriétés (voir les autres réponses ici) ou on pourrait écrire quelque chose comme
svn propset svn:ignore "build
temp
*.tmp" .
sur la ligne de commande.
Si vous utilisez le client SVN particulier TortoiseSVN , lors de la validation, vous avez la possibilité de cliquer avec le bouton droit de la souris sur les éléments et de sélectionner "Ajouter pour ignorer la liste".
La commande pour ignorer plusieurs entrées est un peu délicate et nécessite des barres obliques inverses.
svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .
Cette commande ignore tout ce qui est nommé cache
, tmp
, null
et and_so_on
dans le répertoire en cours.
J'ai eu du mal à ignorer les répertoires imbriqués; le répertoire principal que je voulais ignorer ne s'afficherait pas avec "svn status", mais tous les sous-répertoires le faisaient. Cela va probablement de soi pour tout le monde, mais je pensais le partager:
EXEMPLE:
/tronc
/ trunk/cache
/ trunk/cache/subdir1
/ trunk/cache/subdir2
cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
"Merci" svn pour un moyen aussi hideux, factice et difficile d’ignorer des fichiers.
J'ai donc écrit un script (svn-ignore-all :
#!/bin/sh
# svn-ignore-all
# usage:
# 1. run svn status to see what is going on at each step
# 2. add or commit all files that you DO want to have in svn
# 3. remove any random files that you don't want to svn:ignore
# 4. run this script to svn:ignore everything marked '?' in output of `svn status`
svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
En outre, pour ignorer une liste spécifique de fichiers/chemins d'accès, nous pouvons utiliser cette variante svn-ignore . Je suppose que svn-ignore-all devrait vraiment être comme xargs svn-ignore.
#!/bin/sh
# svn-ignore
# usage:
# svn-ignore file/to/ignore ...
for f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
Une dernière chose: j’ai tendance à polluer mes svn checkouts avec de nombreux fichiers aléatoires. Quand il est temps de valider, je déplace ces fichiers dans un "ancien" sous-répertoire et dis à svn d'ignorer "ancien".
Bash un liner pour plusieurs ignore:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
POUR CONSERVER DES ANNUAIRES QUE SVN IGNORERA:
svn delete --keep-local path/directory_to_keep/*
svn propset svn: ignorer "*" chemin/répertoire_à_charger
Si votre répertoire de projet s'appelle/Project et que votre répertoire de cache s'appelle/Project/Cache, vous devez définir une propriété Subversion sur/Project. Le nom de la propriété doit être "svn: ignore" et la valeur de la propriété doit être "Cache".
Reportez-vous à la page this du manuel Subversion pour plus d'informations sur les propriétés.
La réponse de Jason fera l'affaire. Cependant, au lieu de définir svn: ignore à "." sur le répertoire de cache, vous pouvez inclure "cache" dans la propriété svn: ignore du répertoire parent, au cas où le répertoire de cache ne serait pas toujours présent. Je le fais sur un certain nombre de dossiers "jetables".
Si vous utilisez une interface pour SVN telle que TortoiseSVN, ou une sorte d'intégration IDE, il devrait également y avoir une option ignore dans le même menu qui correspond à l'opération commit/add.
Puisque vous utilisez des versions, c'est très simple:
Définissez le svn: ignore propriété . La plupart des outils d'interface utilisateur svn ont un moyen de le faire, ainsi que la discussion en ligne de commande dans le lien.
Résolu avec Eclipse de la manière suivante:
Tout d’abord, synchronisez votre dossier avec le projet:
équipe -> synchroniser
Dans la vue suivante, vue d'équipe, vous pouvez voir toutes les ressources que vous pouvez engager sur le serveur SVN.
Alors, sélectionnez le dossier de ressources de la ressource que vous voulez ignorer, puis vous pouvez l’ignorer en utilisant
équipe -> ajouter à
svn:ignore
.
Ensuite, dans la fenêtre de confirmation, sélectionnez la première option: "ignorer par nom".
Par exemple, si je veux ignorer le dossier cible et leurs ressources .class, je le synchronise et, dans la vue Synchroniser, je sélectionne le dossier cible. Après cela, je vais sélectionner
équipe-> ajouter
sur svn:ignore
puis je confirmerai la première option dans la fenêtre de confirmation.
Regardez aussi vos barres obliques. J'ai constaté que l'inclusion de images/*
dans mon fichier de paramètres Ignorer n'ignorait pas ./images/
. Quand j'ai lancé svn status -u
, il affichait toujours ? images
. Donc, je viens de changer le paramètre ignorer pour simplement images
, pas de barre oblique. A couru un contrôle de statut et cela l'a effacé.
Après avoir perdu beaucoup de temps à chercher comment faire cette activité simple, j'ai décidé de poster, il n'était pas difficile de trouver une explication décente.
Laissez d'abord la structure de l'échantillon
$ svn st? projet/coffre/cible? project/trunk/myfile.x
1 - configurez d'abord l'éditeur, dans mycase vim export SVN_EDITOR = vim
2 - “svn propedit svn: ignorer projet/coffre /” ouvrira un nouveau fichier et vous pourrez ajouter vos fichiers et sous-répertoires dans le type de cas américain “cible” enregistrer et fermer le fichier et les travaux.
$ svn st? project/trunk/myfile.x
merci.