Domanda

Sono curioso di sapere se è corretto copiare una directory che è sotto il controllo della versione e iniziare a lavorare su entrambe le copie.

So che può essere diverso da un VCS all'altro, ma intenzionalmente non ne specifico alcun VCS poiché sono curioso di conoscere casi diversi.

Recentemente stavo parlando con un collega di farlo in SVN.Penso che dovrebbe essere OK, ma non ne sono ancora sicuro al 100%, poiché non so cosa stia memorizzando esattamente SVN nella copia di lavoro.

Tuttavia, se parliamo del mondo DVCS, le cose potrebbero essere ancora più poco chiare, dal momento che ogni copia funzionante è un repository a sé stante.Trovandomi di fronte a questo in BZR ora, ho deciso di porre la domanda.

Modifica successiva:

Alcune persone mi hanno chiesto perché avrei voluto farlo.Ecco tutta la storia:

Nel caso di SVN è stato perché essendo fuori ufficio, la connessione al server SVN era molto lenta, quindi io e il mio collega abbiamo deciso di controllare i sorgenti solo una volta e di farne una copia locale.Questo è quello che abbiamo fatto e ha funzionato bene, ma mi sto ancora chiedendo se è garantito che funzioni o se è semplicemente successo.

Nel caso bzr, ho intenzione di spostare il repository "principale" su un altro server.Quindi stavo pensando di copiarlo lì e iniziare a considerarlo il repository principale.Immagino che la cosa più sicura sia creare un clone.

È stato utile?

Soluzione

In Subversion, ogni cartella .svn ha tutto ciò che è necessario per la cartella che la contiene.E poiché tutti i percorsi locali sono memorizzati come relativi, sei sicuro mentre copi alberi interi o parziali all'esterno dell'albero di checkout originale.Continueranno a funzionare nelle loro nuove case.

Copio spesso i sottoalberi dal mio bagagliaio esterno, trasferisco le nuove copie su altri rami/tag e faccio tutto ciò che è necessario sulle copie locali "clonate".In questo modo, se per qualsiasi motivo dovessi tornare indietro e fare qualcosa nel bagagliaio, avrei una copia indisturbata del bagagliaio nella posizione originale.

Copia di directory controllate dal codice sorgente in altri alberi a fonte controllata, invece, lo sono pericoloso.Se sovrascriverai eventuali cartelle .svn, molto probabilmente danneggerai le copie di destinazione.

Altri suggerimenti

Lo faccio occasionalmente in SVN e non ho riscontrato alcun problema.Credo che in SVN tutto ciò che viene memorizzato sia lo stato originale della directory e un puntatore alla directory del repository da cui proviene.

Quindi in pratica funziona come penseresti che dovrebbe.

  • Se File1 in Copia1 cambia e File2 in Copia2 cambia, entrambi possono eseguire il commit
  • Se File1 in Copia1 cambia e File1 in Copia2 cambia, chiunque esegua il secondo commit avrà un errore e dovrà prima aggiornare/unire.

Per coloro che sono curiosi del motivo per cui ho dovuto copiare, ho avuto problemi con i checkout sulla nostra rete che erano molto lenti quando ho controllato per la prima volta uno dei nostri progetti più grandi.Al contrario, copiare semplicemente da un altro computer sembrava fornirmi gli stessi vantaggi.

In svn, non c'è problema.Puoi semplicemente lavorare con la copia come se avessi effettuato un secondo checkout.

Consiglierei comunque di fare il check-out una seconda volta.Se desideri una copia senza i file .svn, svn export ne creerà una.

Per bzr, se copi semplicemente la directory .bzr in un'altra posizione, funzionerà.Non memorizza alcuna informazione sul percorso in cui si trova o sull'host su cui si trova, quindi puoi copiarlo ovunque e aspettarti che funzioni correttamente.

Suggerirei di no, poiché stai aggirando il meccanismo di controllo del codice sorgente.

Ma forse puoi spiegare il "perché"?

Potresti anche semplicemente controllare due copie funzionanti (almeno con SVN) per dire work/copy1 e work/copy2 e lavorare sulle due versioni in parallelo.

Mi chiedo però cosa stai cercando di ottenere, dal momento che la copia potrebbe non essere la soluzione migliore al tuo problema.

Dipenderà dal VCS.So che in CVS memorizza directory (nascoste) all'interno di ogni directory controllata dalla versione.Questi file vengono, ovviamente, poi copiati con qualsiasi copia di quella directory.

Capita così spesso che NON vuoi copiare quei file nascosti che lo strumento rsync è dotato di un'opzione (-C) per ignorare questi file allo stesso modo di CVS.

Ho avuto qualche grattacapo con SVN quando ho riorganizzato il layout delle cartelle da Visual Studio.Una cartella spostata all'interno di una soluzione sposterà letteralmente la cartella nel filesystem, inclusa quella nascosta .svn cartella.Ciò causa problemi di commit perché il file .svn i dati sono associati al vecchio percorso e non ho trovato un modo per riassociarli al nuovo percorso.SVN clean up funziona bene ma non risolve nulla.SVN switch non ti consente di cambiarlo dopo che la cartella è stata spostata.Sono riuscito a risolvere il problema solo eliminando tutto .svn cartelle all'interno della cartella spostata e delle relative sottocartelle, quindi aggiungere nuovamente la cartella.

Il problema che ho con questa correzione è che perdi la traccia della versione su quei file perché SVN lo vede come nuovo di zecca.Inoltre, non memorizza il contenuto del file in modo altrettanto efficiente memorizzando le differenze rispetto alla versione precedente.

Secondo la documentazione SVN, si consiglia di consentire a svn client per spostare/creare/eliminare tutte le cartelle per mantenere tutto sincronizzato per il prossimo commit.Questo non è sempre accettabile da Visual Studio.Fortunatamente, la maggior parte dei casi problematici vengono rilevati durante il commit-time, in particolare se si utilizza TortoiseSVN.

Per SVN, generalmente funzionerà come altri hanno già affermato.

Se stai copiando tra macchine, probabilmente avrai dei problemi.Ad esempio, se accedi al tuo repository SVN utilizzando l'URL del repository file://, molto probabilmente le cose si interrompono.Lo stesso vale per gli URL http:// o svn:// in cui l'accesso al server potrebbe essere diverso.

Per stare al sicuro, farei semplicemente il checkout nella nuova posizione.Se hai molte modifiche non apportate in una che desideri avere nella nuova directory di lavoro (generalmente una cattiva idea), potresti utilizzare rsync per copiare il codice sorgente senza inserire le directory .svn.

Mi sembra che GIT potrebbe anche soddisfare le tue esigenze, poiché dici di essere disconnesso o di una connessione scadente.GIT ha anche un ottimo supporto SVN, quindi i due sono complementari e ti ritroverai con un bel file system con versione.

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