28 votes

Comment puis-je supprimer un fichier de la version svn sans le supprimer de chaque copie de travail?

Ma situation est que un tas de fichiers sont archivés dans le svn qui sont très ennuyeux d'avoir sous contrôle de code source (en particulier un log4j.properties le fichier), et je voudrais les supprimer de contrôle de version. Je sais déjà comment faire pour supprimer un fichier de la version svn de contrôle dans ma propre copie de travail locale, comme dans cette question, et ce une seule, mais ce n'est pas exactement ce que je cherche.

Le problème est que une fois que j'ai supprimer le fichier avec l' svn rm --keep-local, lorsque toutes les autres utilisateur tire par le référentiel leurs copies locales de log4j.properties va disparaître et leurs environnements en panne. Ce que je veux faire est de supprimer le fichier de contrôle de version dans le dépôt, mais également faire en sorte que quand tout le monde tire dans le référentiel c'est comme si ils avaient utilisé de l' --keep-local sur leurs propres machines, de sorte que la copie existante de leur log4j.properties le fichier de colle autour, mais devient non versionnés.

Est-ce même possible de le faire? Je soupçonne que c'est une fonctionnalité que svn n'a tout simplement pas.

13voto

Colin Kelley Points 139

Le secret est de s'assurer qu'il est sur la liste noire avant de vous engager le supprimer. Si vous le faites dans cet ordre, la suppression ne se propagent pas à d'autres copies de travail.

Nous sommes encore en utilisant svn 1.4 si l' --keep-local option n'est pas disponible. Mais vous pouvez obtenir la même chose en supprimant l'aide d'un chemin d'accès au serveur et a-m le message de validation.

Donc, dans mon exemple, j'ai accidentellement commis un répertoire appelé nbproject. C'est où les développeurs de projet pour l'IDE que nous utilisons (NetBeans). Je ne voulais pas supprimer que de tous les copies de travail ou qu'ils perdent tous leurs paramètres à! Mais cela a fait le tour. Départ à partir du répertoire parent:

$ cd trunk
$ svn propedit svn:ignore .

apporte de la hausse de l'ÉDITEUR

ajouter nbproject sur sa propre ligne et économisez

$ svn commit -m 'Ignore nbproject'
$ svn rm https://.../trunk/nbproject -m 'Remove nbproject from svn'

7voto

Don Kirkby Points 12671

Ce que je fais habituellement dans des situations similaires est de renommer la copie du dépôt de `` ou , et j'ajoute à la liste. Ensuite, chaque utilisateur doit copier ce fichier à `` dans leur copie de travail. Pour le rendre un peu plus convivial, vous pouvez mettre un chèque dans votre script de build qui imprime un message de rappel si elle ne trouve pas la copie locale.

7voto

RedGlyph Points 6046

Si vous avez vraiment beaucoup de ces fichiers, vous pouvez tuer deux oiseaux avec une pierre à l'aide d'un svndumpfilter de l'opération. L'idée est de faire un dump du référentiel sur le serveur, filtrer des fichiers que vous ne souhaitez pas conserver, et charge le résultat dans un nouveau référentiel. Ensuite, vous mettez le nouveau à la place de l'ancien.

Cela doit être fait avec soin, lorsque les utilisateurs n'ont pas accès au référentiel évidemment. Mais il sera en fait de supprimer les fichiers (intéressant quand ils sont gros) au lieu de les laisser dans l'histoire. Comme effet secondaire, la prochaine fois qu'un utilisateur effectue une mise à jour, ces fichiers seront ignorés comme si ils n'ont jamais été dans le référentiel. Nous avons dû faire cela à quelques reprises pour supprimer les fichiers binaires qui n'ont pas leur place.

Lien vers la documentation connexe.

Exemple Simple (la commande offre une plus grande souplesse de cours):

svnadmin create repos_new
svnadmin dump repos | svndumpfilter exclude trunk/log4j.properties | svnadmin load repos_new

Puisqu'elle touche à l'espace de stockage sur le serveur, je tiens à souligner de nouveau que vous devriez prendre des précautions (garder votre ancien référentiel). Pour n'est pas si gênant fichiers de la méthode proposée par N' est moins radicale et préférable.

Pour éviter ce genre de situation, vous pouvez définir la correspondante svn:ignore propriétés dans les répertoires, vous pouvez également encourager les gens à utiliser global ne tient pas compte (ils doivent être définis sur chaque client, malheureusement), ou même utiliser le crochet de scripts pour préventivement refuser catégories de fichiers.

-2voto

franco Points 15
<pre><code></code><p>Je vais le faire</p></pre>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X