2009-06-25 3 views
5

Mi sono dipinto in un problema con un progetto Subversion di CodePlex: per questo ho chiesto aiuto here. Ho un repository locale e CodePlex ha il suo repository Internet per il progetto, e i due non si mescolano :-(.Come utilizzare un respositore di Internet Subversion durante lo sviluppo del codice?

Ma il mio caro papà defunto mi diceva che la differenza tra un uomo intelligente e un uomo saggio è che l'uomo saggio non entra nella trappola per cui un uomo intelligente trova la via d'uscita. In altre parole: devo aver fatto qualcosa di sbagliato Quindi:

Dire che sei un gruppo di pochi sviluppatori. Subversion controlla il progetto su Internet che vuoi iniziare a modificare, vuoi lavorarlo localmente, cambiandolo in base alle tue esigenze, vuoi il controllo della versione locale, vuoi controllare quali modifiche di Internet accettare al tuo repository - quelle che sono rilevanti e importante e non causare rumore. Vuoi impegnare su Internet alcuni dei tuoi luoghi l cambia - quelli che sei sicuro che siano stabili e che siano rilevanti per l'intera comunità.

Questo metodo di operazione mi sembra di buon senso, ma poi non ho mai lavorato a un progetto open source. Quindi: 1. È davvero un metodo di funzionamento comune e 2. Come si fa a farlo con Subversion senza mettersi nei guai?

+0

sembra che la risposta comune è per me di utilizzare un sistema di controllo distribuito di revisione, come Git. Ciò significa tuttavia che stai suggerendo di lavorare con CodePlex non nel modo in cui sono programmate le God CodePlex. Capisco e ringrazio tutti voi. Tuttavia, il mio MO è così diverso dalla norma? Le risposte alle mie due domande sopra sono le seguenti: 1. NO e 2. Non è possibile? In che modo tutti gli altri lavorano con CodePlex/Subversion in modo che non debbano usare Git? – Avi

risposta

1

Assorbire le modifiche da una fonte esterna ("fornitore scende") nel proprio repository locale è trattato nel libro SVN nella sezione Vendor Branches.

In alternativa, è possibile utilizzare semplicemente il comando di unione per selezionare le revisioni da una cartella nel repository A e applicare tali modifiche a una copia di lavoro di una cartella nel repository B. Il comando di unione sembra avere qualche supporto per questo (a almeno nell'ultima versione), quindi probabilmente funziona come l'unione tra i rami locali (meno il tracciamento automatico delle unioni).

0

Supponiamo che tu sia un gruppo di pochi sviluppatori . C'è un progetto controllato Subversion su Internet che si vuole iniziare a modificare. Si desidera che lavorino su di esso localmente, modificandolo in in base alle proprie esigenze. Si desidera il controllo della versione locale . Si desidera controllare quale Internet cambia per accettare il repository - quelli che sono rilevanti e importanti e non causare il rumore .

si vuole essere in grado di lavorare a livello locale, e il ramo o fondere senza pensarci due volte. Stai parlando fondamentalmente del controllo della versione distribuita. Subversion non supporta questo. Dovresti invece usare qualcosa come Mercurial o Git.

0

Sembra che si dovrebbe cercare di creare un ramo per il codice nel repository originale. Puoi unire dal tronco al tuo ramo, o viceversa, come vuoi.

L'altra opzione è di esportare i file dal repository e aggiungerli al proprio repository. Ma sarà solo un dolore per il futuro.

+0

Come posso diramare il repository originale (CodePlex)? Non lo "possiedo". – Avi

0

Questo è molto più semplice con i sistemi di controllo del codice sorgente distribuiti, come git.

quindi si può avere un repository git locale, usare git-svn per ottenere aggiornamenti dal repository pubblico e avere il proprio ramo locale con le proprie modifiche speciali.

Vedrete molti progetti come questo (che si estendono progetti OSS sovversione-ed usando git) su github - per NHibernate, per il progetto Castello, ecc

se si deve attaccare con SVN, è possibile gestire il proprio cambiare usando un set di file patch sul trunk pubblico. se vuoi cose nuove dal trunk, crea una patch con le tue modifiche, ripristina, aggiorna il trunk più recente e poi applica la patch selettivamente.

+0

Il tuo ultimo paragrafo mi ha totalmente confuso per un minuto. Rileggendolo per la terza volta, inizia a dare un senso. Grazie! Avi – Avi

0

Io in genere mantenere una copia che ho portato giù da SVN, che contiene solo il codice aggiornato dal repository e il codice che sto lavorando su e intenzione di commettere di nuovo.

Quando si lavora su una nuova funzionalità, vorrei esportare l'intero copia in una nuova copia sulla mia macchina, poi fare + testare i cambiamenti necessari. Se ho deciso di voler ripristinare le modifiche, uso una sorta di strumento di unione (WinMerge è bello se sei su Windows), per unire le mie modifiche alla cartella originale SVN aggiornata che ho portato giù.

Questo tiene tutto abbastanza pulito, come io sono in grado di evitare in modo relativamente facile commettere codice involontariamente. Sono anche in grado di cancellare facilmente le modifiche semplicemente facendo una nuova copia della mia cartella SVN-base 'aggiornata'. Il rovescio della medaglia è che rende il lavoro su più funzionalità che non ho intenzione di impegnare in una volta relativamente ingombrante.

1

Subversion è di per sé un sistema di controllo di revisione centralizzato. Dalla tua descrizione, sembra che tu voglia un sistema di controllo di revisione distribuito. In un tale sistema le persone possono svilupparsi localmente e quindi scambiare le loro unità di lavoro (chiamate changeset) tra loro. I sistemi di controllo di revisione distribuiti hanno un eccellente supporto per la fusione dei rami per supportare questo.

Sto utilizzando io stesso Mercurial e lo consiglierei a un utente di Subversion poiché molti dei suoi comandi sono simili ai comandi in Subversion. Altri strumenti popolari in questa categoria includono Git e Bazaar.

Problemi correlati