Git - doc
Traballar en grup
Traballar en una còpia local
Actualitzar projecte servidor
Treballar amb branques
Agafar modificacions d'altres branques
Descartar certs directoris del merge
Moure master d'un servidor a un altre
Actualitzar branques a partir del fork
Llistat de comandes
Svn a git
Al servidor, creem el directori del projecte: mkdir nomdelprojecte
Ens posem dins del directori: cd nomdelprojecte
Creem el projecte git:
Valors glovals de configuració de Git:
git config --global user.email "email@gmail.com"
git config --global color.ui true # No és necessari, però és millor visualment
Afegim els fitxers/directoris al projecte: git add .
Enviem el codi del projecte en el primer commit: git commit -a -m "[ADD] Primer enviament de codi"
Per treballar en grup, cal que tots els usaris estigui en el mateix grup d'usuaris del servidor. Tots els usaris el seu gid ha de ser "users".
Per fer un push, es important que cada usuari després del clone, afegeixi el seu nom i correu.
Pel tema de permisos, al fitxer .profile de cada usuari del servidor, deixarem unmask 222
Ens descarreguem el projecte del servidor:
git clone 192.168.0.5:/home/cuina/django/nomdelprojecte
Si el repo té més d'una branca, quan fem git branch només ens mostrarà la branca master. Això és degut a que la resta de branques són considerades remotes. Per veure les branques remotes farem:
Per poder canviar a una branca "remota" farem git checkout nom_branca (com sempre), aleshores "es crearà la còpia local" i quan fem un git branch ja apareixerà, ja que això només passa el primer cop que fem un checkout de la branca. Per veure totes les branques (locals i remotes) farem: git branch -a
Afegir codi al projecte, ho farem amb:
git add nomfitxer
git commit -a -m "[ADD] Comentari"
Per enviar els canvis al projecte del servidor:
git push <- fa el push de totes les branques al repositori remot (especificat al fitxer .git/config del nostre repo)
git push origin branch_name <- fa el push dels canvis de la branca branch_name al repo especificat (origin)
Per descarregar canvis del servidor a la nostra còpia local:
git fetch <- fa el fetch de les noves dades de totes les branques per fer el merge manual. Aquestes branques remotes es diuen p. ex. origin/development
git pull <- fa un fetch i després un merge de la current branch
Haurem de fer un checkout (no un pull)
Per que ens ho apliqui, al fitxer config del projecte: bare = true, ja que no treballe en tree
En el nostre cas ens permetrà crear projectes fills (webs) i vagin en harmonia amb el projecte pare (Zoook)
Zoook -------------
web1 -----------
web2 -----------
web3------
La branca principal que ens crea és "master".
Les comandes per treballar amb branques són:
git branch nomdelabranca <- Creem una nova branca
git checkout nomdelabranca <- canviem a la branca nomdelabranca
git checkout -b nomdelabranca <- Crea la branca i canviem a ella. És equivalent a: git branch nomdelabranca; git checkout nomdelabranca
git branch <- mostra les branques diponibles i l'activa
git mergetool -t meld <- Diferencies i solució
git diff --stat master nomdelabranca
git branch -d nomdelabranca <- Eliminem la branca
Per unir dos branques:
1- Ens col·locarem a la branca a on volem aplicar els canvis, per exemple
git checkout nomdelabranca
2- git merge master <- Ens unirà els canvis de master a la nostra branca del web
Cas especial de Fast-forward merge sense commit nou:
"Normally, a merge results in a merge commit with two parents, one for each of the two lines of development that were merged. However, if the current branch has not diverged from the other--so every commit present in the current branch is already contained in the other--then git just performs a "fast forward"; the head of the current branch is moved forward to point at the head of the merged-in branch, without any new commits being created".
git log origin/nom_branca
git cherry-pick <hashdelcommit>
Diferència entre els 2 últims commits (HEAD respecte HEAD^):
Diferència entre el que hi ha a l'índex i un fitxer:
git diff fitxer
Diferència entre l'últim commit i un fitxer:
git diff HEAD fitxer
A l'arrel del projecte podem crear el fitxer .gitignore per ometre certs fitxers
Abans de fer el merge, si alguns directoris no volem que ens els fusioni, els haurem d'eliminar, que no estigui com a repositori de versions.
git rm  --cached nomdirecotori
Per fer un commit a github aplicarem les següents comandes:
git commit -a -m "Descripció"
Copiem els directoris d'un servidor a un altre
A cada client, canviarem el .git/config: url = 192.168.0.5:/home/cuina/django/zikzakmedia
Si tenim problemes al fer un push (git 1.7.0) http://www.bitflop.com/document/111 You can simply convert your remote repository to bare repository ( There is no working copy in the bare repository - the folder contains only the actual repository data ) .
Ens canviarà el fitxer de configuració:
git remote add zikzakmedia https://github.com/zikzakmedia/python-easyimap
git push zikzakmedia master
git init #iniciar projecte
git commit -m "four commit"
git checkout -- test2 #desfer els canvis fets
git diff test2
git clone 192.168.0.3:/home/zikzak/django/test <- test is git project
git pull <- pull the newest version from the repository
git commit -a -m "aqui el missatge" # El paràmetre -a serveix perquè s'actualitzin al commit els fitxers modificats
git push <- push the changes to the repository
Al servidor, per descarregar la branca:
Desfer canvis de tota la branca (amb --hard es modifica el working trie, sinó, només es modifica el HEAD i índex):
git reset --hard HEAD # torna a l'últim commit
git reset --hard HEAD^ # la penúltima versió
git reset --hard HEAD~2 # eliminar dues versions
git reset --hard HEAD~3 # eliminar tres versions
Desfer canvis a un fitxer abans del commit:
git checkout fitxer # deixa el fitxer com a l'índex --> git diff no retorna res
git checkout HEAD fitxer # deixa el fitxer com estava a l'últim commit --> git diff & git diff --cached no retornen res
Per eliminar l'últim commit hi ha dues maneres:
1) Recomanada, crea un commit nou (fast forward)
2) No recomanada, modifica l'últim commit amb el que hi hagi a l'índex (non fast-forward)
git commit --amend -a -m "Fixing last commit"
git clone /home/resteve/hello-word
git clone git://git.kernel.org/.../git.git my.git
Crear branques
git branch #Per veure les branques
git branch experimental # ens crea una branca
git checkout experimental #canviar de branca
git merge experimental #unir branca experimental a la master
Treure un fitxer de l'índex abans del commit:
git reset HEAD fitxer # Serveix per desfer l'add
Llista dels fitxers a l'índex:
Guia comandes svn i git
Git revert only works on work that you have committed and not if you have code that is "not checked in" yet.
Git (last edited 2013-12-20 15:58:57 by jmartin)