Proviamo a mettere qui un po di materiale per una wiki
premetto che sto imparando anche io, quindi è assolutamente gradito l'aiuto da chi ne capisce sicuramente più di me....
sto sperimentando git e trovo che sia comodo soprattutto per condividere un progetto
Git è uno strumento estremamente potente e variegato, riassumere il tutto in poche parole è impossibile,
In rete si trovano molte guide come quella pubblicata da Kicco
un'altra la trovate qui https://git-scm.com/book/it/v1/Per-Iniziare-Una-Breve-Storia-di-Git (https://git-scm.com/book/it/v1/Per-Iniziare-Una-Breve-Storia-di-Git)
cosa è Git
un sistema di versionamento che permette di gestire un progetto e di tenere traccia di tutte le modifiche che vengono fatte
(commit). On ogni momento si può tornare indietro a qualsiasi commit antecedente a quello attuale .
Si possono inoltre creare piu rami di sviluppo (branch) che procedono in parallelo e possono essere di nuovo uniti inglobando le modifiche di uno sull'altro (merge). Pensate a più sviluppatori che lavorano su un progetto e ogniuno si occupa di una certa parte, una volta generate le modifiche necessarie aggiungono il loro lavoro al ramo principale.
Git viene gestito localmente nella cartella stessa del software che state sviluppando, ma esistono servizi come GITLAB e GITHUB che offrono uno spazio remoto dove archiviare e gestire i propri progetti
GITHUB non è opensource, GITLAB si.
Gambas è ospitato in quest'ultimo
https://gitlab.com/gambas/gambas (https://gitlab.com/gambas/gambas)
innanzi tutto bisogna installarlo
naturalmente si suppone che siamo tutti su linux, anche se si gestisce tranquillamente anche dall'altra "cosa"
esistono tool grafici, ma trovo divertente ed educativo gestire tutto da terminale
utile per visualizzare la situazione
una gui semplice
$ sudo apt install git-gui
Configuriamo git con i nostri dati
$ git config --global user.name "Pippo"
$ git config --global user.email Pippo@gmail.com
Questo sarà utile quando creiamo un repository remoto
Proviamo a usare git
dal terminale entriamo nella cartella del progetto Gambas ( per dirne uno)
inizializziamo git
verrà creata una cartella .git dove sono contenute tutte le informazioni necessarie a git e tutti i file del progetto di tutti i rami e commit
Quando si esegue un commit viene fatta una fotografia dello stato di tutti i file e viene memorizzato un punto di riferimento per potervi tornare.
tracciamo ora i file contenuti nella cartella di lavoro
lo stato dei file viene immortalato con una istantanea e conservato in un area detta di stage, una sorta di limbo
Non è ancora stato creato il riferimento a questa immagine, andiamo ad effettuare il commit
appare ora l'editor ( nano di solito) dove nella prima riga si può inserire una descrizione di questo commit con le modifiche effettuate
si salva e se ora provate a dare il comando
potete vedere graficamente lo stato del vostro progetto
In ogni momento si può vedere la situazione con il comando
Un progetto si può clonare anche da un repo remoto
con falsa modestia e un po di presunzione un ottimo esempio è il mio "Gestione-Manifestazioni"
andiamo nella pagina principale del progetto e copiamo l'indirizzo nella casella HTTPS
poi apriamo il terminale e digitiamo
$ git clone https://gitlab.com/akrobaticone/Gestione-manifestazioni.git
una copia del progetto verrà creata localmente nella cartella home
per curiosità entrate con il terminale nella cartella del progetto
$ cd Gestione-manifestazioni
$ gitk --all
Per tenere aggiornato il progetto con i cambiamenti che vengono inseriti nel repo remoto
Se sono presenti più rami (master next etc..) lo potete vedere con il comando
per passare al ramo che si desidera
$ git checkout ramochesidesidera
così facendo nella cartella del progetto saranno visibili solo i file di quel ramo
creare un nuovo ramo partendo da quello attuale
$ git checkout -b nuovoramo
Ora provate ad aprire il progetto con gambas
inella barra dell'IDE appare la casella Git dove sono contenuti gli strumenti per gestire il repo
Non ho ancora ben capito l'uso di git da gambas, a volte ci sono cose che non funzionano come mi aspetterei
nelle prossime puntate cercherò di approfondire
se il progetto è su una cartella locale o di rete possiamo lavorare sul progetto e una volta fatte le modifiche le tracciamo con
i file possono essere aggiunti singolarmente
oppure con l'opzione --all (tutti insieme)
$ git add --all oppure git add .
creiamo il commit con
le due operazioni precedenti possono essere fatte insieme con
se vogliamo annullare tutto il lavoro fatto dopo l'ultimo commit e riportare indietro lo stato del progetto
se il progetto è su un repository remoto che abbiamo clonato
dobbiamo trasmettere le modifiche
dopo l'operazione di commit trasmetiamo il tutto con
$ git push origin ramodidestinazione
dove
origin rappresenta il repository remoto che git conosce già
ramodidestinazione è il nome del branch sul quale stiamo lavorando
verranno chieste nome utente e password che sono quelli chiesti in fase di registrazione a gitllab o github
se stiamo partecipando ad un progetto altrui sarà il manutentore del progetto ad assegnarvi i permessi per poter accedere
la cosa bella di questo modo di procedere è che da qualsiasi pc in qualsiasi luogo potete sviluppare il progetto aggiornando il repo remoto
Nell'IDE di Gambas sulla barra degli strumenti è presente la casella Git che compare se il progetto è gestito con quest'ultimo
sono presenti le seguenti opzioni
( per come le ho interpretate io)
INOLTRA equivale a Git commit
SYNCRONiZE equivale a Git pull, aggiorna localmente dal repo remoto
UNDO ALL CHANGES equivale a Git reset --hard
ADD EVERYTHINGS TO REPOSITORY equivale a Git add .
BRANCH visualizza e seleziona i branch del brogetto ed equivale nell'ordine a Git branch (visualizza) e git checkout ( passa a branch)
Un comportamento strano che ho rilevato è che i branch vengono visualizzati solo se prima li cambio da terminale
se nella cartella locale eseguo dei cambiamenti e provo a fare un git pull mi da errore poichè i cambiamenti locali non sono stati committati
ci sono due possibilità
fare il commit oppure fare un reset con git reset --hard per cancellarli
in una situazione del genere ho provato a dare UNDO ALL CHANGES e poi SYNCRONIZE ma di da sempre errore
devo farlo da terminale
un passo alla volta, prossimi argomenti sono il merge (due rami si fossono fondere tra di loro) e i vari metodi di aggiornamento e sincronizzazione dei rami
aggiornamento
Il comando INOLTRA esegue il commit, se il progetto è clonato da un repo remoto viene eseguito anche il push
viene cioè trasmesso con tutte le modifiche al repository remoto (GITLAB o GITHUB per esempio)
appare una finestra che chiede ID e password per salvare in remoto
(sono i dati con i quali ci siamo registrati su Gitlab per esempio)
al momento su xubuntu mi da errore, devo capire perchè
Quando si crea un progetto nuovo nel menu Progetto appare la voce PUT UNDER VERSION CONTROL
con questa opzione si inizializza GIT , equivale cioè a
Immaginiamo ora di lavorare sul nostro progetto
siamo nel ramo master che rappresenta la versione stabile (si potrebbe chiamare anche in un altro modo, per esempio "stabile")
vogliamo aggiungere una nuova funzionalità, ma senza alterare la stabile
creiamo un nuovo ramo
che equivale a
$ git branch nuova
$ git checkout nuova
lavoriamo e committiamo le modifiche
una volta che siamo sicuri che il tutto funziona possiamo integrare le modifiche nel ramo master (o stabile)
torniamo nella master
fondiamo i due rami
eliminiamo il ramo nuova
Il ramo di lavoro cambia istantaneamente quando selezioniamo nella IDE dalla casetta GIT-> Branch e il porogetto viene ricaricato dal ramo selezionato
ciò che non capisco è che la prima volta che accedo al progetto mi mostra solo il ramo sui cui sono posizionato
se da terminale cambio il ramo nella stessa casella appaiono ora i due rami
se ne apro un terzo appare anche quello e così via
devo fare un po di prove