Вы находитесь на странице: 1из 7

Git (Sistema de control de versiones distribuido)

1-Instalacion (Sistemas Debian)


$sudo apt-get install git

2-Configurando Git
2.1 Archivo /etc/gitconfig ---> git config --system (para todos los usuario)
2.2 Archivo ~/.gitconfig o ~/.config/git/config ---> git config --global (usuario actual)
3.2 Archivo config en el directorio Git (.git/config) archivo especifico del repo que se este usando

(La preferencia va de abajo hacia arriba)

3-Identidad
$git config --global user.name "nombre"
$git config --global user.email

4-Editor
$git config --global core.editor nano

5-Comprobando la configuracion
$git config --list
$git config user.name (configuracion de una clave en concreto)

6-Obteniendo ayuda

$ git help <verb>


$ git <verb> --help
$ man git-<verb>

Ej: git help config

7-Obteniendo un repositorio
Dos opciones tomar proyecto o directorio existente e importarlo en Git, o bien clonar un repositorio
existente en Git desde otro servidor

Iniciar un repositorio en un directorio existente


Ir al directorio del proyecto en cuestión y usar el siguiente comando

$git init
Crea un subdirectorio .git (donde se guarda la informacion necesaria para seguimiento y la
estructura del repo )
Nota:todavia no hay nada en el proyecto que este bajo seguimiento

Para empezar a controlar archivos de ese directorio


$git add *.c
$git add LICENSE
$git commit -m 'initial project version'

Clonando un repositorio existente

$git clone [url]


Recibe una copia de casi todos los datos que tiene el servidor,cada versión de cada archivo de la
historia del proyecto es descargada por defecto cuando se ejecuta ese git clone

Ej: si queremos clonar la librería de git llamada libgit2

$git clone https://github.com/libgit2/libgit2 <mylibgit>

Nota: <mylibgit> es opcional si queremos que el directorio se llame como ese parametro

Esto crea un directorio llamado libgit2, inicializa el directorio .git en su interior y descarga toda la
informacion de ese repo y saca una copia de trabajo de la ultima versión.

Nota: la conexión se puede hacer mediante https , o bien git o usuario@servidor:/ruta_del_repo.git


mediante ssh

Cada archivo del repo puede tener dos estados: rastreado y sin rastrear.Los primeros son aquellos
que estaban en la ultima instantanea del proyecto, puede estar sin modificar, modificados y
preparados, los segundos son todos los demas ,los archivos del directorio que no estaban en la
ultima instantanea y no estan en el area de preparacion

Cuando se clona por primera vez un repo todos los archivos estan rastreados y sin
modificar.Mientras se editan archivos , git los ve como modificados pues han sido cambiados desde
el ultimo commit, luego se preparan estos archivos modificados y finalmente se confirman todos los
cambios preparados , y se repite el ciclo

8-ver el estado de los ficheros


$git status

valores:
-untracked files
-changes to be commited
-changes not staged for commit

Dice tambien en que rama estamos

9-Rastrear archivos nuevos

Se añade un archivo nuevo al proyecto (no estaba en la anterior instantanea), en este ejemplo
README

$git add README

Se puede añadir una ruta al fichero, o bien todo un directorio

10-Preparar archivos modificados


$git add CONTRIBUTING.md

Como se ve git add , se utiliza para multiples propositos (rastrear, preparar,marcar como resuelto en
conflictos por combinacion),se entiende como añadir este contenido a la proxima confirmación.

Si ejecutamos git add sobre un archivo modificado para preparlo,pero posteriormente modificamos
el archivo por algo,deberemos ejecutar nuevamente git add sobre este archivo para que vuelva a
estar preparado para confirmar los cambios sobre el.

11-Estado abreviado
$git status -s
$git status –short

El estado aparece en dos columnas , la columna de la izquierda indica el estado preparado y la


columna de la derecha el estado sin preparar

12-Ignorar archivos

Tenemos que editar el fichero .gitignore

$ cat .gitignore

*.[oa]
*~

13-Ver los cambios preparados y no preparados

Respondera a las preguntas ¿que se ha cambiado pero aun no se ha preparado?¿que se ha preparado


y esta listo para confirmar?

$ git diff

Es similar al git status pero vemos el contenido de los ficheros

$git diff sin mas muetra lo que se ha cambiado pero aun no se ha preparado, es decir compara con
lo que esta en el directorio de trabajo con lo que esta en el area de preparacion, muestra los cambios
que se han hecho pero que aun no se han preparado

$git diff –staged


Muestra lo que se ha preparado y sera incluido en la proxima confirmación,compara los cambios
preparados con la ultima instantanea confirmada

Nota: $git diff –cached y $git diff –staged son sinonimos

14-Confirmar los cambios

$git commit
$git commit -v (en el editor se veran que cambios se estan confirmando)
$git commit -m “Mensaje asociado al commit”

Indica que rama se ha confirmado, que checksum tiene el commit , cuantos archivos han cambiado
y estadisticas sobre las lineas añadidas y eliminadas en el commit

15-Saltar el area de preparacion

