git clone
El comando 'git clone` es en realidad una especie de envoltura
alrededor de varios otros comandos. Éste crea un nuevo directorio, entra
en él y ejecuta
git init
para que sea un repositorio vacío de Git, añade uno remoto (git remote add
) hacia la dirección URL que se le pasa (por defecto llamado origin
), ejecuta un git fetch
de ese repositorio remoto y después activa el último commit en el directorio de trabajo con git checkout
.Clonando un repositorio existente
Si deseas obtener una copia de un repositorio Git existente — por
ejemplo, un proyecto en el que te gustaría contribuir — el comando que
necesitas es
git clone
.
Si estás familizarizado con otros sistemas de control de versiones como
Subversion, verás que el comando es "clone" en vez de "checkout". Es
una distinción importante, ya que Git 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 ejecutas git clone
.
De hecho, si el disco de tu servidor se corrompe, puedes usar cualquiera
de los clones en cualquiera de los clientes para devolver al servidor
al estado en el que estaba cuando fue clonado (puede que pierdas algunos
hooks del lado del servidor y demás, pero toda la información acerca de
las versiones estará ahí) — véase Configurando Git en un servidor para más detalles.
Puedes clonar un repositorio con
git clone [url]
.
Por ejemplo, si quieres clonar la librería de Git llamada libgit2 puedes hacer algo así:$ git clone https://github.com/libgit2/libgit2
Esto crea un directorio llamado
libgit2
, inicializa un directorio .git
en su interior, descarga toda la información de ese repositorio y saca una copia de trabajo de la última versión.
Si te metes en el directorio libgit2
, verás que están los archivos del proyecto listos para ser utilizados.
Si quieres clonar el repositorio a un directorio con otro nombre que no sea libgit2
, puedes especificarlo con la siguiente opción de línea de comandos:$ git clone https://github.com/libgit2/libgit2 mylibgit
Ese comando hace lo mismo que el anterior, pero el directorio de destino se llamará
mylibgit
.
Git te permite usar distintos protocolos de transferencia.
El ejemplo anterior usa el protocolo
https://
, pero también puedes utilizar git://
o usuario@servidor:ruta/del/repositorio.git
que utiliza el protocolo de transferencia SSH.
En Configurando Git en un servidor
se explicarán todas las opciones disponibles a la hora de configurar el
acceso a tu repositorio de Git, y las ventajas e inconvenientes de cada
una.
Para configurar por primera vez un servidor de Git, hay que exportar un
repositorio existente en un nuevo repositorio vacío - un repositorio que
no contiene un directorio de trabajo.
Esto es generalmente fácil de hacer.
Para clonar el repositorio con el fin de crear un nuevo repositorio
vacío, se ejecuta el comando clone con la opción
--bare
.
Por convención, los directorios del repositorio vacío terminan en .git , así:$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.
Deberías tener ahora una copia de los datos del directorio Git en tu directorio
my_project.git
.
Esto es más o menos equivalente a algo así:$ cp -Rf my_project/.git my_project.git
Hay un par de pequeñas diferencias en el archivo de configuración; pero para tú propósito, esto es casi la misma cosa.
Toma el repositorio Git en sí mismo, sin un directorio de trabajo, y crea un directorio específicamente para él solo.
Clonación de un Proyecto con Submódulos
Aquí clonaremos un proyecto con un submódulo.
Cuando clona tal proyecto, de forma predeterminada obtiene los
directorios que contienen submódulos, pero ninguno de los archivos
dentro de ellos aún:
$ git clone https://github.com/chaconinc/MainProject
Cloning into 'MainProject'...
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 14 (delta 1), reused 13 (delta 0)
Unpacking objects: 100% (14/14), done.
Checking connectivity... done.
$ cd MainProject
$ ls -la
total 16
drwxr-xr-x 9 schacon staff 306 Sep 17 15:21 .
drwxr-xr-x 7 schacon staff 238 Sep 17 15:21 ..
drwxr-xr-x 13 schacon staff 442 Sep 17 15:21 .git
-rw-r--r-- 1 schacon staff 92 Sep 17 15:21 .gitmodules
drwxr-xr-x 2 schacon staff 68 Sep 17 15:21 DbConnector
-rw-r--r-- 1 schacon staff 756 Sep 17 15:21 Makefile
drwxr-xr-x 3 schacon staff 102 Sep 17 15:21 includes
drwxr-xr-x 4 schacon staff 136 Sep 17 15:21 scripts
drwxr-xr-x 4 schacon staff 136 Sep 17 15:21 src
$ cd DbConnector/
$ ls
$
El directorio
DbConnector
está ahí, pero está vacío.
Debe ejecutar dos comandos: git submodule init
para inicializar su archivo de configuración local, y git submodule update
para buscar todos los datos de ese proyecto y verifique la commit adecuada que figura en su superproyecto:$ git submodule init
Submodule 'DbConnector' (https://github.com/chaconinc/DbConnector) registered
for path 'DbConnector'
$ git submodule update
Cloning into 'DbConnector'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 0), reused 11 (delta 0)
Unpacking objects: 100% (11/11), done.
Checking connectivity... done.
Submodule path 'DbConnector': checked out 'c3f01dc8862123d317dd46284b05b6892
c7b29bc'
Ahora su subdirectorio
DbConnector
está en el estado exacto en el que estaba cuando hizo commit antes.
Sin embargo, hay otra manera de hacer esto que es un poco más simple. Si pasa
--recursive
al comando git clone
, se inicializará y actualizará automáticamente cada submódulo en el repositorio.$ git clone --recursive https://github.com/chaconinc/MainProject
Cloning into 'MainProject'...
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 14 (delta 1), reused 13 (delta 0)
Unpacking objects: 100% (14/14), done.
Checking connectivity... done.
Submodule 'DbConnector' (https://github.com/chaconinc/DbConnector) registered
for path 'DbConnector'
Cloning into 'DbConnector'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 0), reused 11 (delta 0)
Unpacking objects: 100% (11/11), done.
Checking connectivity... done.
Submodule path 'DbConnector': checked out 'c3f01dc8862123d317dd46284b05b6892c7
b29bc'
fuente : https://git-scm.com/book/es/
No hay comentarios:
Publicar un comentario