Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Programmazione/Git/RepositoryRemoti"
Differenze tra le versioni 1 e 11 (in 10 versioni)
Versione 1 del 06/12/2014 12.22.06
Dimensione: 12691
Autore: jeremie2
Commento:
Versione 11 del 23/11/2023 03.12.10
Dimensione: 14145
Autore: jeremie2
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 3: Linea 3:
<<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?f=46&t=590616"; rilasci="14.04")>> <<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?f=46&t=590616"; rilasci="19.10")>>
Linea 13: Linea 13:
Verrà creato un nuovo repository '''gitproject_2''' che simulerà il repository locale, mentre '''gitproject''' simulerà il repository remoto. Verranno create nuovi repository ('''gitproject_2''', '''gitproject_3''', ecc..) che simuleranno repositori locali, mentre '''gitproject''' simulerà il repository remoto. Saranno quindi passati in rassegna i metodi di sincronizzazione.
Linea 17: Linea 17:
 0. Creare una nuova cartella in cui vogliamo creare il nuovo repository:{{{ In questo esempio verrà creato il progetto locale '''gitproject_2''' sul quale verrà '''clonato''' il repository "remoto" '''gitproject'''.

 0. Creare una nuova cartella in cui vogliamo creare il nuovo repository e spostarsi all'interno:{{{
Linea 35: Linea 37:
}}}

