Table of Contents
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.