2009-02-24 12 views
19

Mi piacerebbe sapere come posso impostare due repository per la mia copia di lavoro. Ho bisogno di un repository nel mio server, in modo da poter effettuare il check-in/out tra due pc; Ho bisogno di un altro repository nel mio pc locale, in modo che possa vedere rapidamente il risultato di diff (il mio server svn è su un host lento condiviso)SVN: una copia di lavoro, due repository?

Come posso farlo?

+0

Questo è utile per progetti open source quando si invia una patch, ma non si desidera attendere che sia approvata prima di costruirne un'altra. – dbkk

+0

La maggior parte dei progetti in questi giorni utilizza Git, quello che ho fatto è stato, clonato un repository GIT e Subversion'ed. Sono in grado di aggiornare Git copy e mantenerlo aggiornato oltre a mantenere le mie modifiche, con meno conflitti però. Pensavo che ti avrebbe dato un consiglio! – asyncwait

+0

possibile duplicato di [Posso avere un progetto in due repository SVN?] (Http://stackoverflow.com/questions/425975/can-i-have-one-project-in-two-svn-repositories) – JasonMArcher

risposta

11

Dai un'occhiata allo repository replication.

È possibile impostare un processo cron per la sincronizzazione periodica da un repository all'altro. Ma devi assicurarti che il commit avvenga solo su uno dei due.

Se i commit avverranno in entrambi i repository, forse un sistema di controllo delle versioni distribuito come git, Bazaar o Mercurial è più impegnativo? Git, per esempio, ti consente anche di estrarre direttamente un repository Subversion.

1

Se la casella locale è linux, è possibile creare una voce crontab per svn aggiornare ogni X minuti per mantenerlo sincronizzato con il server in background. Da lì avresti la copia più recente sul tuo server svn locale da diff.

7

Subversion non utilizza l'accesso alla rete per il suo funzionamento diff. Questo è uno dei grandi vantaggi di Subversion su CVS. Quindi non sono sicuro del perché tu stia incontrando quel problema specifico.

Un'alternativa è utilizzare Git e in particolare git-svn sul PC locale. Ottieni una copia completa dell'intera cronologia del repository sul tuo computer locale, con la possibilità di diffare e visualizzare la cronologia locale (insieme alle molte altre funzionalità che Git ti offre). Quando possibile, ora utilizzo git-svn per accedere ai repository Subversion.

+1

È solo un'operazione locale di diffondere la versione locale alla copia di lavoro originale. Se si sta diffondendo a revisioni precedenti, allora si tratta di un'operazione remota. – Evan

+0

Concesso, la differenza locale è stata eseguita il 90% delle volte, ma la domanda non lo ha specificato in modo definitivo. – Evan

3

Se non è necessario utilizzare SVN, è preferibile utilizzare un sistema di controllo versione distribuito, ad esempio Mercurial o Git. Ogni PC avrà una propria copia del repository e le modifiche possono essere sincronizzate direttamente tra PC o tramite un'altra copia su un server centrale. Poiché ciascun PC ha il repository completo memorizzato localmente, è possibile eseguire diff o qualsiasi altra operazione senza accesso alla rete.

1

Si potrebbe provare a utilizzare svk come client locale anziché svn. Svk è un sistema di controllo della versione pseudo-distribuito che utilizza repository svn.

Dovresti usare svk per configurare un mirror del repository, sincronizzarlo e puoi diffare il contenuto del tuo cuore, con tutte le revisioni che desideri ed è tutto locale.

È anche possibile creare un ramo del repository mirror e utilizzarlo come checkout, quindi i commit sono anche un'operazione solo locale e quando si è pronti con un batch di commit si li spinge allo svn remoto repository (e richiama il back di un altro utente, simile a un comando di svn update).

Due avvertimenti:

  1. essere pronti a utilizzare la riga di comando. Non c'è TortoiseSVK o altra GUI a mia conoscenza.
  2. Ho usato solo svk su linux. Se stai usando Windows, non sono sicuro di quanto sia buono il client.

Oltre a questo, ho utilizzato il bazar, mercuriale o git secondo come altri hanno suggerito. Il Bazaar è probabilmente il più facile da usare e ha una GUI TortoiseBzr che un mio collega dice che è piuttosto solido.

Git è il più difficile da usare. È come il coltellino svizzero-militare che è quasi più largo di quanto sia lungo, con tutti i piccoli gadget e do-papà in esso e appesi fuori, con le molle così strette che di tanto in tanto si taglia un dito aperto cercando di premiare una lama su.

+0

+1 analogia coltello svizzero –

0

Non sono convinto che la replica dell'archivio standard possa darti quello che vuoi. Con questa configurazione, un proxy è sempre di sola lettura e non penso che nella tua situazione sia così.

Dovresti eseguire la funzione svn switch --relocate per cambiare il repository che stai guardando appena prima del check-in. Qualche errore incline.

Quello che stai dopo è un write through proxy.

Se si imposta questo utilizzando Apache e mod_svn_dav sul computer locale, si avrà un repository locale che riceve tutti gli aggiornamenti e che si può diff contro e checkout contro facilmente, ma per il quale tutte le scritture tornare al reale repository che tutti gli altri utilizzano e ricevendo aggiornamenti da.

0

Il risultato di svn diff non dipende dalla velocità della connessione al server; è un'operazione completamente locale.

1

SVN non è adatto per tali casi d'uso. Dovrai modificare le cose qua e là (come scrivere crons). Se vuoi qualcosa che funziona fuori dalla scatola per soddisfare tali casi d'uso, prova GIT.