Warning: session_write_close(): Write failed: No space left on device (28) in /var/www/dw_docs/doku.php on line 128
Warning: session_write_close(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/sessions) in /var/www/dw_docs/doku.php on line 128
====== Git Forking Workflow ======
===== Intro =====
Nel modello di sviluppo fork-based gli sviluppatori, invece di farsi un proprio branch sul repository principale, effettuano una fork dell'intero repository sul proprio account di GitHub, su cui andranno a pushano le modifiche.
Quando poi si vogliono integrare le proprie modifiche dal proprio repository GitHub a quello principale, si andra' ad effettuare una pull request da interfaccia web.
**NB**: questo vale sia per i contributori esterni che per ogni core developer.
Di seguito descriveremo dettagliatamente i passaggi da effettuare per Gasista Felice.
===== Fork =====
Dopo aver effettuato l'accesso su Github, andare sul seguente repository da browser: [[https://github.com/befair/gasistafelice]] e cliccare su "Fork".
Fatto questo, il repository gasistafelice apparirà sulla propria pagina personale di Github.
Cambiare i riferimenti di origin all'interno del file di config (.git/config) nel seguente modo:
[remote "origin"]
url = git@github.com:tuo_nick_github/gasistafelice.git
fetch = +refs/heads/*:refs/remotes/origin/*
Aggiungendo un nuovo remote che punta al repository ufficiale:
[remote "upstream"]
url = git@github.com:befair/gasistafelice.git
fetch = +refs/heads/*:refs/remotes/origin/*
Mi posiziono all'interno del master del mio repository in locale.
$ git checkout master
Effettuo un merge del mio branch master con quello del repository ufficiale (upstream -> git@github.com:befair/gasistafelice.git)
$ git pull upstream master
Mi sposto sul mio branch in locale di sviluppo (in questo caso, my-dev-branch)
$ git checkout my-dev-branch
Effettuo un rebase (un import) del mio branch (my-dev-branch) con il master, quindi:
- importo le nuove modifiche del master
- riapplico i miei commit piu' recenti dopo quelli importati dal master
$ git rebase master
In caso di problemi fixare a mano eventuali conflitti, come segnalato (e come si fa normalmente).
$ git push origin my-dev-branch:master
Effettuo un push di my-dev-branch sul branch master di origin (origin -> git@github.com:tuo_nick_github/gasistafelice.git)
In questo modo pusherò il mio branch di sviluppo sul mio repository online.
===== Pull Request =====
Per effettuare una PULL REQUEST bisogna andare sul repository ufficiale (befair/gasistafelice.git) e cliccare su "Pull Request" dal menù a destra.
Ci verrà chiesto di selezionare su quale branch del repository effettuare la request.
Nota: Se la pull request non viene integrata subito e vengono fatte altre modifiche in upstream (repository principale) incompatibili con la pull request (ad esempio se vengono modificati gli stessi file), lo sviluppatore dovra' fare nuovamente il rebase:
$ git checkout master
$ git pull upstream master
$ git checkout my-dev-branch
$ git rebase master
(risolvo conflitti e ricommitto, come suggerisce Git stesso)
Di conseguenza, se ora rieffettiamo la push verso l'origin (il proprio repository forkato):
$ git push origin my-dev-branch:master
Viene riportato un conflitto, e bisognera' aggiungere --force per forzare l'operazione:
$ git push origin my-dev-branch:master --force
A questo punto, rieffettuare la pull request
===== Appendice: chiavi SSH per accesso su GitHub =====
Generare una chiave SSH:
$ ssh-keygen -t rsa -b 4096
Stampare (e copiare) la chiave pubblica appena generata (in genere):
$ cat ~/.ssh/id_rsa.pub
Dall'interfaccia di Github, aggiungere la chiave appena copiata alle proprie chiavi SSH. In questo modo si evitera' di dover digitare nick/password ogni qualvolta si vuole fare una push sul proprio repository.