Commander un fichier de Subversion

“Il n’est pas possible d’extraire un seul fichier. Le meilleur niveau de vérification que vous pouvez faire est au niveau du répertoire.”

Comment contourner ce problème lorsque vous utilisez Subversion?

Nous avons ce dossier dans Subversion où nous gardons toutes nos images. Je veux juste vérifier un fichier (image) de cela. Ce dossier est vraiment volumineux et contient beaucoup d’autres choses dont je n’ai pas besoin maintenant.

La réponse simple est que vous svn export le fichier au lieu de le vérifier.

Mais ce n’est peut-être pas ce que vous voulez. Vous voudrez peut-être travailler sur le fichier et le ré-enregistrer, sans avoir à télécharger de Go de données inutiles.

Si vous avez Subversion 1.5+, effectuez un checkout fragmenté:

 svn checkout   --depth empty cd  svn up  

Pour une version antérieure de SVN, vous pouvez bénéficier des éléments suivants:

  • Vérifiez le répertoire en utilisant une révision dans le passé, quand il était moins plein de courrier indésirable dont vous n’avez pas besoin.
  • Mettez à jour le fichier souhaité pour créer une révision mixte. Cela fonctionne même si le fichier n’existait pas dans la révision que vous avez extraite.
  • Profit!

Une alternative (par exemple si le répertoire a trop de données indésirables dès la révision dans laquelle il a été créé) est de faire une URL -> une copie URL du fichier que vous voulez dans un nouvel emplacement dans le référentiel (il s’agit effectivement d’une twig de travail). du fichier). Consultez ce répertoire et faites vos modifications.

Je ne suis pas sûr que vous puissiez ensuite fusionner entièrement votre copie modifiée dans le référentiel sans une copie de travail de la cible – je n’ai jamais eu besoin de le faire. Si oui, alors faites ça.

Sinon, vous devrez peut-être trouver quelqu’un d’autre qui a tout le répertoire extrait et les amener à le faire. Ou peut-être qu’au moment où vous avez apporté vos modifications, le rest aura fini de télécharger …

Essayez svn export au lieu de svn checkout . Cela fonctionne pour les fichiers simples.

La raison de cette limitation est que la checkout crée une copie de travail, qui contient des méta-informations sur le référentiel, la révision, les atsortingbuts, etc. Ces métadonnées sont stockées dans des sous-répertoires nommés ‘.svn’. Et les fichiers uniques n’ont pas de sous-répertoires.

Utilisez svn cat ou svn export .

Pour cela, vous n’avez pas besoin de récupérer le répertoire de travail, mais vous ne pourrez pas commettre les modifications que vous apportez. Si vous devez apporter des modifications et les valider, vous avez besoin d’un répertoire de travail, mais vous n’avez pas à le récupérer complètement. Vérifiez la révision où le répertoire était encore / presque vide, puis utilisez «svn cat» pour extraire le fichier de HEAD.

Si vous souhaitez afficher le fichier readme.txt dans votre référentiel sans le vérifier:

$ svn cat http://svn.red-bean.com/repos/test/readme.txt
Ceci est un fichier README. Vous devriez lire ceci.

Astuce: Si votre copie de travail est obsolète (ou si vous avez des modifications locales) et que vous souhaitez voir la révision HEAD d’un fichier dans votre copie de travail, svn cat récupère automatiquement la révision HEAD lorsque vous lui atsortingbuez un chemin:

$ cat foo.c
Ce fichier se trouve dans ma copie de travail locale et contient les modifications apscopes.

$ svn cat foo.c
Dernière révision du repository!

La source

Une solution équivalente à TortoiseSVN de la réponse acceptée (je l’avais écrit dans un document interne pour mon entreprise, alors que nous adoptons le SVN) suit. J’ai pensé qu’il serait utile de partager ici aussi:

