Projects
> youterm
> 0xFFFF
> radare
> glh
> xml2doc
> bluewall
> pvc-repo
> cvs-repo
> git-repo
> mesure
> wistumbler2
> acr

Posts (81)
> List of posts

> Mini update
> Accelerated dreams
> Paranoia?
> Changelog
> Graphs and 077n pwnk
> HNY2k7
> Maemo mooo
> HC pwned
> Long time no post
> USB Pawah Injector i boot reveng

Categories
> all*
> TWD(7)
> blog(5)
> bluetooth(4)
> conf(1)
> desktop(1)
> devel(8)
> family(8)
> hpcva(9)
> hurd(2)
> life(20)
> n770(3)
> netbsd(2)
> pkgsrc(2)
> reality(5)
> tips(2)
> tothink(2)

Links
+ del.icio.us
+ asterx
+ bee.es.gnu.org

nopcode
+gallery
+www.nopcode.org
+cvs.nopcode.org
+news.nopcode.org
+blogs.nopcode.org

Other Blogs
+ sKUrZ0
+ TripleDES
+ gospel
+ blyx
+ MiKi
+ plue
+ xtraeme
+ esteve
+ jmmv
+ pof
+ syvic
+ Yosh
+ k0ro
+ ESN
+ Brainstorm
+ BlackShell
+ Hubertf
+ TooMany
+ viric
+ ziberpunk

doblog
+ Makefile
+ Source
+ Readme
+ TODO
+ Changelog









 
 >>Mon, 01 May 2006 06:11:58 +0200

 devel : Git: The GIT toolchain


Ja vaig amenaçar en fer un replacement d'algun sistema de control de versions. Doncs bé, no es un replacement, pero si un super-set de les comandes de GIT. He afegit accions per manejar projectes, snapshots, canvis, branques, merges.

En total són unes 32 comandes que segurament aniran creixent (o disminuint) amb el temps, pero que no pretenen canviar gaire. Amb Git qualsevol tasca amb GIT es converteix en algo molt facil i rapid, i les optimitzacions, checks i demés que has de fer a mà amb el GIT, aqui esta tot automatitzat .

No crec que faci gaire documentació ja que les comandes estan auto-documentades, pero faré un petit overview de com funciona la implementació actual.

Podeu veure el repositori gitweb aqui.

Clonant un repositori


Clonar un repositori ens servirà per descarregar un repositori d'algun projecte remot de forma senzilla:

  console:

$ Git-clone
Usage: Git-clone <name> <url> <<branch>>
example: Git-clone gdvb http://news.nopcode.org/gdvb.git/.git devel

$ Git-clone gdvb http://news.nopcode.org/gdvb.git/.git devel>
Working directory is /tmp/gdvb
defaulting to local storage area
walk a84bf1ec7d5317c0499bc0e2059117ac568c143f
walk 7c1672dcaebb10faae437b1d4dce3a789601c710
(..)
walk c901702e6e846029d99254c6b31fe5b2e99cb906
walk 97d557002c9bcdd81237fc5117e9f683ca338323
updating paths and switching branches or forcing are incompatible.
Clonation done in /tmp/gdvb/gdvb


Ara segurament ens interesi configurar i registrar aquest projecte a la base de dades de projectes amb Git-config gdvb.

Ara utilitzarem Git-branch per canviar de branca i Git-pull per mantenir el repositori actualitzat.

  console:

$ Git-branch devel
Now in branch 'devel'

$ Git-pull
Fetching refs/heads/master from http://news.nopcode.org/gdvb.git/.git/ using http
* refs/heads/origin: same as branch 'master' of http://news.nopcode.org/gdvb.git/
Fetching refs/heads/devel from http://news.nopcode.org/gdvb.git/.git/ using http
* refs/heads/devel: same as branch 'devel' of http://news.nopcode.org/gdvb.git/
Already up-to-date.


Manejant projectes


Git ens permet manejar projectes, estiguin on estiguin i els referencia desde ~/.Git/ on guarda les preferències de cada projecte. D'aquesta manera podem tenir un mateix projecte amb preferencies diferents per cada programador des d'una altre màquina (usuari, correu, publish-address, todo, etc..)

Per crear un nou projecte, al igual que per configurar-lo haurem d'utilitzar la comanda "Git-config"
  console:

$ mkdir hello
$ cd hello

$ Git-config hello
GIT root directory not found.
Initialize the GIT repository on this directory? (Y/n)

