Comment "décompresser" un fichier dans svn et / ou git
Ça m'arrive tout le temps. Je version accidentellement un fichier, je ne veux pas être versionné (c.-à-d. développeur/fichiers de configuration spécifiques à la machine).
si je commets ce fichier, je détruirai les chemins sur toutes les autres Machines de développement - elles seront mécontentes.
si je supprime le fichier de versioning, il sera supprimé des autres machines des développeurs - ils seront mécontents.
si je choisis de ne jamais commettre le file, j'ai toujours une caisse "sale" - je suis malheureux.
est un bon moyen de" déversion " un fichier du contrôle des révisions, qui ne causera de mécontentement à personne?
edit: essayer de clarifier un peu: j'ai déjà Commité le fichier vers le dépôt et je veux seulement le supprimer du versioning - Je ne veux spécifiquement pas qu'il soit physiquement supprimé de tout le monde faisant une caisse. J'ai d'abord voulu être ignoré.
réponse: Si je pouvais accepter une deuxième réponse, ce serait ce . Il répond à ma question concernant git - la réponse acceptée concerne svn.
15 réponses
SVN version 1.5 supporte la suppression / suppression d'un fichier d'un dépôt sans perdre le fichier local
tiré de http://subversion.tigris.org/svn_1.5_releasenotes.html
Nouveau --keep-option locale conserve chemin d'accès après la supprimer..
Delete (remove) prend maintenant une option --keep-local pour conserver ses cibles localement, de sorte que les chemins ne seront pas supprimés même s'ils ne sont pas modifiés.
en Git, afin de le supprimer de l'arbre, mais pas du répertoire de travail, ce que je pense est ce que vous voulez, vous pouvez utiliser le drapeau -- cached, c'est-à-dire:
git rm --cached <filename>
si vous "ajoutez" accidentellement un fichier dans svn et que vous ne l'avez pas engagé, vous pouvez inverser ce fichier et il supprimera l'add.
Sans l'avoir essayé...
dans git, si vos modifications n'ont pas été propagées dans un autre dépôt, vous devriez être capable de git rm
le(S) fichier (s) affecté (s), git rebase --interactive
pour réordonner le commit de suppression pour être juste après le commit dans lequel vous avez accidentellement ajouté les fichiers offensants, et puis écraser ces deux commits ensemble.
bien sûr, cela n'aidera pas si quelqu'un d'autre a tiré vos changements.
il semble que vous ayez déjà ajouté et engagé le fichier dans subversion (je suppose que vous utilisez Subversion). Si tel est le cas, il n'y a que deux façons de supprimer ce fichier:
- Marquer le fichier comme supprimé et valider.
- effectuer un
svnadmin dump
, filtrer la révision où vous avez accidentellement commis le fichier et effectuer unsvnadmin load
.
croyez-moi, vous ne voulez pas vraiment pour faire le numéro 2. Cela invalidera toutes les copies de travail du dépôt. Le mieux est de faire le numéro 1, marquer le fichier comme ignoré et s'excuser.
Look up svn: ignore and .gitignore - ces fonctionnalités vous permettent d'avoir des fichiers supplémentaires dans votre caisse qui sont ignorés par votre RCS (lors d'une opération "status" ou autre).
pour les fichiers de configuration spécifiques à la machine, une bonne option est de vérifier un fichier nommé avec un extra ".exemple de" l'extension, c'est à dire. config.xml.sample
. Les développeurs individuels feraient une copie de ce fichier dans config.xml
et le modifieraient pour leur système. Avec svn:ignore ou .gitignore vous pouvez vous assurer que le fichier config.xml
qui n'est pas traduit en version électronique n'apparaît pas toujours aussi sale.
en réponse à votre édition: Si vous supprimez le fichier du dépôt maintenant, alors vos développeurs obtiendront un conflit la prochaine fois qu'ils feront une mise à jour (en supposant qu'ils ont tous changé le fichier pour leur système). Ils ne perdront pas leurs changements locaux, ils seront récupérables de quelque part. S'ils n'ont pas fait de modifications locales, alors leur fichier de configuration disparaîtra mais ils pourront simplement récupérer précédent hors contrôle source et utilisez ça.
pour supprimer un fichier entièrement d'un dépôt git (dites que vous avez commit é un fichier avec un mot de passe, ou accidentellement commit des fichiers temporaires)
git filter-branch --index-filter 'git update-index --remove filename' HEAD
alors je pense que vous devez vous engager, et push -f si c'est dans des branches distantes (rappelez-vous que cela pourrait ennuyer les gens si vous commencez à changer l'histoire du dépôt.. et s'ils se sont déjà retirés de vous avant, ils pourraient encore avoir le fichier)
pour supprimer un fichier déjà sous contrôle source:
git rm <filename>
et ensuite
git commit -m ...
vous devriez ajouter chaque fichier que vous voulez ignorer à la .dossier gitignore. Je vérifie en outre toujours le .gitignore fichier à mon référentiel, donc si quelqu'un vérifie le code sur sa machine, et le fichier est généré à nouveau, il n'a pas "voir" comme "sale".
bien sûr si vous avez déjà commis le dossier et quelqu'un d'autre a obtenu votre sur une autre machine, vous devrez modifier chaque dépôt local pour modifier l'historique. Au moins c'est une solution possible avec git. Je ne pense pas que svn te laisserait faire ça.
si le fichier est déjà sur le dépôt principal (Git) ou sur le serveur (svn), Je ne pense pas qu'il y ait une meilleure solution que de simplement supprimer le fichier dans une autre propagation.
pour SVN, vous pouvez revenir sur des fichiers que vous n'avez pas encore engagés. Dans TortoiseSVN vous juste à droite, cliquez sur le fichier dans la fenêtre et choisissez Rétablir...
Sur la ligne de commande utilisation de svn revert [fichier]
Je ne sais rien de GIT depuis que je ne l'ai jamais utilisé.
autant Que je sache, il n'y a pas de moyen facile de supprimer un fichier de contrôle de version dans svn une fois qu'il est engagé.
vous devrez sauvegarder le fichier ailleurs et le supprimer du contrôle de version. Que copie de sauvegarde de revenir à nouveau.
c'est un système de contrôle de version après tout... ;)
vous pouvez exclure des fichiers de subversion avec le paramètre global-ignore
http://svnbook.red-bean.com/en/1.1/ch07.html#svn-ch-7-sect-1.3.2
consultez la documentation pour plus de détails
I f I choisir de ne jamais s'engager dans le fichier, j'ai toujours un "sale" checkout - je suis malheureux.
en ce qui concerne ce point particulier, vous pourriez vouloir .gitignore
le fichier comme l'autre ont suggéré, ou d'utiliser un schéma comme celui
décrit dans ce
réponse
de la mine.
deux étapes simples dans SVN:
1. Ajouter ce répertoire dans le répertoire parent svn: ignorer la propriété:
svn propedit svn:ignore .
2. Supprimer le répertoire:
svn rm mydir
3. Commettre
veuillez noter que lorsque d'autres développeurs font une svn update , ce répertoire ne sera pas supprimé. SVN juste la décompose plutôt.
vous pouvez désactiver tous les fichiers du répertoire courant avec cette commande. Le bit sed
inverse l'ordre pour que svn puisse le traiter:
find . | sed '1!G;h;$!d'| awk '{print "svn rm --keep-local " }'
comme il a déjà été dit dans d'autres réponses, single file n'est pas en version électronique avec ceci:
svn rm --keep-local yourFileNameXXX
dans Windows, si ce que vous recherchez est de copier le dossier à un autre endroit et de le supprimer de git, de sorte que vous ne voyez plus les icônes, vous supprimez juste le .dossier git. Le. le dossier git est caché, donc vous devez aller à organiser / dossier et les Options de recherche, L'affichage des fichiers cachés option, sous votre dossier principal. Il devrait annuler le versionnement.