domingo, 21 de octubre de 2012

GIT : Guía Rápida : Chuleta


INSTALAR GIT
$ aptitude install git-core # instala las herramientas básicas de git.

NOTA: En Debian Sid
$ aptitude install git


gitk : herramienta gráfica.
$ aptitude install gitk # esta herramienta gráfica nos permite visualizar repositorios de git.



INICIALIZAR UN REPOSITORIO

$ git init # Crea un repositorio vacío en el directorio actual, o reinicializa un repositorio existente.
$ git init directory_name # Crea un repositorio vacío en el directorio "directory_name"

$ git clone remote_url # clona un repositorio remoto. Si pasamos como argumento un directorio local, este comando clona el repositorio local.

$ git clone --depth 1 git://git.sip.router.org/sip-router kamailio # clona las fuentes de sip-router, creando un directorio local llamado kamailio. La opción "depth 1" indica que sólo tomamos una revisión de la historia. Ésto reduce el tamaño de la historia a descargar, pero inhabilita los comandos clone, fetch, push y pull en ese repositorio. Por eso sólo es adecuado para generar parches.

$ git clone source_repo dest_repo # clona un repositorio local "source_repo" en otro repositorio local "dest_repo", si ambos son directorios.

$ git clone file:///path/to/source/repo file:///path/to/dest/repo # otra manera de especificar directorios locales.
De esta manera estamos seguros de que git no usará "hard links" cuando clone el repositorio fuente.
$ git clone --no-hardlinks source_local_repo dest_local_repo # clona un repositorio y copia los ficheros objeto en lugar de usar "hardlinks" para los objetos locales del repositorio.


GIT SVN

Git svn es una herramienta que nos permite utilizar git sobre un repositorio svn. Proporciona un flujo bidireccional de cambios entre el repositorio de Subversion y el de git.

$ man git-svn

$ aptitude install git-svn

$ git svn init --stdlayout # Crea un repositorio vacío para git svn usando la plantilla estandar.
$ git svn fetch # Baja los metadatos de últimas revisiones no actualizadas del repositorio remoto.

Clona un repositorio remoto svn:
comando equivalente svn: $ svn checkout http://foo.bar.com
$ git svn clone --stdlayout http://foo.bar.com

Para actualizar el repositorio local:
svn equivalent command: $ svn update
$ git svn rebase

Para subir tus cambios al repositorio remoto:
$ get svn dcommit

Referencia para Git svn
Git - SVN Crash Course

MOSTRAR LOS LOGS
$ git log # muestra el log de cambios general.
$ git log -5 # muestra el log de los últimos 5 cambios.
$ git log file_name # muestra el log de cambios para el fichero "file_name".
$ git log branch_name # muestra el log de cambios para la rama "branch_name".

MUESTRA LAS DIFERENCIAs
$ git diff # muestra los cambios entre los ficheros actuales y el último commit.
$ git diff HEAD # Lo mismo que el comando anterior.
$ git diff HEAD~1 # Muestra las diferencias entre los ficheros actuales y los anteriores al último commit.
$ git diff HEAD~2 HEAD~1 # Muestra las diferencias entre el penúltimo commit y el commit antepenúltimo.
$ git diff commit_1 commit_2 # muestra las diferencias entre los commits: commit_2 y commit_1. $ git log muestra los identificadores de los commits.
No es necesario escribir los identificadores de los commits completos, sólo los primeros caracteres para identificarlos uńivocamente.

$ git diff branch_1 branch_2 # muestra las diferencias entre la cabeza en en la rama "branch_1" y la cabeza en al rama "branch_2".
$ git diff branch_1 branch_2 directory # muestra las diferencias para el directorio "directory" entre la cabeza de la rama "branch_1" y la cabeza en la rama "branch_2".

BÚSQUEDA DE PATRONES
$ git grep -i foo # busca el patrón foo en los ficheros seguidos por git. La opción -i realiza una búsqueda sin distinguir mayúsculas de minúsculas.

STATUS
$ git status # muestra el estado del árbol de trabajo.

MUESTRA OBJETOS
$ git show tag_name # muestra el objeto "tag_name".
$ git show HEAD # muestra el último commit.
$ git show HEAD~1 # muestra el anterior al último commit.

LISTA TODOS LOS FICHEROS
$ git ls-files # lista todos los ficheros.

TAGS
$ git tag # muestra los tags
$ git tag tag_name branch_name # Añade un tag llamado "tag_name" en la rama "branch_name".
$ git tag -d tag_name # borra el tag "tag_name".

RAMAS
$ git branch -r # muestra las ramas remotas que sigue el repositorio.
$ git branch # muestra las ramas locales.
$ git branch branch_name # crea la rama "branch_name".
$ git branch -D foo # borra la rama foo.

$ git checkout master # cambia a la rama "master".
$ git checkout -b local_name remote_name # crea la rama local "local_name" para seguir a la rama remota "remote_name".

GIT CHECKOUT
$ git checkout branch_name # cambia a la rama "branch_name".
$ git checkout file_name # recupera el fichero "file_name" de la cabecera del repositorio y lo restaura.
$ git checkout -b local_name remote_name # crea la rama local "local_name" para seguir a la rama remota "remote_name".