Extraction d’un seul fichier: Subversion ne prend pas en charge l’extraction d’un seul fichier, il prend uniquement en charge l’extraction des structures de répertoires. (Référence: http://subversion.tigris.org/faq.html#single-file-checkout ). En effet, avec chaque répertoire extrait en tant que copie de travail, les métadonnées relatives aux modifications / révisions de fichiers sont stockées dans un dossier caché interne (.svn / _svn). Ce n’est pas supporté actuellement (v1.6) pour les fichiers uniques.

Autre stratégie recommandée: vous devrez effectuer la partie du répertoire de sortie une seule fois, après quoi vous pourrez directement accéder à vos fichiers uniques. Effectuez une extraction fragmentée du dossier parent et de la structure de répertoires. Une extraction fragmentée consiste essentiellement à extraire uniquement la structure de dossiers sans remplir les fichiers de contenu. Ainsi, vous ne contrôlez que les structures de répertoires et vous n’avez pas besoin de vérifier TOUS les fichiers, comme c’était le cas. Référence: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

Étape 1 : Procéder à l’explorateur de référentiel

Étape 2 : Cliquez avec le bouton droit de la souris sur le dossier parent du référentiel contenant tous les fichiers sur lesquels vous souhaitez travailler et sélectionnez Checkout.

Étape 3 : Dans la nouvelle fenêtre contextuelle, assurez-vous que le répertoire de sortie pointe vers le bon emplacement sur votre PC local. Il y aura aussi un menu déroulant intitulé «profondeur de caisse». Choisissez «Seulement cet article» ou «Enfants immédiats, y compris les dossiers» en fonction de vos besoins. La deuxième option est recommandée car si vous souhaitez travailler sur un dossier nested, vous pouvez procéder directement la prochaine fois, sinon vous devrez suivre à nouveau toute cette procédure pour le dossier nested.

Étape 4 : Le ou les dossiers parent doivent maintenant être disponibles dans votre dossier choisi localement et sont maintenant surveillés avec SVN (un dossier caché «.svn» ou «_svn» devrait maintenant être présent). Dans le référentiel maintenant, cliquez avec le bouton droit sur le fichier que vous souhaitez extraire seul et sélectionnez l’option «Mettre à jour l’élément à réviser». Le fichier unique peut maintenant être travaillé et réintégré dans le référentiel.

J’espère que ça aide.

Vous pouvez le faire en deux étapes:

  1. Vérifiez un référentiel SVN vide avec des méta-informations uniquement:

     $ cd /tmp $ svn co --depth empty http://svn.your.company.ca/training/trunk/sql 
  2. Exécutez svn up pour mettre à jour le fichier spécifié:

     $ svn up http://svn.your.company.ca/training/trunk/sql/showSID.sql 

Une mise à jour au cas où ce dont vous avez réellement besoin peut être couverte en faisant inclure le fichier dans une caisse d’un autre dossier.

Depuis SVN 1.6, vous pouvez créer des fichiers externes , une sorte de lien svn. Cela signifie que vous pouvez avoir un autre dossier avec version contenant un seul fichier. La validation des modifications apscopes au fichier lors de l’extraction de ce dossier est également possible.

C’est très simple, vérifiez le dossier que vous voulez inclure dans le fichier et ajoutez simplement une propriété au dossier

 svn propedit svn:externals . 

avec un contenu comme celui-ci:

 file.txt /repos/path/to/file.txt 

Une fois que vous avez validé, le fichier apparaîtra lors des prochaines extractions du dossier. Fondamentalement, cela fonctionne, mais il existe certaines limitations, comme décrit dans la documentation liée ci-dessus.

Allez dans le repo-browser cliquez avec le bouton droit sur le fichier et utilisez «Enregistrer sous», mais j’utilise TortoiseSVN.

La réponse de Steve Jessop n’a pas fonctionné pour moi. J’ai lu les fichiers d’aide de SVN et si vous avez juste une image, vous ne voudrez probablement pas la ré-enregistrer à moins que vous utilisiez Photoshop, donc l’ exportation est une meilleure commande que la version non versionnée (mais c’est mineur).

Et le –depth ARG ne doit pas être vide mais des fichiers pour récupérer les fichiers dans le répertoire immédiat. Donc, vous aurez tous les champs, pas seulement celui, mais vide ne renvoie rien du référentiel.

  svn co --depth files   

ou

 svn export --depth files   

Comme pour les autres réponses, cat vous permet de lire le contenu qui est bon uniquement pour le texte, pas les images de toutes choses.

Je voudrais juste le parcourir et exporter le fichier unique. Si vous avez un access HTTP, utilisez simplement le navigateur Web pour trouver le fichier et le récupérer.

Si vous avez besoin de le récupérer après l’avoir édité, cela pourrait être un peu plus fastidieux, mais je suis sûr qu’il pourrait y avoir une fonction d’ svn import

 cd C:\path\dir svn checkout https://server/path/to/trunk/dir/dir/parent_dir--depth empty cd C:\path\dir\parent_dir svn update filename.log 

(Modifier le nom de fichier.log)

 svn commit -m "this is a comment." 

Si vous voulez juste un fichier sans informations de révision, utilisez

 svn export  

Avec Subversion 1.5, il devient possible d’extraire (tous) les fichiers d’un répertoire sans vérifier les sous-répertoires (les différents drapeaux –depth). Pas tout à fait ce que vous avez demandé, mais une forme de “moins que tout”.

Si vous souhaitez simplement exporter le fichier et que vous ne devez pas le mettre à jour ultérieurement, vous pouvez le faire sans avoir à utiliser les commandes SVN.

En utilisant le navigateur de référentiel TortoiseSVN , sélectionnez le fichier, cliquez avec le bouton droit, puis sélectionnez ” Copier l’URL dans le presse-papiers “. Collez cette URL sur votre navigateur et après la connexion, vous devez recevoir le téléchargement du fichier.

De cette façon, vous pouvez également sélectionner la révision souhaitée et télécharger une version antérieure du fichier.

Notez que ceci est valide si votre serveur SVN a une interface Web.

En utilisant la technique d’extraction clairsemée, vous POUVEZ extraire un fichier particulier déjà extrait ou existant … avec une astuce simple:

Après avoir extrait le niveau supérieur de votre référentiel en utilisant l’option «Cet article uniquement», dans l’explorateur Windows, vous DEVEZ d’abord cliquer avec le bouton droit sur le fichier à mettre à jour. choisissez le navigateur Repo dans le menu contextuel; trouvez ce fichier dans le navigateur du référentiel et cliquez avec le bouton droit de la souris. Vous devriez maintenant voir “l’élément de mise à jour à la révision” dans le menu contextuel.

Je ne suis pas sûr que ce soit une fonctionnalité non documentée ou simplement un bogue. Il m’a fallu des heures supplémentaires après le travail pour finalement trouver cette astuce. J’utilise TortoiseSVN 1.6.2.

Je voulais vérifier un seul fichier dans un répertoire, qui ne faisait pas partie d’une copie de travail.

Obtenons le fichier à l’URL suivante: http: //subversion.repository.server/repository/module/directory/myfile

 svn co http://subversion.repository.server/repository/module/directory/myfile /**directoryb** 

J’ai donc vérifié le répertoire contenant le fichier cible que je voulais accéder à un répertoire factice (disons etcb pour l’URL se terminant par /etc ).

Ensuite, j’ai vidé le fichier .svn / ensortinges de tous les fichiers du répertoire cible dont je n’avais pas besoin, pour ne laisser que le fichier souhaité. Dans ce fichier .svn / ensortinges , vous avez un enregistrement pour chaque fichier avec ses atsortingbuts, ne laissez donc que l’enregistrement concernant le fichier que vous souhaitez obtenir et enregistrer.

Maintenant, il vous suffit de copier ensuite «.svn» dans le répertoire qui sera une nouvelle «copie de travail». Ensuite, il vous suffit de:

 cp .svn /directory cd /directory svn update myfile 

Maintenant, le répertoire répertoire est sous contrôle de version. N’oubliez pas de supprimer le répertoire directoryb qui n’était qu’une «copie de travail temporaire».

Faites quelque chose comme ça:

 mkdir /repos/test svn cat http://svn.red-bean.com/repos/test/readme.txt > /repos/test/readme.txt 

Fondamentalement, l’idée est de créer le répertoire dans lequel vous voulez récupérer le fichier de SVN. Utilisez la commande svn cat et redirigez la sortie vers le même fichier nommé. Par défaut, le chat affichera des informations sur stdio.

Ce problème est couvert par:

http://subversion.tigris.org/issues/show_bug.cgi?id=823

Il y a un script attaché qui vous permet d’extraire un seul fichier de svn, d’apporter des modifications et de renvoyer les modifications au référentiel, mais vous ne pouvez pas exécuter “svn up” pour extraire le rest du répertoire. Il a été testé avec svn-1.3, 1.4 et 1.6.

Comme aucune des autres réponses n’a fonctionné pour moi, je l’ai fait en utilisant ce hack:

 $ cd /yourfolder svn co https://path-to-folder-which-has-your-files/ --depth files 

Cela créera un nouveau dossier local contenant uniquement les fichiers du chemin distant. Ensuite, vous pouvez faire un lien symbolique vers les fichiers que vous souhaitez avoir ici.