Si je supprime un fichier dans Subversion, comment puis-je consulter son historique et son contenu? Si j'essaye de faire svn cat
ousvn log
sur un fichier inexistant, il se plaint que le fichier n'existe pas.
De plus, si je voulais ressusciter le fichier, dois-je svn add
le récupérer?
(J'ai posé une question spécifiquement sur Subversion, mais j'aimerais aussi savoir comment Bazaar, Mercurial et Git gèrent ce cas également.)
la source
Lorsque vous souhaitez consulter d'anciens fichiers, vous devez vraiment connaître la différence entre:
et
La première version examine le chemin qui est maintenant disponible en tant que http: // serveur / svn / project / file et récupère ce fichier tel qu'il était dans la révision 1234. (Cette syntaxe ne fonctionne donc pas après une suppression de fichier).
La seconde syntaxe obtient le fichier qui était disponible http: // serveur / svn / projet / fichier dans la révision 1234. Donc cette syntaxe DOES travail sur les fichiers supprimés.
Vous pouvez même combiner ces méthodes pour récupérer un fichier qui était disponible dans la révision 2345 en tant que http: // server / svn / project / file mais avec le contenu comme il l'avait en 1234 avec:
la source
./local/file
lorsque le./local
répertoire n'existait pas. Cela peut ne pas être un problème pour les versions plus récentes de SVN.^
notation est pratique: elle fait référence à la racine du référentiel, donc vous pouvez diresvn cat ^/local/file@REV
(en fonction de la distance entre la racine du référentiel et l'URL).svn: E200009: Could not cat all targets because some targets are directories
Tout d'abord, recherchez le numéro de révision où le fichier a été supprimé:
Ensuite, regardez dans log.txt (pas un gourou SVN, donc je ne connais pas de meilleur moyen) pour une ligne avec
et voyez quelle révision c'était. Puis, comme dans les autres réponses, ressuscitez le fichier en utilisant la révision précédente.
la source
Ce n'est rien de particulièrement spécial dans git. Si vous connaissez le nom du fichier, vous pouvez découvrir le changement qui l'a supprimé avec le journal:
Ensuite, vous pouvez utiliser cette validation pour obtenir le fichier tel qu'il existait avant la suppression.
Exemple:
Notez que cela ne remet pas réellement le fichier dans le contrôle de révision. Il dépose simplement le fichier tel qu'il existait dans son état final dans l'emplacement actuel. Vous pouvez ensuite l'ajouter ou simplement l'inspecter ou quoi que ce soit à partir de ce point.
la source
Une solution utilisant uniquement l'interface graphique:
Si vous connaissez le nom du fichier, mais que vous ne connaissez pas son dernier numéro de révision ni même son chemin:
Cela affichera alors uniquement les révisions où le fichier a été ajouté / modifié / supprimé. Ceci est votre historique du fichier.
Notez que si le fichier a été supprimé en supprimant l'un de ses dossiers parents, il n'aura pas d'entrée «supprimé» dans le journal (et donc la solution de mjy ne fonctionnera pas). Dans ce cas, son entrée la plus récente dans le journal filtré correspondra à son contenu lors de la suppression.
la source
Vous obtiendrez le chemin et la révision. Dans git (vérifie également les renommés):
la source
En plus de la réponse de Dustin, si vous voulez juste examiner le contenu, et non le vérifier, dans son exemple, vous pouvez faire:
the: sépare une révision et un chemin dans cette révision, demandant effectivement un chemin spécifique à une révision spécifique.
la source
Utilisez cette commande:
Cela listera toutes les révisions qui ont supprimé tous les fichiers correspondant au modèle. C'est, si vous êtes à la recherche de fichier README, puis tous
/src/README
,/src/README.first
et/some/deeply/hidden/directory/READMENOT
seront trouvés et répertoriés.Si votre nom de fichier contient des barres obliques (chemin), des points ou d'autres caractères spéciaux de regex, n'oubliez pas de les échapper pour éviter les incohérences ou les erreurs.
la source
Si vous ne connaissez pas le chemin d'accès au fichier supprimé, il s'avère que vous pouvez le rechercher dans la commande autrement trop lourde
svn log
:La commande martèle probablement le serveur autant qu'elle le ferait sans l'option de recherche, mais au moins le reste des ressources impliquées (y compris vos globes oculaires) serait un peu soulagé, car cela vous dira dans quelle révision ce fichier a été supprimé. Ensuite, vous pouvez suivre les autres astuces (principalement en utilisant la même
svn log
commande, mais déjà sur un chemin défini).la source
svn log --search _test2.php -v
... svn: option invalide: --search ... :(L'affiche a en fait posé 3 questions ici:
Toutes les réponses que je vois ici concernent les questions 2 et 3.
La réponse à la question 1 est:
Vous devez toujours obtenir le numéro de révision de la date à laquelle le fichier a existé pour la dernière fois, qui est clairement répondu par d'autres ici.
la source
Ah, depuis que j'apprends à utiliser Bazaar, c'est quelque chose que j'ai essayé. Sans succès, il semble que vous ne pouvez pas enregistrer et annoter les fichiers supprimés actuellement ... :-(
A essayé:
mais curieusement (et heureusement) je peux faire:
et:
et comme suggéré dans le bogue ci-dessus:
(ajustez le paramètre
-B
(--before-context
) si nécessaire).la source
Vous devrez spécifier une révision.
la source
Si vous souhaitez consulter l'historique d'un fichier avant qu'il ne soit renommé, comme mentionné dans un commentaire ici, vous pouvez utiliser
la source
Je voulais une réponse, moi-même. Essayez ce qui suit pour ne sortir que les suppressions de
svn log
.Cela filtre la sortie du journal via awk . awk met en mémoire tampon chaque ligne de révision qu'il trouve, ne la sortant que lorsqu'un enregistrement de suppression est trouvé. Chaque révision n'est sortie qu'une seule fois, donc plusieurs suppressions dans une révision sont regroupées (comme dans la norme
svn log
sortie ).Vous pouvez spécifier a
--limit
pour réduire le nombre d'enregistrements renvoyés. Vous pouvez également supprimer le--stop-on-copy
, si nécessaire.Je sais qu'il y a des plaintes concernant l'efficacité de l'analyse de l'ensemble du journal. Je pense que c'est une meilleure solution que grep et son
-B
option "cast a wide net" . Je ne sais pas si c'est plus efficace, mais je ne peux pas penser à une alternativesvn log
. C'est similaire à la réponse de @Alexander Amelkin, mais n'a pas besoin d'un nom spécifique. C'est aussi mon premier script awk , donc ce n'est peut-être pas conventionnel.la source
Supposons que votre fichier a été nommé comme ~ / src / a / b / c / supprimé.fichier
exemple de sortie, trouvé à r90440
recopiez-le vers la version précédente (90439 = 90440-1)
la source
Vous pouvez trouver la dernière révision qui fournit le fichier en utilisant la recherche binaire. J'ai créé un
/bin/bash
script simple pour cela:la source
J'ai écrit un script php qui copie le journal svn de tous mes référentiels dans une base de données mysql. Je peux maintenant faire des recherches en texte intégral sur mes commentaires ou noms de fichiers.
la source