AÑADE Y BORRA FICHEROS Y DIRECTORIOS DEL ÍNDICE DEL REPOSITORIO

Añade ficheros y directorios al índice del repositorio:
$ git add file_name # Añade el fichero "file_name" al índice del repositorio.
$ git add directory_name # Añade el directorio recursivamente al índice del repositorio.

Borra el fichero del índice sin borrar el fichero local:
$ git rm --cached file_name

Borra el fichero del índice y de la copia local:
$ git rm file_name


CONFIGURA EL NOMBRE Y EMAIL DEL AUTOR

Es recomendable configurar el nombre y email antes del primer commit, porque los cambios en la configuración sólo afectan a los commits siguientes.
Los commits existentes mantienen la información con la que fueron creados.
Hay dos maneras: configurar las variables de entorno o cambiando la configuración global.

Cambiar las variables de entorno
p.ej: GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME y GIT_AUTHOR_EMAIL
Ésto sobreescribirá las configuraciones de git-config si están definidas.

$ alias git_commit_as_me='env
GIT_AUTHOR_EMAIL="me@foo.bar.net"
GIT_AUTHOR_NAME="My Name here" git commit'


Al hacer commits, p.ej:
$ git_commit_as_me -m "whatever" -a


Cambiar la configuración global:
Ésto cambia el email y el nombre del usuario en todos los repositorios de git, guardando los cambios de configuración en ~/.gitconfig
$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "my_email@foo.bar.com"

Entonces
$ git commit -m "whatever" -a
utilizará tu nombre y email para los commits que realices.


HACIENDO COMMIT DE LOS CAMBIOS
$ git commit -m "message for the commit." -a # hace commit de los cambios al repositorio.
$ git commit -m "message for the commit." file_name # hace commit de los cambios del fichero "file_name".

$ git commit --amend # Cambia el último commit. Normalmente se usa para cambiar el último mensaje de commit.

SELECCIONA UN COMMIT de otra rama, repositorio remoto, etc, y hace commit en al rama actual del repositorio.
$ git cherry-pick commit_id

DESHABILITA EL PAGINADOR
$ git --no-pager diff # deshabilita el paginador (p.ej: less) cuando mostramos la salida de git diff.

AYUDA DE GIT
$ git help init # muestra la ayuda de git para el comando init.
$ git help filter-branch # muestra la ayuda sobre el comando "filter-branch".
Lo mismo para cualquier otro comando de git.


GIT REMOTE
$ git remote # muestra todas las configuraciones remotas de nuestro repositorio.
$ git remote show origin # muestra la información sobre la configuración remota denominada "origin".

$ git remote add remote_config_name url # añade una configuración remota para la url "url" y le asígna el nombre "remote_config_name".
$ git remote rm config_name # borra el nombre remoto "config_name" de nuestra configuración de remotos. Toda la configuración relativa a ese remoto y las tramas remotas que sigue serán borradas.

$ git remote update # actualiza la información de los remotos de nuestro repositorio.


LIMPIANDO
$ git clean -d -f # limpia ficheros y directorios que no sean seguidos por git en nuestro repositorio.

MUESTRA LAS DIFERENCIAS ENTRE EL REPOSITORIO LOCAL Y LOS REMOTOS
$ git branch -r
$ git remote # muestra los nombres de las configuraciones remotas.
> origin
$ git fetch origin
$ git diff HEAD origin
ó
$ git diff master origin/master


CAMBIA ALGO EN UN CÓMMIT
# Hay que seleccionar un commit por debajo del commit que queremos cambiar.
$ git rebase -i HEAD~5
Cambia en el editor "pick" por "edit" (se cuidadoso).
# Realiza los cambios pertinentes
p.ej: $ git commit --amend
# Para terminar
$ git rebase --continue

BORRAR COMMITS
# Borra el último commit para siempre
$ git reset --hard HEAD~1

# Borra el último commit pero mantiene sus cambios sin hacer commit.
$ git reset --soft HEAD~1
ó
$ git reset HEAD~1

# Borra completamente los últimos tres commits.
$ git reset --hard HEAD~3

OBTENER LOS CAMBIOS DEL REMOTO
$ git fetch remote_name # ó $ git fetch
$ git pull

$ git pull origin master # toma los cambios de la rama master remota y los mezcla en la rama local.

CREAR Y APLICAR PARCHES
$ git format-patch -1 # Crea un parche para el último commit.

$ git format-patch -2 # Crea dos parches, para los dos últimos commits.

Para aplicar un parche:
$ git am patch_name


BORRAR UN DIRECTORIO EN TODOS LOS COMMITS
$ git filter-branch --tree-filter 'test -d src && rm -rf src || echo "Nothing to do"' --force -- --all

BORRAR TODOS LOS COMMITS CON EL REGISTRO DE CAMBIOS VACÍO
$ git filter-branch --tree-filter '' --prune-empty --force -- --all


REFERENCIA

$ man git
$ man git filter-branch
$ man git pull
$ man git-help # idéntico a $ man git help
$ man git grep

Pro Git Book


TRADUCIDO DE:


Git Command Quick Reminder

No hay comentarios:

Publicar un comentario