Domanda

Per una serie di motivi, la fonte canonica di alcuni file che ho non può essere una copia funzionante del repository (il server Subversion è dietro un firewall inaccessibile e i dati non esistono nativamente nel file system in la mia struttura preferita). Quindi, ho scritto uno strumento che scarica i dati, genera una struttura di directory da esso e quindi utilizza SharpSvn per importare il risultato nel repository. Funziona & # 8230; la prima volta. La seconda volta, ovviamente, esiste già una directory con quel nome nel repository e non posso importarla di nuovo.

Invece, potrei:

  1. Elimina la directory, quindi import. Non l'ho provato, ma oltre a sembrare stupido, probabilmente cancella anche la cronologia delle revisioni dei rispettivi file, considerando i nuovi come completamente diversi.
  2. Verifica se la directory esiste, controlla, elimina in remoto i file che non esistono più nella fonte canonica, quindi sostituisci il resto e esegui il commit. Probabilmente funzionerebbe, ma sembra soggetto a errori e inutilmente difficile.

Il mio presupposto è corretto che l'eliminazione dei file segnerà quelli nuovi allo stesso modo dei file diversi ? C'è un modo più semplice del secondo approccio?

È stato utile?

Soluzione

Per 1), non eliminerà la cronologia delle revisioni, ma i nuovi file saranno trattati come completamente estranei a quelli precedenti. Tuttavia, potresti ancora recuperare i vecchi file.

Per 2), sarebbe il modo consigliato. Ma dopo aver "svn eliminato" i file esistenti e aver aggiunto quelli nuovi, devi anche "svn aggiungere" quei nuovi file prima di eseguire il commit.

Ma sembra che dovresti considerare di usare lo script svn-load-dirs.pl. Puoi leggere questo nel libro Subversion, capitolo " Filiali del venditore ".

Altri suggerimenti

Subversion ha una connessione libera con i file. Per i file all'interno di una cartella, è possibile eseguire facilmente un get / update, apportare modifiche enormi (tra cui l'eliminazione, la sostituzione o l'aggiunta di file), quindi eseguire il commit delle differenze. Tale comportamento a livello di file è l'utilizzo tipico di Subversion.

Le directory sono leggermente diverse. Subversion memorizza le informazioni sul repository a livello di cartella. Quindi, se crei una nuova cartella, non avrà automaticamente una connessione a Subversion. (Usando qualcosa come TortoiseSvn, si occupa di molto di questo per te.)

Se stai per aggiungere ed eliminare directory durante il processo di generazione, avrai alcuni problemi leggermente diversi rispetto ai file stessi. Tuttavia, puoi comunque raggiungere il tuo obiettivo tramite la riga di comando, SharpSvn, TortoiseSvn o altri strumenti simili.

Dato che non puoi sovrascrivere le directory o distruggerai la directory .svn e perderai tutte le informazioni del repository, devi copiare i file ma creare solo nuove directory. Ecco come lo farei, dall'interno della copia di lavoro di Subversion che vuoi aggiornare:

(cd <newdirectory> ; tar -cf - * ) | tar -xf -

Concesso hai bisogno di un sistema Unix-y. Dovrebbe funzionare con Cygwin , a meno che Windows non faccia qualcosa di particolarmente bizzarro con la sovrascrittura delle cartelle a livello di sistema.

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