$git commit -a -m “mensaje asociado al commit”


esto hace que git prepare automaticamente todos los archivos rastreados antes de confirmarlos,
ahorrando el paso.
16-Eliminar Archivos

$rm PROJECTS.md
$git status

si se hace así , se elimina el fichero del directorio de trabajo ,pero aparecerá en la sección “changes
not staged for commit” , esto es sin preparar en la salida de git status

si queremos borrarlo y ademas preparar la eliminacion del archivo en el area de preparacion


ejecutamos
$git rm PROJECTS.md

con lo que en la siguiente confirmacion se eliminara el archivo de la nueva instantanea

17-Cambiar de nombre a los archivos

$git mv file_from file_to


$git status

git detecta el renombramiento

Es similar a :
$mv README.md README
$git rm README.md
$git add README

18-Ver el historial de confirmaciones

$git log

Si no le pasamos parametros , muestra las confirmaciones de un determinado proyecto

$git log -p -2

muestra las dos ultimas confirmaciones

$git log –stat

añade estadisticas

$git log –pretty=oneline

muestra el checksum y la linea asociada al commit

$git log –pretty=format:”%h -%an,%ar :%s”

$git log –pretty=format:”%h %s” --graph

Estos son los mas basicos


Aqui hay mas:
https://git-scm.com/book/es/v2/Fundamentos-de-Git-Ver-el-Historial-de-Confirmaciones
19-Deshacer cosas

$git commit -amend

Ej:
git commit -m 'initial commit'
git add forgotten_file
git commit –amend

En este caso se nos olvido preparar el forgotten_file en el commit de arriba , a efectos de hacerlo asi
el segundo commit sobreescribe al primero

Ej:preparamos dos ficheros , pero solo queriamos meter uno en el area de preparacion
como lo sacamos
Previamente hemos hecho
$git add .
$git status

por ejemplo con README.md y CONTRIBUTING.md

queremos sacar CONTRIBUTING.md


hacemos
$git reset HEAD CONTRIBUTING.md
$git status

Deshacer un archivo modificado


$git checkout – CONTRIBUTING.md

20-Gestion de Repositorios Remotos

Si hemos clonado un repo con git clone [url] , y luego vamos al directorio en cuestion donde se ha
descargado el proyecto.

Ver los remotos


$git remote
$git remote -v

añadir repos remotos


$git remote add [nombre] [url]

traer y combinar remotos


git fetch [remote-name]

Nota:que diferencia hay con pull?

Solo trae datos al repositorio local, la combinacion debe ser manual

Enviar a tus remotos


$git push [nombre-remoto] [nombre-rama]
Nombres por defecto: origin master
$git push origin master

Inspeccionar un remoto
$git remote show [nombre-remoto]

Eliminar y renombrar Remotos:


$git remote rename last_name new_name
$git remote rm name

21-Etiquetas

Listar las etiquetas


$git tag
buscar eiquetas por un patron
$git tag -l 'v1.8.5'

Crear etiquetas
git utiliza dos tipos de etiquetas: ligeras y anotadas

una etiqueta ligera es muy parecido a una rama que no cambia, podría asimilarse a un puntero a un
commit especifico, sin embargo las etiquetas anotadas se guardan en la base de datos de git como
objetos enteros,se recomienda que se usen etiquetas anotadas,si se quiere guardar toda la
informacion asociada.

Etiqueta anotadas
$git tag -a v1.4 -m 'my version 1.4'
para ver la informacion
$git show

Etiquetas ligeras
$git tag v1.4-lw , no se le pasan parametros -a -s -m
$git show

Etiquetado tardio
Se puede etiquetar commits mucho tiempo despues de haberlos hecho
Ej:
$git log –pretty=oneline
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
$git tag -a v1.2 9fce....
$git tag
$git show v1.2

Compartir Etiquetas
Por defecto git push no transfiere las etiquetas a los servidores remotos,hay que enviarlas de forma
explicita

$git push origin [etiqueta]

Se pueden enviar varias a la vez


$git push origin –tags
Sacar etiquetar
En git no puedes sacar (check out) una etiqueta pues no es algo que se pueda mover.Si se quiere
colocar en el directorio de trabajo una version del repositorio que coincida con alguna etiqueta ,se
debe crear una rama nueva en esa etiqueta

$git checkout -b version2 v2.0.0.0

22-Alias
Se usan para abreviar comandos y no tener que escribirlos enteros
Ej
git config –global alias.co checkout
git config –global alias.br branch
git config –global alias.ci commit
git config –global alias.st status

git config –global alias.unstage 'reset HEAD –'


git config –global alias.last 'log -l HEAD'

Para ejecutar comandos externos , el comando en el alias deberia empezarse por !


Ej:
git config –global alias.visual “!gitk”

Enlaces:
http://codigolinea.com/2012/08/30/empezando-con-git-y-github/
Enlaces:
https://lineaporlinea.wordpress.com/2013/05/13/comenzando-con-git-y-github/
http://conociendogithub.readthedocs.io/en/latest/data/dinamica-de-uso/#crear-una-cuenta

Вам также может понравиться