Domanda

In Subversion, è possibile il check-out solo i file interessati nel corso di una specifica impegnano, a condizione di sapere il numero di revisione specifico?

È stato utile?

Soluzione

Credo che un Subversion check-out può controllare solo una cartella specifica e non i singoli file. Detto questo, il comando:

svn log -r *revision* -q -v

elencherà i cambiamenti associati con la revisione specificata così si potrebbe elaborare l'output di questo comando per aiutare copiare i file da qualche parte dopo aver controllato una cartella di lavoro per la directory completa.

Altri suggerimenti

è possibile ottenere un elenco dei file modificati dopo una revisione specifica in questo modo:

svn diff -r [REVNUM]:HEAD --summarize > fileschanged.txt

quindi creare uno script per cassa ogni file nella fileschanged.txt

Credo che sia possibile che si sta utilizzando il termine "check out" qui nel suo senso CVS, cioè un "svn update". È giusto?

Se è così, allora è possibile aggiornare alla particolare revisione che si desidera:

svn update -r12345

o anche solo quei file a detta revisione:

svn update -r12345 file1 file2 file3

anche se dovrete ottenere l'elenco dei file da svn utilizzando alcuni degli altri suggerimenti.

Lo so che è un po 'offtopic ma io uso TRAC per fare questo ed esporta solo i file modificati tra 2 revisioni in un archivio con i file nella loro struttura di directory originale.

svn checkout funziona solo a livello di directory, non il livello di file. Naturalmente, se tutti i cambiamenti in un insieme di modifiche specifiche erano dalla stessa directory, quindi è possibile eseguire la svn checkout <url> <path> -r<revid>.

È possibile controllare l'elenco dei file infetti utilizzando svn log -q -v -r123 url.

Se davvero solo vuole ottenere i file interessati che è possibile utilizzare svn cat urlToFile -r123 > myfile per ogni file.

Se si utilizza una versione recente di svn è possibile verifica una cartella vuota, quindi aggiornare i file specifici.

dopo aver ricevuto la lista dei file da selezionare,

svn co --depth=empty url dest
cd dest
svn up file1 file2 file3

Modifica: praticamente la stessa soluzione, come risposta accettata qui: un file da Subversion

Ecco un modo per farlo.

svn co svn --depth vuoto: // MyRepository / mytrunk

cd mytrunk

svn diff -c [REVNUM] svn: // MyRepository / mytrunk | grep "Index:" | awk '{print $ 2}' | xargs -n 1 svn aggiornamento --parents

L'output del awk one-liner è un elenco di file è cambiato con i percorsi relativi. Come accennato in precedenza, l'aggiornamento funziona su singoli file, mentre cassa lavora su moduli. L'opzione '--parents' costringe la creazione di directory nella vostra copia di lavoro, se necessario.

Si noti che l'aggiornamento ha anche un opzione '--changelist' (almeno in v.1.7.1 +), ma non sembrano fare ciò che volevo.

Avevo bisogno di una discarica di tutti i file che avevano cambiato in un raggio di una decina di revisioni. L'ho fatto in questo modo (questi comandi potrebbero non essere perfetta, questa è solo una spiegazione generale):

Crea un diff che vi mostrerà i file necessari e scrivere l'elenco in un file di testo

svn diff --summarize -r219:232 > r219-232_Summary.txt

Questo vi darà un file di testo con le linee come

M      path/to/file.php

Massaggiare il formato di file per sostituire all'inizio di ogni riga con un comando 'svn up', invece di 'A' o 'M' o qualsiasi altra cosa.

 sed -i 's/A      /svn up /g' ./r219-232_Summary.txt

... che vi darà le linee come

svn up path/to/file.php

Crea una nuova directory e controllare il vostro progetto ad esso

svn co http://www.repo.net/whatever

Rimuovi tutto nella directory tranne il file .svn (sto usando un relativamente recente client SVN quindi se siete su un vecchio client svn che ha uno svn in ogni directory, non so come che funzionerà)

rm -rf ./*

Copia nel file di testo, renderlo eseguibile, ed eseguirlo come uno script.

cp /path/to/wherever/r219-232_Summary.txt ./r219-232_Summary.sh
chmod 777 ./r219-232_Summary.sh
./r219-232_Summary.sh

Se tutto va come previsto, quindi shell dovrebbe analizzare ogni 'svn up' comando nel file di testo e popolare la directory con solo i file che vi interessano.

Ecco una versione semplice script bash. Ho usato un "modello di ricerca" per rimuovere le linee non necessarie. Revisione, indirizzo repository e percorso di destinazione sono dati come argomenti ma potrebbe essere hardcoded.

#!/bin/bash

REVISION=${1}
REPOSITORY="${2}"
DEST_PATH="${3}"
SEARCH_PATTERN="trunk"
FILES=$(svn log -q -v  $REPOSITORY -r $REVISION | grep $SEARCH_PATTERN)

mkdir -p $DEST_PATH
for FILE in $FILES ; do
    if [[ $FILE == *"$SEARCH_PATTERN"* ]]
    then
          FOLDER=$(dirname $FILE)
          mkdir -p $DEST_PATH/$FOLDER
      svn export -r $REVISION $REPOSITORY/$FILE $DEST_PATH/$FOLDER
    fi
done

#EOF

È possibile ottenere solo l'elenco dei file in una particolare modifica utilizzando

svn log -v -q -r rev

È quindi possibile ripulire gli indicatori sulla parte anteriore della linea con un tubo come

sed -e "s/^ . / /" | egrep -v "Changed paths:|-----"

. Al fine di ottenere solo i file, si sarebbe probabilmente utilizzare svn cat come suggerito da Nikolai.

[A cura di pulizia e semplificare la pipeline sed.]

Siamo spiacenti di far risorgere una domanda morto da tempo, ma non è mai risposto alla mia soddisfazione.

Si può costruire un semplice strumento per fare questo per voi utilizzando svnkit. Ho trovato questo su di esso, e leggermente modificato il codice per le mie esigenze. Sto usando per questo giorno nel mio processo di distribuzione.

Si fa un non esportare un checkout, ma sono sicuro che sarebbe un semplice cambiamento.

svn mergeinfo --show-giri http: //base.com.rev1 http: //base.com.rev2

Questo darà un sacco di revisioni

Ora si vuoi vedere l'elenco dei file in ogni revisione. Quindi prendere la lista di revisione e di copiare nel blocco note o EditPlus e modificare in modo che si inseriscono in una sola riga

svn log -r r33521 -r33762 -3456 -r5623 -q -v >> missedFiles.txt

Nota: ho avuto 118 revisioni e non ero in grado di ottenere l'elenco dei file in modo corretto. Così ho eseguito il comando precedente rompendo in sottoinsiemi di revisione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top