Acquista un file da Subversion

“Non è ansible estrarre un singolo file, il livello più alto di cassa che si può fare è a livello di directory”.

Come posso aggirare questo problema quando utilizzo Subversion?

Abbiamo questa cartella in Subversion in cui conserviamo tutte le nostre immagini. Voglio solo controllare un file (immagine) da quello. Questa cartella è davvero grande e ha tonnellate di altre cose di cui non ho bisogno ora.

La semplice risposta è che si svn export il file anziché verificarlo.

Ma potrebbe non essere quello che vuoi. Potresti voler lavorare sul file e ricontrollarlo, senza dover scaricare GB di junk di cui non hai bisogno.

Se hai Subversion 1.5+, esegui un checkout sparse:

 svn checkout   --depth empty cd  svn up  

Per una versione precedente di SVN, potresti trarre vantaggio da quanto segue:

  • Controlla la directory usando una revisione del passato remoto, quando era meno piena di spazzatura che non ti serve.
  • Aggiorna il file che vuoi, per creare una revisione mista. Funziona anche se il file non esisteva nella revisione che hai estratto.
  • Profitto!

Un’alternativa (ad esempio se la directory ha troppa spazzatura proprio dalla revisione in cui è stata creata) deve eseguire una copia URL-> URL del file che si desidera in una nuova posizione nel repository (in pratica si tratta di una diramazione funzionante del file). Controlla quella directory e fai le tue modifiche.

Non sono sicuro se sia ansible unire la copia modificata interamente nel repository senza una copia funzionante del target, non ne ho mai avuto bisogno. Se è così allora fallo.

In caso contrario, sfortunatamente potrebbe essere necessario trovare qualcun altro che ha l’intera directory verificata e indurli a farlo. O forse quando hai apportato le tue modifiche, il resto avrà finito il download …

Prova a svn export invece di svn checkout . Funziona per singoli file.

Il motivo della limitazione è che il checkout crea una copia di lavoro, che contiene meta-informazioni su repository, revisioni, attributi, ecc. Questi metadati sono memorizzati in sottodirectory denominate “.svn”. E i singoli file non hanno sottodirectory.

Usa svn cat o svn export .

Per questo, non è necessario recuperare la directory di lavoro, ma non sarà ansible effettuare alcuna modifica. Se è necessario apportare modifiche e commit, è necessaria una directory di lavoro, ma non è necessario recuperarla completamente. Controlla la revisione in cui la directory era ancora / quasi vuota, quindi usa “svn cat” per estrarre il file da HEAD.

Se si desidera visualizzare readme.txt nel proprio repository senza verificarlo:

$ svn cat http://svn.red-bean.com/repos/test/readme.txt
Questo è un file README. Dovresti leggere questo.

Suggerimento: se la tua copia di lavoro non è aggiornata (o hai modifiche locali) e vuoi vedere la revisione HEAD di un file nella tua copia di lavoro, svn cat recupererà automaticamente la revisione HEAD quando gli dai un percorso:

$ cat foo.c
Questo file è nella mia copia di lavoro locale e ha le modifiche che ho apportato.

$ svn cat foo.c
Ultima revisione fresca dal repository!

fonte

Segue una soluzione equivalente TortoiseSVN della risposta accettata (l’avevo scritta in un documento interno per la mia azienda mentre stiamo adottando di nuovo SVN). Ho pensato che sarebbe stato utile condividere anche qui:

