learnxinyminutes-docs/es-es/git-es.html.markdown

410 lines
11 KiB
Markdown
Raw Normal View History

2013-11-25 16:56:11 +00:00
---
category: tool
tool: git
contributors:
2013-11-25 18:09:10 +00:00
- ["Jake Prather", "http://github.com/JakeHP"]
2013-11-25 16:56:11 +00:00
translator:
2013-11-25 18:09:10 +00:00
- ["Raúl Ascencio", "http://rscnt.github.io"]
2013-11-25 16:56:11 +00:00
filename: LearnGit.txt
lang: es-es
2013-11-25 16:56:11 +00:00
---
Git es un sistema de control de versiones distribuido diseñado para manejar
2015-10-05 09:50:44 +00:00
cualquier tipo de proyecto, ya sea grande o pequeño, con velocidad y eficiencia.
2013-11-25 16:56:11 +00:00
Git realiza esto haciendo "snapshots" del proyecto, con ello permite
versionar y administrar nuestro código fuente.
## Versionamiento, conceptos.
2015-11-01 04:40:07 +00:00
### ¿Qué es el control de versiones?
2015-10-04 11:17:50 +00:00
El control de versiones es un sistema que guarda todos los cambios realizados en
2013-11-25 16:56:11 +00:00
uno o varios archivos, a lo largo del tiempo.
2015-11-01 04:40:07 +00:00
### Versionamiento centralizado vs versionamiento distribuido.
2013-11-25 16:56:11 +00:00
+ El versionamiento centralizado se enfoca en sincronizar, rastrear, y respaldar
archivos.
+ El versionamiento distribuido se enfoca en compartir los cambios realizados.
Cada cambio tiene un único identificador.
+ El versionamiento distribuido no tiene una estructura definida, incluso se
puede mantener el estilo de los repositorios SVN con git.
2015-10-04 11:17:50 +00:00
[Información adicional](http://git-scm.com/book/es/Empezando-Acerca-del-control-de-versiones)
2013-11-25 16:56:11 +00:00
2015-11-01 04:40:07 +00:00
### ¿Por qué usar Git?
2013-11-25 16:56:11 +00:00
2015-11-01 04:40:07 +00:00
* Se puede trabajar sin conexión.
2015-10-05 09:50:44 +00:00
* ¡Colaborar con otros es sencillo!.
* Derivar, crear ramas del proyecto (aka: Branching) es fácil.
2015-07-03 09:34:26 +00:00
* Combinar (aka: Merging)
2015-10-04 11:17:50 +00:00
* Git es rápido.
2013-11-25 16:56:11 +00:00
* Git es flexible.
## Arquitectura de Git.
### Repositorio
Un repositorio es un conjunto de archivos, directorios, registros, cambios (aka:
2015-11-01 04:40:07 +00:00
commits), y encabezados (aka: heads). Imagina que un repositorio es una clase,
2015-10-05 09:50:44 +00:00
y que sus atributos otorgan acceso al historial del elemento, además de otras
2013-11-25 16:56:11 +00:00
cosas.
2015-10-04 11:17:50 +00:00
Un repositorio esta compuesto por la carpeta .git y un "árbol de trabajo".
2013-11-25 16:56:11 +00:00
### Directorio .git (componentes del repositorio)
El directorio .git contiene todas las configuraciones, registros, branches, HEAD
y mas.
[Lista detallada.](http://es.gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html)
### Directorio de trabajo (componentes del repositorio)
2015-11-01 04:40:07 +00:00
Es básicamente los directorios y archivos dentro del repositorio. La mayoría de
2013-11-25 16:56:11 +00:00
las veces se le llama "directorio de trabajo".
2015-10-04 11:17:50 +00:00
### Índice (componentes del directorio .git)
2013-11-25 16:56:11 +00:00
2015-11-01 04:40:07 +00:00
El índice es el área de inicio en git. Es básicamente la capa que separa el
2015-10-05 09:50:44 +00:00
directorio de trabajo del repositorio en git. Esto otorga a los desarrolladores
más poder sobre lo que se envía y se recibe del repositorio.
2013-11-25 16:56:11 +00:00
### Commit (aka: cambios)
Un commit es una captura de un conjunto de cambios, o modificaciones hechas en
2015-10-05 09:50:44 +00:00
el directorio de trabajo. Por ejemplo, si se añaden 5 archivos, se eliminan 2,
2015-10-04 11:17:50 +00:00
estos cambios se almacenarán en un commit (aka: captura). Este commit puede ser o
2013-11-25 16:56:11 +00:00
no ser enviado (aka: "pusheado") hacia un repositorio.
### Branch (rama)
2015-10-04 11:17:50 +00:00
Un "branch", es escencialmente un apuntador hacia el último commit (cambio
registrado) que se ha realizado. A medida que se realizan más commits, este
apuntador se actualizará automaticamente hacia el ultimo commit.
2013-11-25 16:56:11 +00:00
2015-10-05 09:50:44 +00:00
### "HEAD" y "head" (componentes del directorio .git)
2013-11-25 16:56:11 +00:00
"HEAD" es un apuntador hacia la rama (branch) que se esta utilizando. Un
repositorio solo puede tener un HEAD activo. En cambio "head", es un apuntador a
2015-10-04 11:17:50 +00:00
cualquier commit realizado, un repositorio puede tener cualquier número de
2013-11-25 16:56:11 +00:00
"heads".
### conceptos - recursos.
2015-10-04 11:17:50 +00:00
* [Git para informáticos](http://eagain.net/articles/git-for-computer-scientists/)
2013-11-25 16:56:11 +00:00
* [Git para diseñadores](http://hoth.entp.com/output/git_for_designers.html)
## Comandos.
### init
2015-10-04 11:17:50 +00:00
Crear un repositorio de git vacio. Las configuraciones, información almacenada y
demás son almacenadas en el directorio ".git".
2013-11-25 16:56:11 +00:00
```bash
$ git init
```
### config
Se utiliza para configurar las opciones ya sea globalmente, o solamente en el
repositorio.
```bash
2015-10-05 09:50:44 +00:00
# Imprime y guarda algunas variables de configuracion básicas. (Globalmente)
2013-11-25 16:56:11 +00:00
$ git config --global user.email
$ git config --global user.name
$ git config --global user.email "corre@gmail.com"
$ git config --global user.name "nombre"
```
2015-10-05 09:50:44 +00:00
[Más sobre git config.](http://git-scm.com/book/es/Personalizando-Git-Configuración-de-Git)
2013-11-25 16:56:11 +00:00
### help
2015-10-04 11:17:50 +00:00
Otorga un accceso rápido a una guía extremadamente detallada de cada comando en
2013-11-25 16:56:11 +00:00
git. O puede ser usada simplemente como un recordatorio de estos.
```bash
2015-10-05 09:50:44 +00:00
# Una vista rápida de los comandos disponibles.
2013-11-25 16:56:11 +00:00
$ git help
# Chequear todos los comandos disponibles
$ git help -a
# Obtener ayuda especifica de un comando - manual de usuario
# git help <comando>
$ git help add
$ git help commit
$ git help init
```
### status
2015-10-04 11:17:50 +00:00
Muestra las diferencias entre el archivo índice y el commit al cual apunta el
2013-11-25 16:56:11 +00:00
HEAD actualmente.
```bash
2015-10-05 09:50:44 +00:00
# Mostrará el "branch", archivos sin añadir al repo, cambios y otras
2013-11-25 16:56:11 +00:00
# diferencias
$ git status
# Devuelve ayuda sobre el comando status.
$ git help status
```
### add
2015-10-05 09:50:44 +00:00
Para añadir archivos al árbol (directorio, repositorio) de trabajo. Si no se
utiliza `git add`, los nuevos archivos no se añadirán al arbol de trabajo, por
2015-10-04 11:17:50 +00:00
lo que no se incluirán en los commits (cambios).
2013-11-25 16:56:11 +00:00
```bash
# Añade un archivo en el directorio de trabajo actual.
$ git add FooBar.java
# Añade un archivo que se encuentra bajo un directorio.
$ git add /directorio/del/archivo/Foo.c
# Soporte para expresiones regulares!
$ git add ./*.py
```
### branch
2015-10-05 09:50:44 +00:00
Administra las ramas del repositorio ("branches"). Puedes ver, editar, crear y
2013-11-25 16:56:11 +00:00
borrar ramas ("branches"), usando este comando.
```bash
# lista todas las ramas (remotas y locales)
$ git branch -a
2015-10-05 09:50:44 +00:00
# Añadir una nueva rama ("branch").
2013-11-25 16:56:11 +00:00
$ git branch branchNueva
# Eliminar una rama.
$ git branch -d branchFoo
2015-10-05 09:50:44 +00:00
# Renombrar una rama.
2013-11-25 16:56:11 +00:00
# git branch -m <anterior> <nuevo>
$ git branch -m youngling padawan
2015-10-05 09:50:44 +00:00
# Editar la descripcion de la rama.
2013-11-25 16:56:11 +00:00
$ git branch master --edit-description
```
### checkout
Actualiza todos los archivos en el directorio de trabajo para que sean igual que
2015-10-04 11:17:50 +00:00
las versiones almacenadas en el índice, o en un árbol de trabajo especificado.
2013-11-25 16:56:11 +00:00
```bash
# Despachar un repositorio. - Por defecto la master branch. (la rama principal llamada 'master')
$ git checkout
# Despacha una rama especifica.
$ git checkout padawan
# Crea una nueva rama y cambia hacia ella, es igual a utilizar: "git brach jedi; git checkout jedi"
$ git checkout -b jdei
```
### clone
2015-10-04 11:17:50 +00:00
Clona, o copia, un repositorio existente en un nuevo directorio. También añade el
seguimiento hacia las ramas existentes del repositorio que ha sido clonado, lo que
2013-11-25 16:56:11 +00:00
permite subir (push) los archivos hacia una rama remota.
```bash
# Clonar la repo de jquery.
$ git clone https://github.com/jquery/jquery.git
```
### commit
2015-10-04 11:17:50 +00:00
Almacena el contenido actual del índice en un nuevo "commit". Este
commit contiene los cambios hechos más un resumen proporcionado por el desarrollador.
2013-11-25 16:56:11 +00:00
```bash
# realizar un commit y añadirle un mensaje.
$ git commit -m "jedi anakin wil be - jedis.list"
```
### diff
2015-10-04 11:17:50 +00:00
Muestra las diferencias entre un archivo en el directorio de trabajo, el índice
y los commits.
2013-11-25 16:56:11 +00:00
```bash
2015-10-05 09:50:44 +00:00
# Muestra la diferencia entre un directorio de trabajo y el índice.
2013-11-25 16:56:11 +00:00
$ git diff
2015-10-05 09:50:44 +00:00
# Muestra la diferencia entre el índice y los commits más recientes.
2013-11-25 16:56:11 +00:00
$ git diff --cached
2015-10-05 09:50:44 +00:00
# Muestra la diferencia entre el directorio de trabajo y el commit más reciente.
2013-11-25 16:56:11 +00:00
$ git diff HEAD
```
### grep
2015-10-04 11:17:50 +00:00
Permite realizar una busqueda rápida en un repositorio.
2013-11-25 16:56:11 +00:00
2015-10-05 09:50:44 +00:00
Configuraciones opcionales:
2013-11-25 16:56:11 +00:00
```bash
# Gracias a Travis Jeffery por compartir lo siguiente.
# Permite mostrar numeros de lineas en la salida de grep.
$ git config --global grep.lineNumber true
2015-10-05 09:50:44 +00:00
# Realiza una búsqueda mas legible, incluyendo agrupación.
2013-11-25 16:56:11 +00:00
$ git config --global alias.g "grep --break --heading --line-number"
```
```bash
2015-10-05 09:50:44 +00:00
# Busca por "unaVariable" en todos los archivos .java
2013-11-25 16:56:11 +00:00
$ git grep 'unaVariable' -- '*.java'
2015-10-05 09:50:44 +00:00
# Busca por una línea que contenga "nombreArreglo" y "agregar" o "remover"
2013-11-25 16:56:11 +00:00
$ git grep -e 'nombreArreglo' --and \( -e agregar -e remover \)
```
2015-10-05 09:50:44 +00:00
Más ejemplos:
- [Git Grep Ninja](http://travisjeffery.com/b/2012/02/search-a-git-repo-like-a-ninja)
2013-11-25 16:56:11 +00:00
### log
2015-10-05 09:50:44 +00:00
Muestra los commits (cambios) registrados en el repositorio.
2013-11-25 16:56:11 +00:00
```bash
# Muestra todos los commits.
$ git log
# Muestra un numero x de commits.
$ git log -n 10
2015-10-05 09:50:44 +00:00
# Muestra solo los commits que se han combinado en el historial.
2013-11-25 16:56:11 +00:00
$ git log --merges
```
### merge
Combina los cambios de commits realizados externamente dentro de la rama en la
que se trabaja.
```bash
# Combina la rama especificada en la rama actual.
$ git merge jediMaster
2015-10-05 09:50:44 +00:00
# Siempre genere un solo merge commit cuando se utiliza merge.
2013-11-25 16:56:11 +00:00
$ git merge --no-ff jediMaster
```
### mv
Renombra o mueve un archivo
```bash
2015-10-05 09:50:44 +00:00
# Renombrando un archivo.
2013-11-25 16:56:11 +00:00
$ git mv HolaMundo.c AdiosMundo.c
# Moviendo un archivo.
$ git mv HolaOtraVezMundo.c ./nuevo/directorio/NuevoArchivo.c
# Sustituye un archivo.
$ git mv -f archivoA archivoB
```
### pull
2015-10-05 09:50:44 +00:00
Trae los cambios de un repositorio y los combina en otro en una rama diferente.
2013-11-25 16:56:11 +00:00
```bash
2015-10-05 09:50:44 +00:00
# Actualiza el repositorio local, combinando los nuevos cambios
2013-11-25 16:56:11 +00:00
# de las ramas remotas "origin" y "master".
# git pull <remota> <rama>
$ git pull origin master
```
### push
2015-10-05 09:50:44 +00:00
Envía y combina los cambios de un repositorio local a un repositorio y rama remotos.
2013-11-25 16:56:11 +00:00
```bash
2015-10-05 09:50:44 +00:00
# Envía y combina cambios de un repositorio local hacia un repositorio remoto
2013-11-25 16:56:11 +00:00
# llamados "origin" y "master", respectivamente.
# git push <remota> <rama>
# git push => por defecto es lo mismo que poner => git push origin master
$ git push origin master
```
2015-10-05 09:50:44 +00:00
### rebase
2013-11-25 16:56:11 +00:00
Toma todos los cambios que fueron registrados en una rama, y los repite dentro
2015-10-05 09:50:44 +00:00
de otra rama. *No reescribe los commits que se han empujado antes a un repositorio público.*
2013-11-25 16:56:11 +00:00
```bash
# Integrar ramaExperimento dentro de la rama "master"
# git rebase <basebranch> <topicbranch>
$ git rebase master experimentBranch
```
2015-10-05 09:50:44 +00:00
[Información adicional.](http://git-scm.com/book/es/Ramificaciones-en-Git-Procedimientos-básicos-para-ramificar-y-fusionar)
2013-11-25 16:56:11 +00:00
2015-10-05 09:50:44 +00:00
### reset (precaución)
2013-11-25 16:56:11 +00:00
2015-10-05 09:50:44 +00:00
Reinicia el HEAD actual hacia un estado especificado. Esto permite deshacer
combinaciones (merges), pulls, commits, adds y más. Es un comando útil, pero
tambien peligroso si no se sabe lo que se hace.
2013-11-25 16:56:11 +00:00
```bash
2015-10-05 09:50:44 +00:00
# Reinicia el área principal, con el último cambio registrado. (deja los
2013-11-25 16:56:11 +00:00
# directorios sin cambios)
$ git reset
2015-10-05 09:50:44 +00:00
# Reinicia el área principal, con el último cambio registrado, y reescribe el
2013-11-25 16:56:11 +00:00
# directorio de trabajo.
$ git reset --hard
# Mueve la rama actual hacia el commit especificado (no realiza cambios a los
2015-10-05 09:50:44 +00:00
# directorios), todos los cambios aún existen el directorio.
2013-11-25 16:56:11 +00:00
$ git reset 31f2bb1
2015-10-05 09:50:44 +00:00
# Mueve la rama actual devuelta a un commit especificado, así como el
# directorio (borra todos los cambios que no fueron registrados y todos los
# cambios realizados después del commit especificado).
2013-11-25 16:56:11 +00:00
$ git reset --hard 31f2bb1
```
### rm
2015-10-05 09:50:44 +00:00
Lo contrario de git add, git rm elimina los archivos del directorio de trabajo
2013-11-25 16:56:11 +00:00
actual.
```bash
2015-10-05 09:50:44 +00:00
# Elimina FooBar.c
2013-11-25 16:56:11 +00:00
$ git rm FooBar.c
2015-10-05 09:50:44 +00:00
# Elimina un archivo de un directorio.
2013-11-25 16:56:11 +00:00
$ git rm /directorio/del/archivo/FooBar.c
```
2015-10-05 09:50:44 +00:00
## Información Adicional
2013-11-25 16:56:11 +00:00
* [tryGit - Una forma entretenida y rapida de aprender Git.](http://try.github.io/levels/1/challenges/1)
* [git-scm - Video-tutoriales](http://git-scm.com/videos)
* [git-scm - Documentacion](http://git-scm.com/book/es)
* [Atlassian Git - Tutoriales y Flujos de trabajo](https://www.atlassian.com/git/)
* [SalesForce Chuleta](https://na1.salesforce.com/help/doc/en/salesforce_git_developer_cheatsheet.pdf)
* [GitGuys](http://www.gitguys.com/)