2012-11-30 4 views
5

Sto lavorando a un sito web e cambio costantemente dalla modalità allo sviluppo (dove il codice ha ogni URL che punta a localhost, il database è denominato "progetto", l'utente "root", password vuota, ecc.) a produzione modalità (dove tutto è impostato per funzionare nel mio hosting, password reali, URL reali, ecc.) e recentemente ho iniziato a utilizzare Git.Dove sono memorizzati i rami Git?

Ora, mi piacerebbe creare un ramo che è pronto per il codice per essere caricato sul mio hosting, quindi non devo fare una copia e cambiare manualmente tutto ogni volta che voglio aggiornare il mio sito web. Quindi, se apporto una modifica al codice e eseguo il commit nel ramo master, questo si rifletterà nel codice per il caricamento senza modificare altre cose.

quindi sarebbe:

Master -> ReadyForUpload 

Quindi la mia domanda è, quando si usano Git, è ogni ramo memorizzati in storage fisico come una directory con tutti i file in esso? È possibile esportare un ramo in una directory?

Sto usando Git extensions per Windows, a proposito.

risposta

6

No. Alcuni altri sistemi di controllo versione (ad es. Subversion) memorizzano i rami come sottodirectory. In git hai un'area di lavoro e cambia il ramo su cui lavori all'interno,

es.

git branch ReadyForUpload 
git checkout ReadyForUpload 

Nulla sembra cambiare, ma ora si sta lavorando nel ramo ReadyForUpload.

se poi fare alcuni cambiamenti e li impegnano e si fa un

git checkout Master 

si sarà di nuovo sul masterbranch ei cambiamenti nella ReadyForUpload sono andati (vale a dire, appena riposto)

Naturalmente, se per qualche motivo preferisci avere entrambe le filiali disponibili contemporaneamente, puoi clonare il tuo repository in un'altra directory e far controllare l'altro ramo - usando git pull o git push per sincronizzarli, laddove applicabile.

+0

Oh, così per esempio, se volevo fare un aggiornamento al mio sito Dovrei semplicemente clonare il ramo 'ReadyForUpload' in un'altra directory, caricarlo sul mio hosting e quindi cancellare la directory temporale che ho creato? – federicot

+0

sì, questo è un modo possibile per farlo. – MortenSickel

+0

Grazie per la risposta! – federicot

3

è ogni ramo archiviato nella memoria fisica come una directory con ogni file in esso?

La risposta è no!

È possibile esportare un ramo in una directory?

Sì. Esistono diversi modi per eseguire un'esportazione. ma se intendi apportare piccole modifiche/investigazioni su quel ramo e spesso vorrai lavorare su quel ramo perché i problemi di produzione disturbanti si manifestano insieme al tuo sviluppo (nel ramo principale).Vi suggerisco di fare un altro clone dall'origine

Per esempio se il concordato centralmente su di origine è è git://github.com/my_org/my_proj.git

probabilmente si avrebbe lo sviluppo WD clonato con

git clone git://github.com/my_org/my_proj.git 

allora si dovrebbe avere una produzione

git clone git://github.com/my_org/my_proj.git my_proj_production 
cd my_proj_production 
git checkout -b release_branch 
git push origin release_branch 

in my_proj_production si dovrebbe modificare il proprio degli URL, password, ecc in modo da riflettere la produzione s SITUAZIONE. Poi ogni volta che si deve unire le cose dallo sviluppo (master) alla produzione (release_branch) si deve in my_proj dir fare un git push e in my_proj_production dir farai

git remote update 
git merge origin/master 

La prima riga fa in modo di ottenere le modifiche da repo remoto al vostro HDD locale (come file di piccole dimensioni sotto .git/objects, il secondo comando assicura che le modifiche apportate sono fondono nella vostra release_branch (e gli URL, le password, ecc non saranno reintrduced nel vostro release_branch).

si prega di commento, se non hai (ancora) un repository centrale e adatterò la risposta per riflettere quella situazione.

+2

Dove/come vengono effettivamente archiviati i rami? –

+0

I settori sono memorizzati come diff all'interno della sottodirectory .git, vale a dire git (più o meno) memorizza solo le informazioni necessarie per ricreare quel ramo da un altro punto conosciuto. Cioè se hai appena creato un nuovo ramo (che quindi è identico al tuo ramo precedente) git memorizza solo che il nuovo ramo esiste e il punto da cui è derivato. – MortenSickel

0

Se si è nuovi a Git, è possibile iniziare con git flow. Ti dà un bel flusso di lavoro per mantenere un ramo master e un ramo develop senza entrare nella complessità del git

leggere di più here

+0

Il flusso di Git sembra piuttosto intimidatorio per qualcuno che è nuovo di git! Preferisco di gran lunga lavorare con una GUI come "gitbox" - questo nasconde la maggior parte delle complessità di Git (ma sono ancora disponibili) e ti dà solo un pull e un pulsante. È un buon modo per imparare le basi di git. – Kokodoko