Controllo di un singolo file: Subversion non supporta il checkout di un singolo file, supporta solo il checkout delle strutture di directory. (Riferimento: http://subversion.tigris.org/faq.html#single-file-checkout ). Questo perché con ogni directory che viene estratta come una copia funzionante, i metadati relativi alle modifiche / revisioni dei file vengono memorizzati come una cartella nascosta interna (.svn / _svn). Al momento non è supportato (v1.6) per singoli file.

Strategia alternativa raccomandata: dovrai eseguire la parte di checkout solo una volta, dopo di che potrai andare direttamente a controllare i tuoi singoli file. Esegui un controllo sparse della cartella principale e della struttura delle directory. Un controllo sparse sta fondamentalmente controllando solo la struttura delle cartelle senza compilare i file di contenuto. Quindi si controlla solo le strutture di directory e non è necessario eseguire il checkout di TUTTI i file come era la preoccupazione. Riferimento: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

Passaggio 1 : procedere al browser del repository

Passaggio 2 : fare clic con il pulsante destro del mouse sulla cartella principale all’interno del repository contenente tutti i file su cui si desidera lavorare e selezionare Cassa.

Passo 3 : All’interno della nuova finestra popup, assicurarsi che la directory di checkout punti alla posizione corretta sul PC locale. Ci sarà anche un menu a discesa etichettato come “profondità di checkout”. Scegli “Solo questo elemento” o “Bambini immediati, comprese le cartelle” a seconda delle tue esigenze. La seconda opzione è consigliata in quanto, se si desidera lavorare su una cartella nidificata, è ansible procedere direttamente la volta successiva altrimenti si dovrà seguire di nuovo l’intera procedura per la cartella nidificata.

Passo 4 : Le cartelle genitore dovrebbero essere ora disponibili nella cartella scelta localmente e ora vengono monitorate con SVN (una cartella nascosta “.svn” o “_svn” dovrebbe essere ora presente). All’interno del repository ora, fai clic con il pulsante destro sul singolo file che desideri estrarre da solo e seleziona l’opzione “Aggiorna elemento da revisionare”. Il singolo file può ora essere lavorato e ricontrollato nel repository.

Spero che aiuti.

Puoi farlo in due passaggi:

  1. Acquista un repository SVN vuoto con solo informazioni meta:

     $ cd /tmp $ svn co --depth empty http://svn.your.company.ca/training/trunk/sql 
  2. Esegui svn up ad aggiornare il file specificato:

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

Un aggiornamento nel caso in cui ciò di cui hai realmente bisogno possa essere coperto dal fatto che il file sia incluso in un checkout di un’altra cartella.

Dal momento che SVN 1.6 è ansible creare file esterni , una sorta di collegamenti svn. Significa che puoi avere un’altra cartella con versione che include un singolo file. È anche ansible il commit delle modifiche al file in un checkout di questa cartella.

È molto semplice, controlla la cartella in cui vuoi includere il file e aggiungi semplicemente una proprietà alla cartella

 svn propedit svn:externals . 

con contenuti come questo:

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

Dopo aver eseguito l’operazione, il file verrà visualizzato nei checkout futuri della cartella. Fondamentalmente funziona, ma ci sono alcune limitazioni come descritto nella documentazione collegata sopra.

Vai al repo-browser, fai clic con il pulsante destro del mouse sul file e usa “Salva con nome”, tuttavia sto utilizzando TortoiseSVN.

La risposta di Steve Jessop non ha funzionato per me. Ho letto i file di aiuto per SVN e se hai solo un’immagine probabilmente non vuoi controllarla di nuovo a meno che tu non stia facendo Photoshop, quindi esportare è un comando migliore del checkout perché non è unversioned (ma è minore).

E il –depth ARG non dovrebbe essere vuoto ma i file per ottenere i file nella directory immediata. Quindi otterrai tutti i campi, non solo quello, ma non restituisce nulla dal repository.

  svn co --depth files   

o

 svn export --depth files   

Per quanto riguarda le altre risposte, cat ti permette di leggere il contenuto che è buono solo per il testo, non per le immagini di tutte le cose.

Vorrei solo sfogliarlo ed esportare il singolo file. Se si dispone dell’accesso HTTP, basta usare il browser Web per trovare il file e afferrarlo.

Se hai bisogno di recuperarlo dopo averlo modificato, potrebbe essere un po ‘più noioso, ma sono sicuro che potrebbe esserci una funzione di 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 

(Modifica nomefile.log)

 svn commit -m "this is a comment." 

Se vuoi solo un file senza utilizzare le informazioni di revisione

 svn export  

Con Subversion 1.5, diventa ansible controllare (tutti) i file di una directory senza estrarre alcuna sottodirectory (i vari –depth flags). Non proprio quello che hai chiesto, ma una forma di “meno di tutti”.

Se si desidera esportare il file e non è necessario aggiornarlo in seguito, è ansible farlo senza dover utilizzare i comandi SVN.

Usando il Browser Repository TortoiseSVN , selezionare il file, fare clic con il tasto destro, quindi selezionare ” Copia URL negli appunti “. Incollare quell’URL nel browser e, dopo aver effettuato il login, ti verrà chiesto di scaricare il file.

In questo modo puoi anche selezionare la revisione desiderata e scaricare una versione precedente del file.

Nota che questo è valido se il tuo server SVN ha un’interfaccia web.

Usando la tecnica sparse check out, puoi controllare un particolare file già estratto o esistente … con un semplice trucco:

Dopo aver effettuato il checkout del livello più alto del tuo repository usando l’opzione ‘this item only’, in Windows explorer, DEVI prima fare clic con il pulsante destro del mouse sul file che devi aggiornare; scegliere Repo Browser nel menu di scelta rapida; trova il file ANCORA nel browser del repository e fai clic con il pulsante destro del mouse. Ora dovresti vedere l’elemento di aggiornamento da revisionare nel menu di scelta rapida.

Non sono sicuro se si tratti di una funzionalità non documentata o semplicemente di un bug. Mi ci sono voluti un prolungato orario di lavoro per trovare finalmente questo trucco. Sto usando TortoiseSVN 1.6.2.

Volevo eseguire il checkout di un singolo file in una directory, che non faceva parte di una copia funzionante.

Prendiamo il file al seguente URL: http: //subversion.repository.server/repository/module/directory/myfile

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

Quindi ho controllato la directory specificata contenente il file di destinazione che volevo ottenere in una directory dummy, (ad esempio, etcb per l’URL che termina con /etc ).

Quindi ho svuotato il file .svn / entries da tutti i file della directory di destinazione che non avevo bisogno, per lasciare solo il file che volevo. In questo file .svn / entries , hai un record per ogni file con i suoi attributi, quindi lascia solo il record relativo al file che vuoi ottenere e salvare.

Ora è sufficiente copiare “” .svn “nella directory che sarà una nuova” copia di lavoro “. Quindi devi solo:

 cp .svn /directory cd /directory svn update myfile 

Ora la directory directory è sotto controllo di versione. Non dimenticare di rimuovere la directory directoryb che era solo una ” copia di lavoro temporanea ”.

Fai qualcosa del genere:

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

Fondamentalmente l’idea è di creare la directory in cui si vuole catturare il file da SVN. Usa il comando svn cat e reindirizza l’output allo stesso file con nome. Per impostazione predefinita, il gatto scaricherà informazioni su stdio.

Questo problema è coperto da:

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

C’è uno script allegato che ti permette di estrarre un singolo file da svn, apportare modifiche e riportare le modifiche al repository, ma non puoi eseguire “svn up” per controllare il resto della directory. È stato testato con svn-1.3, 1.4 e 1.6.

Dal momento che nessuna delle altre risposte ha funzionato per me, l’ho fatto usando questo trucco:

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

Questo creerà una nuova cartella locale che ha solo i file dal percorso remoto. Quindi puoi fare un link simbolico ai file che vuoi avere qui.