Il log e' '''quasi''' uguale a quello originale. Si nota la presenza di altri branch:

 * origin/master
 * origin/HEAD
 * origin/gp-1

Questi sono i branch del repository remoto, che sono materialmente quelli creati nel repository originale. '''origin''' e' il nome di default che Git da ad un repository remoto, che possono essere elencati col comando '''remote'''

{{{
}}}Il log è '''quasi''' uguale a quello [[Programmazione/Git/Branch#log_master|originale]]. Si nota la presenza di altri branch:
  * '''origin/master'''
  * '''origin/HEAD'''
  * '''origin/gp-1'''
 Questi sono i branch del repository remoto, che sono materialmente quelli creati nel repository originale. '''origin''' è il nome di default che '''Git''' da a un repository remoto,.
 0. Attraverso il comando '''remote''' elencare i repository remoti:{{{
Linea 47: Linea 44:
}}}che restituirà:{{{
Linea 48: Linea 46:
}}}

Questo e' l'elenco dei repository remoti:

 * E' solamente uno perche' al momento abbiamo clonato uno gia' esistente
 * Si, Git puo' avere diversi repository remoti associato allo stesso repository locale. Questo permette molta flessibilita', ma al momento ignoriamo questo aspetto.
 
Abbiamo invece solamente un branch locale, '''master''', sincronizzato con il master remoto (piu' precisamente nel punto in cui punta HEAD remoto):

{{{
}}}Allo stato attuale ne risulta uno solo, quello clonato.

{{{#!wiki note
'''Git''' puo avere più repository remoti associati al repository locale. Questo permette molta flessibilità, ma al momento verrà ignorato questo aspetto.
}}}

 0. Attraverso il comando '''branch''' elencare i branch:{{{
Linea 59: Linea 54:
}}}che risulterà:{{{
Linea 60: Linea 56:
}}}

== Aggiunta manuale remote ==

Il secondo metodo consiste nell'aggiungere manualmente il repository remoto a quello attuale.

Creiamo quindi un repository vuoto:

{{{
mkdir /home/user/gitproject_3
cd /home/user/gitproject_3
}}}solamente un branch locale, '''master''', sincronizzato con il master remoto (più precisamente nel punto in cui punta HEAD remoto).

= Sincronizzazione manuale =

In questo esempio verrà creato il progetto "locale" '''gitproject_3''' nel quale verrà inizializzato il repository e in un secondo momento sarà sincronizzato manualmente con il repository "remoto" '''gitproject'''.

 0. Creare una nuova cartella in cui vogliamo creare il nuovo repository e spostarsi all'interno:{{{
mkdir ~/gitproject_3
cd ~/gitproject_3
}}}
 0. Inizializzare il repository:{{{
Linea 72: Linea 68:
Initialized empty Git repository in /home/user/gitproject_3/.git/
}}}

Se vediamo la lista dei repository remoti, ovviamente e' vuota:

{{{
}}}
 0. Tramite il comando '''remote add''' aggiungere il repository remoto:{{{
git remote add origin ~/gitproject
}}}
 0. Attraverso il comando '''remote''' elencare i repository remoti:{{{
Linea 79: Linea 74:
}}}

Aggiungiamo quindi il repository remoto, tramite il comando '''remote add''':

{{{
git remote add origin /home/user/gitproject
git remote
}}}che restituirà:{{{
Linea 88: Linea 77:

Proviamo a vedere il log:

{{{
git lg
 0. Consultare il log:{{{
git lg
}}}il cui output sarà{{{
Linea 94: Linea 81:
}}}

Il repository e' vuoto!

{{{
}}}'''Il repository è vuoto!''' Questo perché è stato aggiunto il repository remoto, ma non è ancora stata fatta la sincronizzazione. Il comando:{{{
Linea 100: Linea 83:
}}}mostra la seguente situazione dei file nella cartella:{{{
Linea 105: Linea 89:
Questo perche' e' stato aggiunto il repository remoto, ma non abbiamo ancora fatto la sincronizzazione. Per poter sincronizzare il repository locale con quello remoto, occorre scaricare le modifiche. Questo viene fatto in due modi.

= Fetch e Pull =

Si vuole prendere il contenuto del repository remoto e sincronizzare quello locale, in maniera da poter prendere le modifiche remote. Il comando {{{fetch}}} permette di scaricare in locale le modifiche remote, ma '''NON''' di applicarle.

{{{
Per poter sincronizzare il repository locale con quello remoto, occorre scaricare le modifiche. Questo viene fatto in due modi.

== Primo metodo - Fetch + Merge ==

Si vuole prendere il contenuto del repository remoto e sincronizzare quello locale, in maniera da poter prendere le modifiche remote. Il comando '''fetch''' permette di scaricare in locale le modifiche remote, ma '''NON''' di applicarle.

 0. Scaricare localmente le modifiche remote:{{{
Linea 113: Linea 97:
}}}Il comando restituirà:{{{
Linea 121: Linea 106:

Abbiamo scaricato le modifiche remote, ma se guardiamo il contenuto della cartella, risulta essere ancora vuota:

{{{
 0. Il controllo dei file: {{{
Linea 126: Linea 108:
}}}il cui output sarà:{{{
Linea 129: Linea 112:
}}}

Questo perche' abbiamo scaricato le modifiche (che stanno dentro .git) ma non abbiamo ancora sincronizzato il tutto. Dal log possiamo vedere meglio quello che e' successo:

{{{
git lg
}}}ci conferma che nonostante siano state scaricate le modifiche remote, la cartella risulta essere ancora vuota. Questo perchè le modifiche scaricate sono interne alla directory `.git` ma non è ancora stata eseguita la sincronizzazione del tutto.
 0. Consultare il log:{{{
git lg
}}}il cui output è:{{{
Linea 143: Linea 124:
}}}

Come possiamo vedere, ci sono i repository remoti, ma non quello locale su cui ci troviamo. E, dato che in quello locale non abbiamo ancora fatto niente, la nostra directory e' vuota.

Effettuamo allora il merge del branch locale con quello remoto, come abbiamo visto precedentemente, e vediamo che succede:

{{{
}}}Ci sono i repository remoti, ma non quello locale su cui ci troviamo. E dato che in quello locale non è stato ancora fatto niente, la nostra directory e' vuota.
 0. Effetuare il merge del branch locale con quello remoto:{{{
Linea 151: Linea 127:
git lg }}}
 0. Ricontrollare il log:{{{
git lg
}}}il cui output ora sarà:{{{
Linea 160: Linea 139:
}}}

Come possiamo vedere, a
desso i due branch sono allineati (puntano allo stesso commit). D'altronde, se vediamo il contenuto della cartella, possiamo vedere che e' aggiornato:

{{{
}}}Adesso i due branch sono allineati (puntano allo stesso commit). Se vediamo il contenuto della cartella:{{{
Linea 166: Linea 141:
}}}possiamo vedere che e' aggiornato:{{{
Linea 177: Linea 153:
Potevamo eseguire il tutto con un unico comando, {{{pull}}}. Questo racchiude in se' il {{{fetch}}} ed il {{{merge}}}, ed e' il comando solitamente utilizzato in questi casi. Ricreiamo il repository e vediamo che succede col {{{pull}}} (in una nuova cartella vuota). Il comando {{{pull}}} richiede il nome del repository remoto e il branch di cui fare l'update:

{{{
mkdir /home/user/gitproject_4
cd /home/user/gitproject_4
== Secondo metodo - Pull ==

Più rapido risulta l'utilizzo del comando '''pull''' che racchiude in se il '''fetch''' e il '''merge''' ed è il comando solitamente utilizzato in questi casi. Verrà creato un nuovo repository '''gitproject_4''' che funga da progetto locale.

 0. Creare una nuova cartella per ospitare il repository '''gitproject_4''' e spostarsi all'interno:{{{
mkdir ~/gitproject_4
cd ~/gitproject_4
}}}
 0. Inizializzare il repository:{{{
Linea 183: Linea 163:
Initialized empty Git repository in /home/user/gitproject_4/.git/
git remote add origin /home/user/gitproject
}}}
 0. Aggiungere il repository remoto:{{{
git remote add origin ~/gitproject
}}}
 0. Quindi eseguire il '''pull''':{{{
Linea 186: Linea 169:
}}}che restituirà il seguente output:{{{
Linea 192: Linea 176:
git lg }}}
 0. Verificare il log:{{{
git lg
}}}che risulta essere:{{{
Linea 203: Linea 190:
Abbiamo quindi creato un repository, e sincronizzato il suo contenuto con un repository remoto. È stato quindi creato un repository e sincronizzato il suo contenuto con un repository remoto.
Linea 207: Linea 194:
Possiamo a questo punto effettuare delle modifiche nel nostro nuovo repository:

{{{
Verranno qui effettuate delle modifiche nel repository locale '''gitproject_4'''.

 0. Modificare il file `~/gitproject_4/src/main.cpp`, digitando:{{{
Linea 211: Linea 198:
}}}
 0. Verificare il contenuto del file: {{{
Linea 212: Linea 201:
}}}che risulterà essere:{{{
Linea 219: Linea 209:
}}}
 0. Applicare la modifica effettuando il commit:{{{
Linea 220: Linea 212:
[master 0ed9a58] Aggiunta riga di output.
 1 file changed, 1 insertion(+)
git lg
}}}
 0. Consultare il log:{{{
git lg
}}}il cui output ora sarà:{{{
Linea 232: Linea 225:
}}}

Abbiamo creato un nuovo commit, e dal log possiamo vedere che i due branch master, quello locale e quello remoto, non sono piu' (ovviamente) allineati. Per inviare al repository remoto le mostre modifiche, occorre utilizzare il comando {{{push}}}, specificando sempre il repository remoto e i branch da voler sincronizzare:

{{{
}}}È stato creato un nuovo commit, e dal log possiamo vedere che i due branch master, quello locale e quello remoto, non sono più (ovviamente) allineati.

== Push ==

Per inviare le modifiche al repository remoto occorre utilizzare il comando '''push''', specificando sempre il repository remoto e i branch da voler sincronizzare. In questo modo verranno mandate le modifiche nel repository in modo tale che gli altri utenti, una volta sincronizzati con quello remoto, possano percepire le modifiche avvenute.

 0. Effettuare il '''push''':{{{
Linea 238: Linea 233:
}}}questo sarà l'output visualizzato:{{{
Linea 246: Linea 242:
}}}


A questo punto abbiamo mandato nel repository remoto le nostre modifiche, in modo tale che gli altri utenti del repository, una volta sincronizzati con quello remoto, possano percepire le nostre modifiche.

{{{{#!wiki note
'''Errore push'''

A questo punto si potrebbe ottenere il seguente messaggio di errore:

{{{
}}}Tuttavia si potrebbero visualizzare i seguenti '''messaggi di errore''':{{{
Linea 274: Linea 260:
}}}

Questo perche' il nostro repository remoto non e' di tipo '''bare'''. Al momento ignoriamo questo avviso e, per poter effettuare il push, digitare il seguente comando:

{{{
}}}Questo perche' il nostro repository remoto non e' di tipo ''bare''. Al momento verrà ignorato questo avviso.

0. Per poter ovviare al problema digitare il seguente comando:{{{
Linea 281: Linea 265:

E poi rieseguire il push. Quando non e' piu' necessario settare lo stesso valore a '''refuse''':

{{{
 0. Effettuare nuovamente il push:{{{
git push origin master
}}}
 0
. Quando non è piu' necessario settare lo stesso valore a '''refuse''':{{{
Linea 286: Linea 270:
}}}

per ripristinare lo stato originale.
}}}}

Per essere sicuri di aver fatto tutto correttamente, andiamo ad uno dei repository creato in precedenza:

{{{
cd /home/user/gitproject_3
}}}

Ed effettuiamo il pull per risincronizzarci col server remoto, che a questo punto avra' le nostre modifiche:

{{{
}}}per ripristinare lo stato originale.

== Verifica ==

Verificare che tutto sia avvenuto nel modo corretto utilizzando un repository creato in precedenza.

 0. Spostarsi nella directory del repository '''gitproject_3''':{{{
cd ~/gitproject_3
}}}
 0. Effettuare il pull per risincronizzarsi col server remoto, sul quale sono state apportate le modifche sviluppate sul '''gitproject_4''':{{{
Linea 301: Linea 281:
}}}Verrà visualizzato il seguente output:{{{
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
Linea 307: Linea 292:
git lg }}}
 0. Controllare il log:{{{
git lg
}}}che risulta essere:{{{
Linea 317: Linea 305:
}}} }}}I repository risultano allineati.


Problemi in questa pagina? Segnalali in questa discussione

Introduzione

In questa pagina vengono mostrati gli strumenti di Git che rendono possibile il lavoro di più persone ad un progetto. Per fare questo verrà simulata in locale una situazione analoga a quella in cui si utilizzi un repository remoto.

Per poter seguire la seguente guida si presuppone:

  • di aver creato il progetto gitproject come indicato;

  • di aver elaborato il progetto come mostrato nelle pagine sul Commit e sul Branching.

Verranno create nuovi repository (gitproject_2, gitproject_3, ecc..) che simuleranno repositori locali, mentre gitproject simulerà il repository remoto. Saranno quindi passati in rassegna i metodi di sincronizzazione.

Clonazione repository

In questo esempio verrà creato il progetto locale gitproject_2 sul quale verrà clonato il repository "remoto" gitproject.

  1. Creare una nuova cartella in cui vogliamo creare il nuovo repository e spostarsi all'interno:

    mkdir ~/gitproject_2
    cd ~/gitproject_2
  2. Clonare il repository gitproject nella cartella corrente ".":

    git clone ~/gitproject .

    Il comando sarebbe stato del tutto analogo anche se gitproject si fosse trovato su di un server esterno al proprio pc.

  3. Consultare il log:

    git lg

    che restituirà:

    *   f61b2e2 (HEAD, origin/master, origin/HEAD, master) - user : Merge branch 'gp-1' (4 minutes ago)
    |\  
    | * d8b610a (origin/gp-1) - user : Modificato codice per issue gp-1. (11 minutes ago)
    * | e4064d8 - user : Aggiunta cartella documentazione. (6 minutes ago)
    |/  
    * 1412239 - user : Aggiunta data in stampa. (15 minutes ago)
    * e1e5a46 - user : Aggiunti sorgenti e Makefile (18 minutes ago)
    * e9ea39b - user : README aggiunto (25 minutes ago)

    Il log è quasi uguale a quello originale. Si nota la presenza di altri branch:

    • origin/master

    • origin/HEAD

    • origin/gp-1

    Questi sono i branch del repository remoto, che sono materialmente quelli creati nel repository originale. origin è il nome di default che Git da a un repository remoto,.

  4. Attraverso il comando remote elencare i repository remoti:

    git remote

    che restituirà:

    origin
    Allo stato attuale ne risulta uno solo, quello clonato.

Git puo avere più repository remoti associati al repository locale. Questo permette molta flessibilità, ma al momento verrà ignorato questo aspetto.

  1. Attraverso il comando branch elencare i branch:

    git branch

    che risulterà:

    * master

    solamente un branch locale, master, sincronizzato con il master remoto (più precisamente nel punto in cui punta HEAD remoto).

Sincronizzazione manuale

In questo esempio verrà creato il progetto "locale" gitproject_3 nel quale verrà inizializzato il repository e in un secondo momento sarà sincronizzato manualmente con il repository "remoto" gitproject.

  1. Creare una nuova cartella in cui vogliamo creare il nuovo repository e spostarsi all'interno:

    mkdir ~/gitproject_3
    cd ~/gitproject_3
  2. Inizializzare il repository:

    git init
  3. Tramite il comando remote add aggiungere il repository remoto:

    git remote add origin ~/gitproject
  4. Attraverso il comando remote elencare i repository remoti:

    git remote

    che restituirà:

    origin
  5. Consultare il log:

    git lg

    il cui output sarà

    fatal: bad default revision 'HEAD'

    Il repository è vuoto! Questo perché è stato aggiunto il repository remoto, ma non è ancora stata fatta la sincronizzazione. Il comando:

    ls -altr

    mostra la seguente situazione dei file nella cartella:

    drwxrwxr-x 22 user group 4096 Dec  4 15:06 ..
    drwxrwxr-x  3 user group 4096 Dec  4 15:06 .
    drwxrwxr-x  7 user group 4096 Dec  4 15:07 .git

Per poter sincronizzare il repository locale con quello remoto, occorre scaricare le modifiche. Questo viene fatto in due modi.

Primo metodo - Fetch + Merge

Si vuole prendere il contenuto del repository remoto e sincronizzare quello locale, in maniera da poter prendere le modifiche remote. Il comando fetch permette di scaricare in locale le modifiche remote, ma NON di applicarle.

  1. Scaricare localmente le modifiche remote:

    git fetch origin

    Il comando restituirà:

    remote: Counting objects: 23, done.
    remote: Compressing objects: 100% (15/15), done.
    remote: Total 23 (delta 6), reused 0 (delta 0)
    Unpacking objects: 100% (23/23), done.
    From /home/user/gitproject
     * [new branch]      gp-1       -> origin/gp-1
     * [new branch]      master     -> origin/master
  2. Il controllo dei file:

    ls -altr

    il cui output sarà:

    drwxrwxr-x 22 user group 4096 Dec  4 15:06 ..
    drwxrwxr-x  3 user group 4096 Dec  4 15:06 .
    drwxrwxr-x  7 user group 4096 Dec  4 15:09 .git

    ci conferma che nonostante siano state scaricate le modifiche remote, la cartella risulta essere ancora vuota. Questo perchè le modifiche scaricate sono interne alla directory .git ma non è ancora stata eseguita la sincronizzazione del tutto.

  3. Consultare il log:

    git lg

    il cui output è:

    *   f61b2e2 (origin/master) - user : Merge branch 'gp-1' (10 minutes ago)
    |\  
    | * d8b610a (origin/gp-1) - user : Modificato codice per issue gp-1. (17 minutes ago)
    * | e4064d8 - user : Aggiunta cartella documentazione. (12 minutes ago)
    |/  
    * 1412239 - user : Aggiunta data in stampa. (21 minutes ago)
    * e1e5a46 - user : Aggiunti sorgenti e Makefile (23 minutes ago)
    * e9ea39b - user : README aggiunto (31 minutes ago)
    Ci sono i repository remoti, ma non quello locale su cui ci troviamo. E dato che in quello locale non è stato ancora fatto niente, la nostra directory e' vuota.
  4. Effetuare il merge del branch locale con quello remoto:

    git merge origin/master
  5. Ricontrollare il log:

    git lg

    il cui output ora sarà:

    *   f61b2e2 (HEAD, origin/master, master) - user : Merge branch 'gp-1' (11 minutes ago)
    |\  
    | * d8b610a (origin/gp-1) - user : Modificato codice per issue gp-1. (18 minutes ago)
    * | e4064d8 - user : Aggiunta cartella documentazione. (13 minutes ago)
    |/  
    * 1412239 - user : Aggiunta data in stampa. (22 minutes ago)
    * e1e5a46 - user : Aggiunti sorgenti e Makefile (24 minutes ago)
    * e9ea39b - user : README aggiunto (32 minutes ago)

    Adesso i due branch sono allineati (puntano allo stesso commit). Se vediamo il contenuto della cartella:

    ls -altr

    possiamo vedere che e' aggiornato:

    total 32
    drwxrwxr-x 22 user group 4096 Dec  4 15:06 ..
    drwxrwxr-x  2 user group 4096 Dec  4 15:11 src
    -rw-rw-r--  1 user group   16 Dec  4 15:11 README
    -rw-rw-r--  1 user group  258 Dec  4 15:11 Makefile
    -rw-rw-r--  1 user group   10 Dec  4 15:11 .gitignore
    drwxrwxr-x  8 user group 4096 Dec  4 15:11 .git
    drwxrwxr-x  2 user group 4096 Dec  4 15:11 doc
    drwxrwxr-x  5 user group 4096 Dec  4 15:11 .

Secondo metodo - Pull

Più rapido risulta l'utilizzo del comando pull che racchiude in se il fetch e il merge ed è il comando solitamente utilizzato in questi casi. Verrà creato un nuovo repository gitproject_4 che funga da progetto locale.

  1. Creare una nuova cartella per ospitare il repository gitproject_4 e spostarsi all'interno:

    mkdir ~/gitproject_4
    cd ~/gitproject_4
  2. Inizializzare il repository:

    git init
  3. Aggiungere il repository remoto:

    git remote add origin ~/gitproject
  4. Quindi eseguire il pull:

    git pull origin master

    che restituirà il seguente output:

    remote: Counting objects: 23, done.
    remote: Compressing objects: 100% (15/15), done.
    remote: Total 23 (delta 6), reused 0 (delta 0)
    Unpacking objects: 100% (23/23), done.
    From /home/user/gitproject
     * branch            master     -> FETCH_HEAD
  5. Verificare il log:

    git lg

    che risulta essere:

    *   f61b2e2 (HEAD, origin/master, master) - user : Merge branch 'gp-1' (15 minutes ago)
    |\  
    | * d8b610a - user : Modificato codice per issue gp-1. (22 minutes ago)
    * | e4064d8 - user : Aggiunta cartella documentazione. (17 minutes ago)
    |/  
    * 1412239 - user : Aggiunta data in stampa. (26 minutes ago)
    * e1e5a46 - user : Aggiunti sorgenti e Makefile (28 minutes ago)
    * e9ea39b - user : README aggiunto (36 minutes ago)

È stato quindi creato un repository e sincronizzato il suo contenuto con un repository remoto.

Pubblicazione modifiche locali

Verranno qui effettuate delle modifiche nel repository locale gitproject_4.

  1. Modificare il file ~/gitproject_4/src/main.cpp, digitando:

    sed -i '4 a \\tstd::cout << "Modifica da un altro repository" << std::endl;' src/main.cpp
  2. Verificare il contenuto del file:

    cat src/main.cpp

    che risulterà essere:

    #include <iostream>
    int main() {
        std::cout << "Thu Dec  4 14:48:20 CET 2014: Benvenuti su Git!" << std::endl;
        std::cout << "Issue gp-1 implementata" << std::endl;
        std::cout << "Modifica da un altro repository" << std::endl;
        return 0;
    }
  3. Applicare la modifica effettuando il commit:

    git commit -a -m "Aggiunta riga di output."
  4. Consultare il log:

    git lg

    il cui output ora sarà:

    * 0ed9a58 (HEAD, master) - user : Aggiunta riga di output. (15 seconds ago)
    *   f61b2e2 (origin/master) - user : Merge branch 'gp-1' (23 minutes ago)
    |\  
    | * d8b610a (origin/gp-1) - user : Modificato codice per issue gp-1. (30 minutes ago)
    * | e4064d8 - user : Aggiunta cartella documentazione. (26 minutes ago)
    |/  
    * 1412239 - user : Aggiunta data in stampa. (34 minutes ago)
    * e1e5a46 - user : Aggiunti sorgenti e Makefile (37 minutes ago)
    * e9ea39b - user : README aggiunto (44 minutes ago)
    È stato creato un nuovo commit, e dal log possiamo vedere che i due branch master, quello locale e quello remoto, non sono più (ovviamente) allineati.

Push

Per inviare le modifiche al repository remoto occorre utilizzare il comando push, specificando sempre il repository remoto e i branch da voler sincronizzare. In questo modo verranno mandate le modifiche nel repository in modo tale che gli altri utenti, una volta sincronizzati con quello remoto, possano percepire le modifiche avvenute.

  1. Effettuare il push:

    git push origin master

    questo sarà l'output visualizzato:

    Counting objects: 7, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (4/4), 395 bytes, done.
    Total 4 (delta 2), reused 0 (delta 0)
    Unpacking objects: 100% (4/4), done.
    To /home/user/gitproject
       f61b2e2..0ed9a58  master -> master

    Tuttavia si potrebbero visualizzare i seguenti messaggi di errore:

    remote: error: refusing to update checked out branch: refs/heads/master
    remote: error: By default, updating the current branch in a non-bare repository
    remote: error: is denied, because it will make the index and work tree inconsistent
    remote: error: with what you pushed, and will require 'git reset --hard' to match
    remote: error: the work tree to HEAD.
    remote: error: 
    remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
    remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
    remote: error: its current branch; however, this is not recommended unless you
    remote: error: arranged to update its work tree to match what you pushed in some
    remote: error: other way.
    remote: error: 
    remote: error: To squelch this message and still keep the default behaviour, set
    remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
    To ../gitproject/
     ! [remote rejected] master -> master (branch is currently checked out)
    error: failed to push some refs to '/home/user/gitproject'

    Questo perche' il nostro repository remoto non e' di tipo bare. Al momento verrà ignorato questo avviso.

  2. Per poter ovviare al problema digitare il seguente comando:

    git config --global receive.denyCurrentBranch ignore
  3. Effettuare nuovamente il push:

    git push origin master
  4. Quando non è piu' necessario settare lo stesso valore a refuse:

    git config --global receive.denyCurrentBranch refuse
    per ripristinare lo stato originale.

Verifica

Verificare che tutto sia avvenuto nel modo corretto utilizzando un repository creato in precedenza.

  1. Spostarsi nella directory del repository gitproject_3:

    cd ~/gitproject_3
  2. Effettuare il pull per risincronizzarsi col server remoto, sul quale sono state apportate le modifche sviluppate sul gitproject_4:

    git pull origin master

    Verrà visualizzato il seguente output:

    remote: Counting objects: 7, done.
    remote: Compressing objects: 100% (3/3), done.
    remote: Total 4 (delta 2), reused 0 (delta 0)
    Unpacking objects: 100% (4/4), done.
    From /home/user/gitproject
     * branch            master     -> FETCH_HEAD
    Updating f61b2e2..0ed9a58
    Fast-forward
     src/main.cpp |    1 +
     1 file changed, 1 insertion(+)
  3. Controllare il log:

    git lg

    che risulta essere:

    * 0ed9a58 (HEAD, origin/master, master) - user : Aggiunta riga di output. (4 minutes ago)
    *   f61b2e2 - user : Merge branch 'gp-1' (27 minutes ago)
    |\  
    | * d8b610a (origin/gp-1) - user : Modificato codice per issue gp-1. (34 minutes ago)
    * | e4064d8 - user : Aggiunta cartella documentazione. (30 minutes ago)
    |/  
    * 1412239 - user : Aggiunta data in stampa. (38 minutes ago)
    * e1e5a46 - user : Aggiunti sorgenti e Makefile (41 minutes ago)
    * e9ea39b - user : README aggiunto (48 minutes ago)
    I repository risultano allineati.

Ulteriori risorse


CategoryProgrammazione