defaulting to local storage area
Name (pancake):
e-mail (pancake@pl2):
Description (no description): Hello World
Remote URL (user@host:/home/www/hello/.git):
Public URL (http://host/hello/.git/):
Clone the public repository tree? (Y/n) n

$ Git-projects
hello
gdvb

$ Git-projects hello
/home/pancake/hello


Com veieu, Git-config ens agafa info del usuari i de la maquina per generar els identificadors i ens permet configurar la URL del repositori public (readonly) i la conta SSH que farem servir per publicar els nostres canvis cap al repositori public. Finalment ens registrarà el projecte.

La comanda Git-projects ens retornarà el path del projecte que li pasem com a paràmetre:

  console:

$ cd `Git-projects hello`

$ echo Hello World > README
$ Git-add README

$ cd /usr/pkg/bin/ & ls Git-*
Git-add Git-diff-level Git-ls-modified Git-pull
Git-branch Git-diff-to-branch Git-ls-not-commit Git-rm
Git-cat-level Git-info Git-ls-untracked Git-rm-branch
Git-cleanup Git-levels Git-merge Git-rm-project
Git-clone Git-log Git-mv Git-root
Git-commit Git-ls Git-pack Git-snapshot
Git-commit-diff Git-ls-branches Git-projects Git-todo
Git-config Git-ls-commit Git-publish Git-update-index

$ Git-root
/home/pancake/hello


Com veieu funciona a l'estil GIT. Amb mil comandes sueltes . pero són bastant més clares, implementen certes accions que per fer-les amb GIT calen més pasos.

Anem a veure algunes coses més sobre els projectes:

  console:

$ Git-info
Author: pancake
e-mail: pancake@pl2
Project: hello
URL: http://host/hello/.git/
Description: Hello World
Branches:
Sizes: 0 objects, 0 kilobytes


Per esborrar un projecte es tant senzill com Git-rm-project.

Patch levels


Git, ens permet treballar amb /patch-levels/, es a dir, considera els canvis en forma de pila i podem utilitzar Git-diff-level, Git-levels i Git-log per mouren's entre els pegats.

  console:

$ Git-levels README
a2a4757f80a3d7c5605d6274083c88c9d7d9f542
9ded0b9c67fdc9c21aeb2e19b42be5d530682dd7

$ Git-log README
commit 9fa894472252441da9ef663f3bfb628e6f6f7b8a
Author: pancake <pancake@phreaker.net>
Date: Mon Feb 27 13:29:31 2006 +0100

* Talk about the remoting support and DTT

commit 97d557002c9bcdd81237fc5117e9f683ca338323
Author: pancake <pancake@mal.localdomain>
Date: Tue Feb 21 01:20:32 2006 +0100

Initial import of gdvb into the GIT

$ Git-cat-level README # The same as Git-cat-level 0 (diff against the latest commit)
(..)

$ Git-cat-level README 1 # Diff between now and 2 patch level
(..)


Tantmateix podem fer diff's contra diferents nivells de parches amb Git-diff-level.

  console:

$ Git-diff-level README
(.. veiem els canvis que hem fet al fitxer desde l'ultim commit (aka, patch-level=0 ..)

$ Git-diff-level README 1
(.. comparem el fitxer actual amb el 2n patch level ..)


Publicació


La publicació del repositori local es fa a través de SSH, potser més endavant em plantejor donare suport a altres mètodes. I es configura a traves de Git-config.

Git-publish ens fa un Git-pack abans de publicar, ja que aixi es redueix MOLT el tamany del repositori (d'uns 3M a 130KB en el gdvb).

També ens fa el git-update-server-info, per evitar problemes de publicació.

Cal tenir el directori remot creat:

  console:

$ ssh user@remote.host
remote$ mkdir /home/www/gdvb.git/
remote$ ^D
$ Git-publish
Name (pancake):
e-mail (pancake@pl2):
Description (DVB Channels Manager for Java-Gnome):
Remote URL (user@remove.host:/home/www/gdvb.git/.git/):
Public URL (http://news.nopcode.org/gdvb.git/.git/):

Nothing new to pack.
Contacting to foo@news.nopcode.org:/home/www/nopcode/gdvb.git/.git/...
Password:
building file list ... done
config
description
info/
info/refs
objects/info/
objects/info/packs
remotes/origin

sent 870 bytes received 172 bytes 189.45 bytes/sec
total size is 188324 speedup is 180.73


Snapshots


Amb la comanda Git-snapshot podrem crear distfiles del tree actual. Per defecte ens farà un tarball amb el nom {project-name}-{YYYYMMDD}.tar.gz, Pero si li diem el numero de versió com a argument ens fara un tarball de releaes per aquella versió. No cal dir-ho, pero el "make clean" l'hem de fer nosaltres a mà abans de fer l'snapshot

  console:

$ cd `Git-project hello`

$ Git-snapshot
hello-20060501/README
tar: ustar vol 1, 1 files, 0 bytes read, 10240 bytes written in 1 secs (10240 bytes/sec)

$ Git-snapshot 0.1
hello-0.1/README
tar: ustar vol 1, 1 files, 0 bytes read, 10240 bytes written in 1 secs (10240 bytes/sec)

$ ls ../hello-*
../hello-0.1.tar.gz ../hello-20060501.tar.gz


Tenim la comanda Git-todo que ens obrirà el ~/.Git/${project}/todo amb l'${EDITOR} que tinguem configurat, per tal de guardar notes sobre les coses que hem de fer a un projecte sense embrutar el tree del repositori.

Branques


El maneig de branques amb Git es molt senzill. Les accions que podem realitzar són:

Git-ls-branches : llista les branques
  console:

$ Git-ls-branches
* devel
master
origin


Git-branch : Crea una nova branca, o ens canvia el tree cap a ella.
  console:

$ Git-branch
Usage: Git-branch <branch>
note: Creates a new branch o jumps into
branches: > devel master origin


Git-rm-branch : Esborra una branca
  console:

$ Git-rm-branch
Usage: Git-rm-branch <branch>
branches: > devel master origin


Git-merge : importa la branca que li diguem cap a la branca actual
  console:

$ Git-merge
Usage: Git-merge <branch> <message>
Merges the target branch into the current branch


Commit session


Tenim comandes per poder veure els canvis que hem estat fent durant un temps i poder agrupar de forma senzilla els fitxers per blocs de canvis, per veure que es el que ha canviat farem servir Git-ls-modified.

  console:

$ Git-ls-modified
README
Makefile.acr

$ Git-diff-level README
--- a/README
+++ b/README

- Hello
+ Hello World
$ Git-ls-commit
$ Git-update-index `Git-ls-modified` # mark to commit
$ Git-ls-commit
README
Makefile.acr

$ Git-commit
(.. enter log entry ..)


Tenim altres comandes per manipular els fitxers del respositori: Git-mv, Git-rm, Git-add, Git-ls, Git-ls-untracked, Git-ls-not-commit, Git-ls-commit

Si volem veure el Git-diff-level de tots els fitxers que hem marcat per comitejar podem fer-ho aixi amb el VIM:

  console:

$ Git-commit
(.. obre el vim ..)
:sp # fem un split
:%!Git-commit-diff # importem el commit diff dins de l'split


Instalació del Git


Obviament necessitareu GIT per poder fer servir el Git, aixi que us recomano que us descarregueu el Git per GIT. Ja que es la forma més senzilla d'actualitzar-se, encara que segurament faci un release un dia d'aquests i el puji a pkgsrc.

Desde tarball:
  console:

$ wget http://news.nopcode.org/Git-20060501.tar.gz
$ tar xzvf Git-20060501.tar.gz
$ cd Git-20060501
$ su -
# PREFIX=/usr make install


Desde GIT:
  console:

$ git-clone Git http://news.nopcode.org/Git.git/.git/

o

$ Git-clone Git http://news.nopcode.org/Git.git/.git/
$ cd Git
$ Git-config


Bisect


Encara vull jugar una mica més amb el git-bisect abans d'escriure una tool que la wrapeji, ja que git-bisect funciona realment molt be .

git-bisect ens permet definir una mena de tags en plan mood. Marcant estats del codi com a "good", "bad". I podem veure els logs i saltar d'un tag a un altre. Abans de fer el commit podem borrar les marques del bisect i quedarà tot net .

Aixo ens permet anar fent proves amb diferents canvis de forma senzilla i marcant els canvis que han estat provats i son bons i marcar com a versions dolentes aquelles que no funcionin.

$ Git-eof

[add comment] [view comments] (3)

Comments:
from: Portugal
date: Wed, 13 Sep 2006 20:32:24 +0200
title: My homepage

Thank you!
My homepage | Cool site


from: Belgium
date: Wed, 13 Sep 2006 20:32:29 +0200
title: My homepage

Good design!


from: Israel
date: Wed, 13 Sep 2006 20:32:36 +0200
title: My homepage

Thank you!
http://usrexfph.com/nkud/ects.html | http://ptuszcnf.com/srgp/lojc.html