Instalación en Ubuntu y uso básico de GIT, parte II

Continuamos con la Instalación y uso básico de Git…

GIT

GIT es un sistema de control de versiones distribuido, bastante diferente a SVN o CVS

En local no se almacena únicamente la copia de trabajo con la ultima versión del software si no que tenemos una copia completa del repositorio.

Esto significa que no hay que “ir” al servidor central para las operaciones contra el repositorio, lo cual incrementa enormemente acciones como consultar la historia de un archivo y agiliza todo el proceso con el repositorio. Prácticamente se puede realizar todo el trabajo típico contra un repositorio sin tener que estar conectado al repositorio central.

Además, guarda los datos como snapshots en vez de como diferencias respecto de una versión base

Usando GIT

Hay documentación exhaustiva y muy buena en la web sobre GIT. Solo por citar algún sitio, tenemos

Existen varios sitios que nos pueden alojar nuestros repositorios, si no queremos/podemos tener uno propio. Entre los más conocidos están estos dos:

GIThub, que nos permite crear de forma gratuita repositorios únicamente públicos (aunque ilimitados en número y colaboradores)

Bitbucket, que permite repositorios privados ilimitados pero con un máximo de 5 usuarios en su plan gratuito.

Empecemos configurándolo. GIT guarda la configuración en tres niveles:

Usuario

Con la opción –global podemos almacenar valores para el usuario

Usa el archivo ~/.GITconfig

Repositorio

en .GIT/config almacena valores para el repositorio en el que se crea.

Para todos los repositorios

en /etc/GITconfig se guarda la configuración para todos los repositorios, pasando la opción –system

Una de las primeras cosas a configurar es nuestro usuario y el proxy, si estamos detrás de uno.

$ GIT config --global user.name "John Doe" 
$ GIT config --global user.email johndoe@example.com 
$ GIT config --global http.proxy http.proxy=http://usuario:contraseña@nombreProxy: puerto 

O el editor a usar para los comentarios y otros mensajes…

$ GIT config --global core.editor emacs 

O la herramienta para comparar diferencias a la hora de resolver conflictos…

$ GIT config --global merge.tool vimdiff 

Para ver los valores configurados, solo hay que hacer: GIT config –list

Algunas opciones interesantes son estas

user.name=sbgermanm
user.email=sbgermanm@gmail.com
http.proxy=http://usuario:contraseña@nombreProxy: puerto

Para cerrar el artículo, voy a poner algunos comandos básicos, en una secuencia más o menos posible.

En el servidor

En el servidor, creamos un repositorio central creamos un directorio para nuestros proyectos

$ mkdir projects 
$ cd projects/ 

Dentro de él, un directorio para los repositorios que creemos

~/projects$ mkdir repos                                                                                                         
~/projects$ cd repos 

Crearemos un directorio para el primero de esos repositorios

~/projects/repos$ mkdir project.GIT 
~/projects/repos$ cd project.GIT/ 

Ahora creamos un repositorio GIT

~/projects/repos/project.GIT$ GIT init --bare 

En local

Ahora que ya tenemos el repositorio central, creamos una copia local del repositorio (suponiendo que ya está configurado el SSH)

$ GIT clone usuario@servidor:projects/repos/project.GIT  (1)

Como está vacío, nos lanzará una advertencia bastante lógica

warning: You appear to have cloned an empty repository.

También podemos hacer un repositorio vacio (2)

$ GIT init 

Y despues configurar el remoto

$ GIT remote add origin user@server:~/repos/project.GIT/ 

o también

$GIT config remote.origin.url "usuario@servidor:/projects/repos/project.GIT" 

(es posible clonar un repositorio existente como está en (1) o podemos crear uno nuevo en nuestra maquina y configurar el remoto como en (2), es exactamente lo mismo)

Creamos un archivito con cualquier cosa

$ vi readme.txt 

Ahora, vamos a añadir el archivo al indice repositorio local

$ GIT add . 

Si ejecutamos “GIT status” el archivo readme.txt aparecerá como “staged

Lo siguiente seria subir esos cambios al repositorio local…

$ GIT commit -m "primer archivo" 

Y así podríamos seguir trabajando en local, tanto nosotros como cualquiera que tenga acceso a la ruta donde lo tenemos.

Cuando queramos subir al repositorio “central”, haremos lo siguiente

$ GIT push origin master

Creación de ramas y merges

Para crear una nueva rama llamada “experimento”,

$ GIT branch experimento 

Para obtener la lista de todas las ramas existentes

$ GIT branch 

experimento

* master

El asterisco marca nuestra rama actual.

Para cambiarnos a la rama experimento:

$ GIT checkout experimento

[Editamos el archivo y lo subirlo]

$ GIT commit -a 

Volvemos a la rama principal.

$ GIT checkout master 

[Editamos el archivo]

$ GIT commit -a 
$ GIT merge experimental 

Si no hay conflictos en los cambio, ya está. En caso contrario podremos ver las diferencias:

$ GIT diff 

Si hay conflictos, se mostrará marcas en la izquierda de las líneas problemáticas y GIT commit no funcionaria, diría algo como  esto: file.txt: needs merge

$GIT status

Con GIT status podemos listar los archivos no mergeados. Los archivox con conflictos tendrán algo como esto:

<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt

Solo tenemos que editar los archivos para resolver los conflictos y entonces:

$ GIT add file.txt 
$ GIT commit 

Ahora subimos el resultado del merge

$GIT commit -a 

Una vez finalizado el trabajo en la rama “experimento”, podemos borrarla:

$ GIT branch -d experimento

Si ni siquiera queremos mergear la rama y solo queremos borrarla

$ GIT branch -D prueba_basura 

Y esto es todo. Ha quedado un poco extenso, pero creo que son las instrucciones mínimas para lanzar desde cero nuestro propio repositorio.

6 pensamientos en “Instalación en Ubuntu y uso básico de GIT, parte II

  1. julian

    en este paso —> $ GIT clone usuario@servidor:projects/repos/project.GIT (1)
    que debo poner en donde dice:: “usuario” y en “servidor”

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *