2009-02-02 11 views
7

Per la programmazione nel mio tempo libero, ho sia un desktop che un laptop (entrambi i Mac, anche se dubito che faccia la differenza). Ho VMware su entrambi, con le immagini di Linux su cui eseguire il mio codice. Sono immagini identiche, quindi ho lo stesso ambiente in entrambi i posti.Controllo versione per coordinarsi con te stesso

Il trucco è che mi piace usare il controllo di versione per TUTTA la mia codifica, anche quando non sto coordinando con qualcun altro. Voglio vedere la versione più recente del mio codice su qualsiasi sistema che sto usando.

Non voglio dipendere dall'avere accesso alla rete in qualsiasi momento - potrei codificare da qualche parte senza wi-fi (sì, è raro, ma alcuni posti sono ancora nell'età della pietra). Sto cercando di usare git, ma qualcosa come SVN farebbe anche se avessi il repository disponibile localmente. O forse il portatile diventa il server SVN e il desktop lo accede.

Qualcuno ha già fatto questo genere di cose? Eventuali trappole/insidie ​​/ lezioni apprese?

risposta

8

Bene, consiglierei sicuramente di guardare un sistema distribuito invece di Subversion. Ciò soddisferà la tua esigenza di non dipendere dall'accesso alla rete e probabilmente si adatta meglio al tuo flusso di lavoro. Le principali scelte per un VCS distribuito sono git, Mercurial (noto anche come "hg") e Bazaar (o "bzr"). La mia preferenza personale è Mercurial, ma sono tutti abbastanza comparabili.

Tuttavia, una cosa che Mercurial ha sugli altri (ed è qualcosa che sarebbe molto utile nella tua situazione) è il comando "hg serve". Puoi leggerlo qui: Informal sharing with "hg serve". Fondamentalmente imposta un server (temporaneo) molto semplice per consentire di estrarre il repository attraverso la rete. Lo uso sempre per mantenere il codice sincronizzato tra desktop e laptop. Se ho apportato alcune modifiche al laptop, ho appena eseguito "hg serve" e poi "hg pull" dal desktop, o viceversa se ho lavorato sul desktop.

Quindi, in generale, suggerirei sicuramente di esaminare i sistemi distribuiti, penso che faranno il miglior lavoro di impostare il tipo di ambiente desiderato. C'è una buona quantità di informazioni disponibili sul web sull'utilizzo di tutti loro. Non ho trascorso molto tempo con gli altri, ma se vuoi provare Mercurial, this free online book covers pretty much everything you'll need to get started.

+0

Sembra che tu sia l'unica persona che in realtà ha fatto questo in qualche modo. La mia preoccupazione di andare veramente distribuito è che dovrò unirmi avanti e indietro tra i computer, che è una ricetta per me dimenticando di unire le cose. Qualche correzione magica per quello? – edebill

+0

Bene, qualsiasi VCS richiederà di ricordare di eseguire il commit/l'aggiornamento, quindi non c'è davvero nulla che possa sbarazzarsene. L'unione di tutti i sistemi DVCS è molto buona, quindi non dovresti davvero considerare questo come un compito difficile. –

+0

A meno che per qualche motivo non abbiate cambiato lo stesso codice in un modo diverso su macchine separate (e probabilmente la vostra memoria è migliore di quella), non ci dovrebbero mai essere conflitti di fusione e tutto verrà unito automaticamente senza alcuna interazione necessaria . –

7

Consiglio vivamente git se non si ha accesso alla rete in ogni momento.

Tuttavia, se è ancora necessario lavorare con i repository di subversion, è comunque possibile ottenere il meglio da entrambi i mondi utilizzando git-svn.

+0

Git-svn o solo un repository git off-site (come github) è possibile inviare a. Probabilmente vorresti avere un back-up in un posto diverso dal tuo laptop. –

+0

Non sono d'accordo sul fatto che ottieni il meglio di git quando usi git-svn. È molto meglio che provare ad usare svn senza git, ovviamente. – Dustin

2

Qualsiasi cosa tu faccia, assicurati che il tuo repository sia regolarmente sottoposto a backup. Questo è particolarmente vero se il tuo laptop ospita il tuo repository. Dovrai anche pensare a cosa succede se il tuo laptop viene rubato. Potrebbe essere meglio usare git e lasciare il repository sul desktop.

+0

Farei sicuramente qualcosa per assicurarmi che sia stato eseguito il backup offsite. Forse un cron job per sincronizzarlo frequentemente con il mio iDisk, o copiare il repository sul mio desktop (che viene eseguito il backup) regolarmente. – edebill

+0

Questa è la cosa bella di Mercurial ... ogni computer ha un "clone" del repository. – Pete

0

SVN diventa piuttosto scomodo da utilizzare quando non si ha accesso al repository. Dal momento che eseguo tutto il mio sviluppo su un solo computer, sono andato bene con SVN, ma potresti non trovarlo così facile. Da quello che ho sentito, questo è esattamente il tipo di problema che git è progettato per affrontare - ti permette di fare commit che sono registrati nella tua copia locale, quindi caricarli tutti nel repository quando si accede ad esso.

0

Si potrebbe prendere in considerazione ottenere un host SVN - sono abbastanza abbordabile e prendere il mal di testa lontano da avere a che fare con la propria connettività di rete:

http://www.google.com/search?hl=en&q=svn+hosting&btnG=Google+Search&aq=f&oq=

+0

Oppure ottieni un normale host web che offra SVN come funzionalità. – Kibbee

+0

Sfortunatamente, questo non funzionerà se sto lavorando da qualche parte senza un accesso di rete immediato. – edebill

1

In alternativa al Git, che è già stato accennato, raccomando altamente Bazaar. È un VCS distribuito come git, con alcune differenze però.

Per un confronto (un po 'sbilanciato, ovviamente), controllare this page.

+0

Vorrei secondo. Il Bazar è adatto ai miei gusti per l'usabilità meglio del git, ma è effettivamente un lavaggio, penso. –

+0

@Darcy, d'accordo. Una differenza degna di nota, tuttavia, è lo sforzo fatto per supportare Windows (che però non sembra rilevante per l'OP). –

+0

No. Non rilevante. Ho bisogno di supporto per MacOS e supporto per Linux, però. Sembra che dovrei investigare su Mercurial e Bazaar (ho già provato git). – edebill

1

Se sei alla ricerca della semplicità (configurazione), SVN va bene. Funziona senza connettività di rete perché l'intera cronologia è conservata su ogni PC sincronizzato e SVN + SSH è TRIVIAL da configurare. Usa l'abilità incorporata di SSH per eseguire un programma, quindi se hai un server SSH configurato, devi solo creare un repository e tutto funziona ... nessun setup del server.

Questo può anche fungere da backup poiché si dispone dell'intero repository su tutti i computer con cui si esegue la sincronizzazione.

Anche i sistemi di controllo di versione distribuiti sono interessanti, ma penso che l'investimento iniziale sia più elevato ma ha il vantaggio che è possibile salvare nel repository senza essere connessi (non troppo critico se si lavora da soli, ma si è in grado di checkpoint e rollback ovunque possono avere i suoi vantaggi).

+0

Questa semplicità faceva parte del motivo per cui l'esecuzione di un repository SVN sul laptop sembrava allettante. Dato che sarei sempre stato locale o garantito per avere il portatile disponibile, non ci sarebbe mai stato un problema. Con un solo repository non avrei dovuto fondermi con me stesso. – edebill

+0

Prova SVK, ho sentito che dovrebbe essere quasi altrettanto semplice, ma anche avere sempre un repository locale. Nessuna esperienza di prima mano però. –

0

Il mio VCS preferito è darcs dal momento che supporta la patch cherry-picking. È un VCS distribuito ed è MOLTO facile da usare.

+0

git e mercurial hanno un eccellente supporto anche per il cherry-picking.:) – Dustin

+0

Ma per quanto ne so, ciò non è possibile con git e hg: repo A contiene patch 1, 2, 3 e 4; il repository B contiene patch 1, 5, 6; il repo C non contiene nulla. Con gli darcs ora posso tirare la patch 1, 2, 4 da A e 6 da B, in modo che ora C contenga 1,2,4,6 e A e B rimangano invariati. –

+0

Ah e un'aggiunta importante: in un secondo momento posso rimuovere qualsiasi patch, ora solo l'ultima! Non ci sono versioni in Darcs. –