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)