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 sur OS X et ligne de commande.
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 sur OS X et ligne de commande.
Réponses:
Définissez la svn:ignore
propriété du répertoire parent:
svn propset svn:ignore dirname .
Si vous devez ignorer plusieurs éléments, séparez-les par des retours à la ligne 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 .
svn rm --keep-local dirname
première. (Ma sortie de statistiques svn était énorme et je me suis cogné la tête pendant un moment.)
svn propset svn:ignore -F file.txt .
svn:ignore
et pas svn::ignore
comme je l'ai fait. Vous pouvez définir des propriétés arbitraires, donc cette dernière sera définie sur OK, et vous pouvez voir et modifier la propriété, mais cela ne fera pas ignorer SVN les fichiers que vous listez.
Voici un exemple de structure de répertoire:
\project
\source
\cache
\other
Une project
fois dedans, vous voyez que votre répertoire de cache n'est pas ajouté et apparaît 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
la valeur de la propriété et .
le répertoire sur lequel vous définissez cette propriété. Il doit s'agir du répertoire parent du cache
répertoire qui a besoin de 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 des propriétés précédemment définies:
svn propdel svn:ignore
dirname
. Par exemple, lors de la frappe svn propset svn:ignore dirname
, si vous autorisez le shell (bash) à remplir le nom du répertoire pour vous, il ajoutera cette barre oblique de fin, vous laissant avec la commande svn propset svn:ignore dirname/
, ce qui n'entraîne pas l'ignorance du dossier. Du moins, ce fut mon expérience.
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 se développe *
et svn add
pense donc que vous souhaitez que tous les fichiers soient ajoutés. Utilisez donc ceci à la place:
svn add --force .
svn add --force *
NE FONCTIONNERA PAS. Utilisez le point, pas l'étoile.
Étant donné que 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 en avez besoin svn delete
, puis modifiez la svn:ignore
propriété.
Je sais que cela semble évident, mais ils ont continué à apparaître comme ?
dans ma svn status
liste, quand j'ai pensé 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 ouvrira l'éditeur de texte de votre choix, puis tapez '*' pour ignorer tout ce qu'il contient, et enregistrer + 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 le chemin du parent, puis tapez le nom du répertoire dans le fichier. Après l'enregistrement, exécutez une mise à jour («svn up»), puis vérifiez le chemin d'accès approprié.
Définissez la svn:ignore
propriété 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 ce faire.
svn ps svn:ignore . 'cachedir'
résulte en cachedir is not under version control
. changer pour svn ps svn:ignore 'cachedir' .
travailler pour moi
Merci pour toutes les contributions ci-dessus. Je voudrais juste partager quelques informations supplémentaires de mes expériences tout en ignorant les fichiers.
Lorsque les dossiers sont déjà sous contrôle de révision
Après l' importation svn et svn co les fichiers, ce que nous faisons habituellement pour la première fois.
Tout le cache d'exécution, les dossiers de pièces jointes seront sous contrôle de version. donc, avant svn ps svn: ignore , nous devons le supprimer du dépôt.
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:
.svn
dossier caché)Lorsque nous avons besoin de plusieurs dossiers à ignorer
svn:ignore
svn pe
devra modifier le fichier texte, et 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 simplement à ceci:
runtime
cache
attachments
assets
svn propset svn:ignore -F .ignorethesefiles .
, qui utilisera le contenu du fichier. J'aime le garder pour que vous sachiez ce qui est ignoré. Les modifications nécessitent un ensemble de suivi.
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 voulez ignorer plus d'un répertoire (disons build/
temp/
et *.tmp
fichiers), vous pouvez soit le faire en deux étapes (ignorer la première et modifier les propriétés ignorer (voir les autres réponses ici)) soit écrire quelque chose comme
svn propset svn:ignore "build
temp
*.tmp" .
sur la ligne de commande.
Si vous utilisez le client SVN particulier TortoiseSVN , puis lors de la validation, vous avez la possibilité de cliquer avec le bouton droit sur les éléments et de sélectionner "Ajouter à 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 nom cache
, tmp
, null
et and_so_on
dans le répertoire courant.
svn propset svn:ignore -F .ignorethesefiles .
vous permettra d'utiliser un fichier. Et comme mentionné, vous avez toujours une autorisation.
J'ai eu des problèmes pour ignorer les répertoires imbriqués; le répertoire supérieur que je voulais ignorer ne s'afficherait pas avec «svn status» mais tous les sous-répertoires le faisaient. C'est probablement évident 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 une manière si hideuse, fausse et difficile d'ignorer les 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
De plus, pour ignorer une liste spécifique de fichiers / noms de chemin, 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 caisses svn avec de nombreux fichiers aléatoires. Quand il est temps de valider, je déplace ces fichiers dans un sous-répertoire «ancien» et je dis à svn d'ignorer «ancien».
Bash oneliner pour plusieurs ignorés:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
Si votre répertoire de projet est nommé / Project et votre répertoire de cache est nommé / 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 à cette page du manuel Subversion pour en savoir plus sur les propriétés.
La réponse de Jason fera l'affaire. Cependant, au lieu de définir svn: ignorez "." sur le répertoire cache, vous souhaiterez peut-être inclure "cache" dans la propriété svn: ignore du répertoire parent , au cas où le répertoire cache ne serait pas toujours présent. Je le fais sur un certain nombre de dossiers "jetables".
POUR GARDER LES RÉPERTOIRES QUE SVN IGNORERA:
svn delete --keep-local path / directory_to_keep / *
svn propset svn: ignorer le chemin "*" / directory_to_keep
Si vous utilisez un frontend pour SVN comme TortoiseSVN, ou une sorte d'intégration IDE, il devrait également y avoir une option ignorer dans le même menu que l'opération commit / add.
Regardez également vos barres obliques de fin. J'ai constaté que l'inclusion images/*
dans mon fichier de paramètres d'ignorance n'ignorait pas ./images/
. Quand je courais, svn status -u
ça montrait encore ? images
. Donc, je viens de changer le paramètre ignorer en juste images
, sans barres obliques. A effectué une vérification d'état et cela l'a effacé.
Résolu avec Eclipse de la manière suivante:
Tout d'abord, faites une synchronisation de votre dossier avec le projet:
équipe -> synchroniser
Dans la vue suivante, vue d'équipe, vous pouvez voir toutes les ressources que vous pouvez valider sur le serveur SVN.
Sélectionnez donc le dossier de ressources de la ressource que vous souhaitez ignorer, puis vous pouvez l'ignorer à l'aide
équipe -> ajouter à
svn:ignore
.
Après cela, 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 synchroniserai et dans la vue de synchronisation, je sélectionnerai le dossier cible. Après cela, je vais sélectionner
équipe-> ajouter
à svn:ignore
puis je confirme la première option dans la fenêtre de confirmation.
Après avoir perdu beaucoup de temps à chercher comment faire cette activité simple, j'ai décidé de publier qu'il n'était pas difficile de trouver une explication décente.
Laissez d'abord la structure de l'échantillon
$ svn st? projet / tronc / cible? project / trunk / myfile.x
1 - configurer d'abord l'éditeur, dans mycase vim export SVN_EDITOR = vim
2 - "svn propedit svn: ignore project / trunk /" ouvrira un nouveau fichier et vous pourrez ajouter vos fichiers et votre sous-répertoire dans le cas type "target" enregistrer et fermer le fichier et fonctionne
$ svn st? project / trunk / myfile.x
Merci.