====== 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.