git cat-file -p <hash>
Todos estos objetos se guardan en .git/objects
, sin calcular deltas! Siempre
que se repita un hash, se considera que el objeto ya está almacenado, y se
ahorra tiempo en tráfico de red y disco.
Todos estos objetos se empaquetan en estructuras .pack
, que son las que
se comparten por red. Así, el cálculo de deltas es independiente, y se puede
optimizar dependiendo de los datos a comprimir.
git format-patch
git am
git apply
Vas a querer darme las gracias al final de la charla.
Está mi email en la última diapositiva.
Me gusta el chocolate.
Genera unos ficheros que representan tus commits, normalmente un fichero por commit.
Puedes indicar un commit concreto o un rango de commits. Normalmente se le solicita que genere ficheros desde un commit concreto.
Esto es realmente lo mismo que un pull request. Old-school. Más flexible y fácil de utilizar. Proyectos enormes aún lo usan.
Los ficheros son texto plano: portables, editables.
Luego puedes aplicarlos en cualquier otro commit de tu repositorio o de otro repositorio.
[g.indalecio@ctdesk235 unpack]$ git format-patch origin/master
0001-Fix-typo.patch
From e5beabd15a9e8136e3cf110ae28f05ca55227a95 Mon Sep 17 00:00:00 2001
From: Guillermo Indalecio Fernandez <guillermobox@gmail.com>
Date: Fri, 5 Dec 2014 20:25:37 +0100
Subject: [PATCH] Fix typo
---
unpack.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/unpack.py b/unpack.py
index db502ba..fe4c780 100644
--- a/unpack.py
+++ b/unpack.py
@@ -43,7 +43,7 @@ class FileDriver(object):
return target
def extract(self, options):
- command = self.extract_command(options)
+ command = self._extract_command(options)
if not self.parent():
if self.path:
--
1.9.1
git branch -f
.[guille@localhost unpack]$ git checkout 1d658ca
HEAD is now at 1d658ca... Added gitignore
[guille@localhost unpack]$ git am 0001-Fix-typo.patch
Applying: Fix typo
* 50dbf9a Fix typo (3 minutes ago)
| * 565065d Big refactor on progress (32 hours ago)
| * e5beabd Fix typo (12 days ago)
| * d6c7914 Parse options with optparse (3 weeks ago)
|/
* 1d658ca Added gitignore (3 weeks ago)
* 61a4f78 Always read file after creating Driver object (4 weeks ago)
* 632a0f1 First version (4 weeks ago)
git am
, utiliza los mismos parches.v1.0
y quiero aplicarlos a
partir de v2.0
.git format-patch v1.0
git checkout v2.0
git am *.patch
git format-patch v1.0
vim *.patch
git am *.patch
git format-patch 1234567^..1234567
git am *.patch
git format-patch origin/master
# enviamos un email con los ficheros, o se comparten de otra manera
# otro developer hace lo siguiente
git am *.patch
Foza todo lo que quieras en el repo local. Destrúyelo. No tengas piedad. Una tarde fedellando con los comandos básicos de git (diff, show, status, branch, merge, format-patch) y ya no tendrás miedo.
Móntate un .gitconfig decente. Compártelo.
Los branches son super útiles. Manejándolos bien, la
interacción con remotos, hooks y demás se entiende mejor.
Pensad que son punteros, literalmente. Buscad en .git/refs/heads/
.
Entender la estructura interna (commits, hashes, branches) lo es todo para comprender lo que sucede en cualquier otro caso. Échale un vistazo a los links de la siguiente diapositiva.
Algunos links de youtube para continuar aprendiendo git internals.
Esta presentación está escrita en cleaver.
Ahora se lleva esto de las presentaciones HTML modernas.