Diferencia entre revisiones de «Gestión de versiones con Git»

De Wiki de EGC
Saltar a: navegación, buscar
(Introducción histórica: referencia a bitkeeper)
(Comenzando un repositorio)
 
(No se muestran 7 ediciones intermedias de 3 usuarios)
Línea 5: Línea 5:
 
[http://git-scm.com Git] fue elaborado para reemplazar a [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], un sistema de versiones no libre que se empleaba para la gestión de versiones del núcleo de [http://es.wikipedia.org/Linux Linux].
 
[http://git-scm.com Git] fue elaborado para reemplazar a [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], un sistema de versiones no libre que se empleaba para la gestión de versiones del núcleo de [http://es.wikipedia.org/Linux Linux].
  
= Órdenes básicas =
+
= Comenzando un repositorio =
  
* ''init'', para iniciar un repositorio, dentro de la carpeta en la que se quiere realizar la gestión de versiones.
+
La orden ''init'' se usa iniciar un repositorio, dentro de la carpeta en la que se quiere realizar la gestión de versiones.
  
<syntaxhighlight lang="c">
+
<source lang="c">
 
git init
 
git init
</syntaxhighligh>
+
</source>
  
Esto crea una carpeta de control .git, con toda la metainformación necesaria para que git sea operativo.
+
Esto crea una carpeta de control .git, con toda la metainformación necesaria para que git sea operativo. A partir de este momento, git está preparado para hacer el ''tracking'' del contenido.
  
* ''status'', permite saber el estado en el que se encuentra el repositorio.
+
La orden ''status'' nos permite saber el estado en el que se encuentra el repositorio.
  
<syntaxhighlight lang="c">
+
<source lang="c">
 
git status
 
git status
 
# On branch master
 
# On branch master
Línea 25: Línea 25:
 
#      ejemplo.py
 
#      ejemplo.py
 
nothing added to commit but untracked files present (use "git add" to track)
 
nothing added to commit but untracked files present (use "git add" to track)
</syntaxhighlight>
+
</source>
  
* ''add'', para añadir ficheros y contenido que se pretende versionar:
+
El ejemplo anterior muestra el contenido de la carpeta, en ella hay un fichero ''ejemplo.py'' que no está siendo versionado.
  
<syntaxhighlight lang="c">
+
Para añadir ficheros y contenido que se pretende versionar se usa la orden ''add'':
 +
 
 +
<source lang="c">
 
git add ejemplo.py
 
git add ejemplo.py
</syntaxhighligh>
+
</source>
  
 
Tras esto ''status'' indica:
 
Tras esto ''status'' indica:
  
<syntaxhighlight lang="c">
+
<source lang="c">
 
# On branch master
 
# On branch master
 
# Changes to be committed:
 
# Changes to be committed:
Línea 41: Línea 43:
 
#
 
#
 
#      new file:  ejemplo.py
 
#      new file:  ejemplo.py
</syntaxhighlight>
+
</source>
  
* ''commit'', para aplicar los cambios. Requiere un mensaje en el que la primera línea está reservada al título y las siguientes a la descripción. No envía ningún tipo de información por la red.
+
La orden ''commit'' se emplea para aplicar los cambios, en este caso la inclusión de un nuevo fichero. Requiere un mensaje en el que la primera línea está reservada al título y las siguientes a la descripción. Esta orden '''no envía''' ningún tipo de información por la red, es decir, los cambios aplicados permanecen en local.
  
<syntaxhighlight lang="c">
+
<source lang="c">
 
git commit -a
 
git commit -a
</syntaxhighlight>
+
</source>
  
 
La opción ''-a'' sirve para indicar que se añada también todo lo pendiente de cambios (ficheros modificados).
 
La opción ''-a'' sirve para indicar que se añada también todo lo pendiente de cambios (ficheros modificados).
  
* ''push'', envía los cambios acumulados al repositorio de origen (puede tratarse de un repositorio remoto disponible en un servidor, aunque no necesariamente).
+
La orden ''log'', muestra los cambios más recientes en el repositorio. Por defecto muestra la ''id'' del ''commit'' junto con el autor, la fecha y la descripción completa. Esto se puede modificar añadiendo el comando '''--oneline''' para que muestre solo el titulo del ''commit''.
 +
 
 +
= Accediendo a un repositorio remoto =
 +
 
 +
Cuando vamos a trabajar con un repositorio git ya existente empleamos ''clone''. Esta orden genera un repositorio copia de otro repositorio de origen (puede tratarse de un repositorio remoto disponible en un servidor, aunque no necesariamente). Por ejemplo:
  
* ''pull'', recupera los cambios acumulados en un repositorio (puede tratarse de un repositorio remoto disponible en un servidor, aunque no necesariamente).
+
<source lang="bash">
 +
git clone https://github.com/bitsandbooks/py-fibonacci.git
 +
</source>
  
* ''clone'', genera un repositorio copia de otro repositorio de origen (puede tratarse de un repositorio remoto disponible en un servidor, aunque no necesariamente).
+
Para enviar los cambios al servidor remoto, empleamos la orden ''push'' que envía los cambios acumulados al repositorio de origen (puede tratarse de un repositorio remoto disponible en un servidor, aunque no necesariamente).
  
<syntaxhighlight lang="c">
+
Para recibir actualizaciones del servidor remoto puedes emplear la orden ''pull'', que recupera los cambios acumulados en un repositorio (puede tratarse de un repositorio remoto disponible en un servidor, aunque no necesariamente).
git clone git://git.netfilter.org/iptables
 
</syntaxhighligh>
 
  
 
= Diferencias entre git y subversion =
 
= Diferencias entre git y subversion =
  
Las dos principales diferencias son:
+
Para los que estén familiarizados con subversion, las dos principales diferencias entre estas dos herramientas son las siguientes:
  
 
* git permite configuraciones completamente distribuidas, mientras que subversion sólo permite configuraciones centralizadas.
 
* git permite configuraciones completamente distribuidas, mientras que subversion sólo permite configuraciones centralizadas.
* git no requiere conectividad permanente a la red.
+
* git no requiere conectividad permanente a la red. La operación de ''commit'' está desacoplada de la operación de envío de cambios al servidor, es decir, ''svn commit'' equivale a un ''git commit'' seguido de un ''git push''.
  
 
Para los que están familiarizados con [http://subversion.tigris.org subversion], está disponible la siguiente documentación en el que se muestran las principales diferencias [http://git.or.cz/course/svn.html Git - SVN Crash Course].
 
Para los que están familiarizados con [http://subversion.tigris.org subversion], está disponible la siguiente documentación en el que se muestran las principales diferencias [http://git.or.cz/course/svn.html Git - SVN Crash Course].

Revisión actual del 16:00 15 oct 2014

Git es un sistema de versiones inicialmente diseñado y desarrollado por Linus Torvalds con el fin de ofrecer un sistema de versiones distribuido y eficiente para el núcleo de Linux, empleado hoy día en los populares sistemas operativos Android y Ubuntu.

Introducción histórica

Git fue elaborado para reemplazar a Bitkeeper, un sistema de versiones no libre que se empleaba para la gestión de versiones del núcleo de Linux.

Comenzando un repositorio

La orden init se usa iniciar un repositorio, dentro de la carpeta en la que se quiere realizar la gestión de versiones.

git init

Esto crea una carpeta de control .git, con toda la metainformación necesaria para que git sea operativo. A partir de este momento, git está preparado para hacer el tracking del contenido.

La orden status nos permite saber el estado en el que se encuentra el repositorio.

git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       ejemplo.py
nothing added to commit but untracked files present (use "git add" to track)

El ejemplo anterior muestra el contenido de la carpeta, en ella hay un fichero ejemplo.py que no está siendo versionado.

Para añadir ficheros y contenido que se pretende versionar se usa la orden add:

git add ejemplo.py

Tras esto status indica:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   ejemplo.py

La orden commit se emplea para aplicar los cambios, en este caso la inclusión de un nuevo fichero. Requiere un mensaje en el que la primera línea está reservada al título y las siguientes a la descripción. Esta orden no envía ningún tipo de información por la red, es decir, los cambios aplicados permanecen en local.

git commit -a

La opción -a sirve para indicar que se añada también todo lo pendiente de cambios (ficheros modificados).

La orden log, muestra los cambios más recientes en el repositorio. Por defecto muestra la id del commit junto con el autor, la fecha y la descripción completa. Esto se puede modificar añadiendo el comando --oneline para que muestre solo el titulo del commit.

Accediendo a un repositorio remoto

Cuando vamos a trabajar con un repositorio git ya existente empleamos clone. Esta orden genera un repositorio copia de otro repositorio de origen (puede tratarse de un repositorio remoto disponible en un servidor, aunque no necesariamente). Por ejemplo:

git clone https://github.com/bitsandbooks/py-fibonacci.git

Para enviar los cambios al servidor remoto, empleamos la orden push que envía los cambios acumulados al repositorio de origen (puede tratarse de un repositorio remoto disponible en un servidor, aunque no necesariamente).

Para recibir actualizaciones del servidor remoto puedes emplear la orden pull, que recupera los cambios acumulados en un repositorio (puede tratarse de un repositorio remoto disponible en un servidor, aunque no necesariamente).

Diferencias entre git y subversion

Para los que estén familiarizados con subversion, las dos principales diferencias entre estas dos herramientas son las siguientes:

  • git permite configuraciones completamente distribuidas, mientras que subversion sólo permite configuraciones centralizadas.
  • git no requiere conectividad permanente a la red. La operación de commit está desacoplada de la operación de envío de cambios al servidor, es decir, svn commit equivale a un git commit seguido de un git push.

Para los que están familiarizados con subversion, está disponible la siguiente documentación en el que se muestran las principales diferencias Git - SVN Crash Course.