Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
info:libros:git [03/09/2018 05:29] – [Usando Git como los profesionales: GitHub] mateinfo:libros:git [27/11/2018 02:01] (actual) – [Git (libro Amazon)] admin
Línia 1: Línia 1:
-Git (libro Amazon)+git (libro Amazon)
 {{tag>devops cursos git}} {{tag>devops cursos git}}
  
Línia 161: Línia 161:
 == Hooks, ejecutando código tras una orden Git == Hooks, ejecutando código tras una orden Git
 === estructura repositorio === estructura repositorio
-{{ :info:libros:pasted:20180903-052926.png }}+{{ :info:libros:pasted:20180903-052926.png?400 }} 
 + 
 +  * branches : sin uso actualmente 
 +  * config,HEAD,refs, objects : información dinámica 
 +  * el resto de ficheros se copian de una plantilla: 
 +    * hooks, description,branches,info 
 +    * la plantilla está en ''/usr/share/git-core/templates/'' y se puede modificar 
 +    * también se puede usar un directorio alternativo de plantilla con el parámetro **--template** con los comandos **clone** o **init** 
 +  * ''.git/info/exclude'' -> idem **.gitignore** pero solo afecta a la copia local 
 + 
 +==== paso a paso 
 +  * ''.git/objects'' : estructura directorios con los objetos git 
 +    - crea un SHA1 a partir del contenido y almacena como BLOB el fichero en la zona temporal 
 +    - almacena el nombre de fichero (o ficheros contenidos en la zona temporal) en un arbol 
 +    - se calcula el SHA1 del arbol y se almacena en **.git/objects** 
 +      - un arbol puede apuntar a otros árboles 
 +    - al hacer un commit, se crear un tercer tipo de objeto, que contiene enlaces a un árbol (el de más alto nivel) y metadatos 
 + 
 +=== refiriéndonos a objetos en git 
 +  * se puede usar ''git show'' para mostrar cualquier tipo de objeto git (BLOB,ARBOL,COMMIT) 
 +  * ''.git/refs'' guarda referencias a los objetos 
 +  * ''git show master^{tree}'' : se usa **^** para qualificar aquello que le precede, aunque solo hay **{tree}** 
 +  * ''git show master~1'' : **~1** indica el ancestro justo anterior 
 +  * ''git show master~4^{tree}'' 
 + 
 +=== comandos de alto y bajo nivel (fontanería y loza) 
 +  * fontanería : comandos bajo nivel 
 +  * loza: comandos alto nivel (usuario) 
 + 
 +==== las cañerias 
 +  * index : contiene a los que GIT ha de prestar atención 
 +  * objetos :  
 +    * ficheros: el contenido y el nombre almacenado en el árbol -> **blob** 
 +    * mensajes de commit -> **commit** 
 +    * etiquetas -> **tag** 
 +    * árboles -> **tree** 
 +  * ''git ls-tree <commit>'' : muestra la información de **.git/objects** de una manera más ordenada e indicando el tipo de objeto 
 +    * ''-r'' : añade el nombre de fichero 
 +  * ''git ls-files --stage'' : muestra los archivos que se han añadido al índice pero no se han pasado al árbol 
 +  * ''git cat-file -p <objeto>'' : nos muestra el contenido de un objeto 
 + 
 +== viva la diferencia 
 +  * ''git diff'' : muestra las diferencias entre el Index y el último commit 
 +    * ''--name-only'' 
 +    * ''name-status'' : muestra 1 letra con el tipo de cambio (A,D,M) 
 +    * ''--cached'' : muestra la diferencias entre el Index y los ficheros que han sido preparados para el commit 
 +  * ''git diff HEAD'' : diferencias entre el último commit y la Working Area 
 +  * ''git diff-index HEAD'' : compara el índice con algún árbol 
 +  * ''git diff-tree HEAD'' 
 + 
 +== los dueños de las tuberías - metadatos 
 +  * ''git var -l'' : listado de todas las variables disponibles definidas 
 +    * ''git var <variable>'' 
 +  * ''git config -l'' ofrece el mismo resultado 
 +  * uso de estos comandos para unificar el acceso a las mismos en diferentes OS 
 + 
 +== rev-parse 
 +  * recoge y procesa parámetros 
 +    * procesamiento de parámetros 
 +    * especificación de objetos 
 +    * búsqueda en directorios del repositorio 
 +  * ''git rev-parse --verify HEAD'' : muestra el SHA1 del HEAD verificando que existe 
 +  * ''git rev-parse HEAD@{1.month}'' : retorna SHA1 de commit de hace 1 mes 
 + 
 +== concepto de hooks 
 +  * ejecución progrma (shell,Perl,Python, etc..) ante un evento 
 +  * automatización de tareas 
 +  * directorio propio: **.git/hooks** 
 +  * solo se admite 1 hook por evento y tendrá el nombre del evento asociado (uso de symbolic links) 
 +{{ :info:libros:pasted:20180905-031800.png }} 
 + 
 +=== programando un hook básico 
 +  * examinar entorno y parámetros de entrada 
 +  * hacer cambios en el entorno, los ficheros y la salida 
 +  * salir con mensaje de error o ninguno si todo correcto 
 + 
 +comprueba si el nombre de usuario está en el mensaje de commit y si no, lo añade 
 +<code bash; title="prepare-commit-msg"> 
 +#|/bin/bash 
 +SOB=$(git config github.user) 
 +grep -qs "^$SOB" "$1" || echo ". Cambio por @SOB" >> "$1" 
 +</code> 
 + 
 +añade información al commit: 
 +<code bash> 
 +#!/bin/sh 
 + 
 +#Recuerda hacer 
 +# cp prepare-commit-msg.ejemplo prepare-commit-msg 
 +# chmod +x prepare-commit-msg 
 + 
 +STATS=$(git diff --cached --shortstat) 
 +echo ". Cambios en este commit\n  ${STATS}" >> "$1" 
 +</code> 
 + 
 +  * [[https://www.sitepoint.com/git-hooks-fun-profit/|Git Hooks for Fun and Profit]] 
 + 
  
  
  • info/libros/git.1535977776.txt.gz
  • Darrera modificació: 03/09/2018 05:29
  • per mate