Categoria:Programació
GIT - Control de versions distribuït
Concepte
GIT és un sistema de control de versions distribuit (tots els ordinadors tenen tota la informació, fitxers i història) i gratuït.
GITHub és un SaaS (sitema en el núbol per gestionar els repositoris).
Instal·lació de GIT
Instal·lem sobre Debian, Ubuntu, Lliurex…
> $ sudo apt-get install git
Revisem la versió
> $ git --version
Ens situem dintre del directori a contolar
> $ cd control
Inicialitzem el repositori
> $ git init
S’inicia un repositori creant-se una carpeta oculta dins de la carpeta de treball (.git)
També podrem clonar el repositori
> $ git clone git://github.com
Fluxe de treball amb GIT
Afegim un fitxer
> $ git add fitxer
HEAD: lloc on li hem dit a GIT que les modificacions ja són vàlides.
Quan guardem un fitxer podem posar un comentari o aclariment
> $ git commit -m 'missatge'
Pugem els fitxers al respositori
> $ git push origin master
MASTER: branca del repositori on es van a fer els canvis.
ORIGIN: repositori remot
Podem definir altres repositoris als quals també podrem pujar el codi
> $ git remote add nombre <servers>
Per obtnir els canvis del repositori
> $ git pull origin master
Branques en GIT
Tots els projectes, per defecte, tenen la branca MASTER on, al final, acaben totls els desenvolupaments que fem.
Podem definir altra branca, per exemple, DEVELOP on anar fent tots els xicotets canvis que necessitem fer.
Per canviar de branca, per situar-nos a una altra branca
> $ git checkout -b develop
checkout → canvia de branca -b → crea la branca
Quan arribem a un punt on tots els canvis que hem anat fent son estables i ens interessa que apareguen en la branca MASTER farem un merge.
Primer ens situem en la branca MASTER
> $ git checkout master
Ara li diguem que porte els canvis que hem fet a DEVELOP
> $ git merge develop
Ara tindrem una nova versió a la branca MASTER
Pot passar que hi hagen problemes al fer el merge, en cas que GIT no sàpiga distingir quinies són les líies bones ens ho preguntarà.
Etiquetes en GIT
Podem definir etiquetes per a gestionar versions del nostre codi o punts importants de desenvolupament, de forma que després ens siga fàcil identificar les fases de desenvolupament
> $ git tag -a v1.0 -m 'Versió 1.0'
Exemple:
> $ git tag v0.1.0-beta v0.2.0-beta v0.3.0
Banques en GIT
Les branques són línies de treball que tenen un objectiu. Posem un exemple de diferents branques amb diferents objectius de fases del treball.
MASTER: branca principal on aniran tots els canvis finals, així que, en aquest cas podriem etiquetar diverses versions explicitant les fases V0.1, v0.2, v0.3, etc.
DEVELOP: branca on es realitzen canvis més xicotets, però també es proven. Pot tenir diverses subbranques.
RELEASE: branca on podem agrupar certs pasos endaavnt, quan está provada podrem incorporar-ho a MASTER.
Exemple de branques
Mostra les branques:
$ git branch * master develop release
Li hem dit que ens mostre i estructure gràficament tot el repositori
> $ git log --oneline --decorate --graph
El resultat ha estat:
* 7ae5f1d (HEAD, master) Merge pull request #228 from manishrc/master |\ | * ba24a0d use #ignore-click instead of 'javascript:;' * | 1298982 Merge pull request #221 from google/https |\ \ | * | 00abddb Fixes #220 - move font loading to https |/ / * | 49bb52e tweak #217 * | 0665b24 Close GH-217: Adds a gulp serve:dist command that uses the dist build process. Fixes #216. Fixes #215, Fixes #216 * | b768937 gulpfile - codestyle * | c9ae83a Merge pull request #219 from google/uncss_filter |\ \ | * | a9cab1e Adding ignore filters to uncss |/ / * | f8cc27a Merge pull request #206 from Charca/gulp-copy-task |\ \ | * | 9bc0d26 Added gulp task to copy files from app to dist * | | 31e42b3 Adding a link to the demonstration site #97 * | | 869a4e6 Merge pull request #210 from bfred-it/master |\ \ \ | * | | 286fc71 Removed undesirable minimal-ui in viewport |/ / / * | | d88586d Merge pull request #202 from google/200 |\ \ \ | * | | b1efd5a Fixes #200 * | | | 3d4d007 Merge pull request #209 from manishrc/master |\ \ \ \ | |_|/ / |/| | / | | |/ | |/| | * | dac0316 fix issue with links jumping to the top of page. use href='javascript:;' instead of '#'. |/ / * | 2a31cfa Merge pull request #205 from jbnicolai/update-dev-dependencies |\ \ | * | 93f1a49 Updates devDependencies to latest stable backwards-compatible versions. |/ / * | 1b563ba Merge pull request #203 from shinnn/preserve-license |\ \ | * | 51d4351 Preserve JavaScript license comment |/ / * | d9fd029 Rebase and bring in #145 (h/t @stephenplusplus) |\ \ | |/ |/| | * c01e861 (origin/gulp-watch-config) fixes #132 - style configuration. * | 78e667c followup to #201 * | 5219ec1 Merge pull request #201 from johnjbarton/customible-gulp |\ \ | * | 5447038 Allow gulp task list to be extended. As a starter kit, we want users to be able to customize. As a source-based distribution we want users to stay updated. By allowing users to customize web-star |/ / * | 421d0ed Merge pull request #182 from matheusazzi/patch-2 |\ \ | * | ce68fe1 Remove reload from the images task | * | de30295 Don't optimize images on serve * | | eda114d Merge pull request #187 from robwierzbowski/patch-3
Si fallem podem tronar enrere
Cal situar-se primer en la branca pertinent
> $ git checkout --fitxer
Inclús podem dir “tot el que hem fet fins ara no val per a res”
> $ git fetch origin && git reset --hard origin/master
Aquest comandament lleva arxius de l'escenari i desfà els canvis al directori de treball des de l'última confirmació
> $ git reset --hard
Rerefències
Escrita
- Documentació base
- Documentació base en espanyol
- Tutorials de GIT en espanyol - Atlasian
- Guia ràpida de GIT
- GIT Màgic
- Referència bàsica per a GIT
- Documentació enfocada a la pràctica professional
- En anglés, enfocada a la iniciació en GIT
Video
- GITHub en Camon - Murcia. Excel·lent per introduir-nos. Conceptual.
- Clase práctica de Git y Github
- Introduction to GIT with Scott Chacon of GITHub. Visió global de tot el servei i funcionament a GITHub
- Git and GitHub Version Control Tutorial - Part 1: 1. what is Git; 2. install Git Client; 3. demo of Git; 4. intro into GitHub
- Git and GitHub Version Control Tutorial - Part 2: 1. Recap Part 1; 2. GitHub; 3. Using Git Bash with GitHub; 4. Git Windows Client; 5. Overview of Branching, Merging, Cloning, Forking
- Git and GitHub Version Control Tutorial - Part 3: 1. Overview of Branching, Cloning, Pulling, and Merging; 2. Demo of it on Git Bash; 3. Same demo on Windows Git; 4. Intro into Forking; 5. Demo of Forking and a Pull Request; 6. Overview of Part 4
- Git and GitHub Version Control Tutorial - Part 4: 1. Merge Conflicts; 2. Git Tagging; 3. Previous commit; 4. Final thoughts; 5. Congrats!