Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.47.0 10/06/24
- 2.46.1 → 2.46.2 no changes
- 2.46.0 07/29/24
- 2.45.1 → 2.45.2 no changes
- 2.45.0 04/29/24
- 2.44.1 → 2.44.2 no changes
- 2.44.0 02/23/24
- 2.43.1 → 2.43.5 no changes
- 2.43.0 11/20/23
- 2.41.1 → 2.42.3 no changes
- 2.41.0 06/01/23
- 2.38.1 → 2.40.3 no changes
- 2.38.0 10/02/22
- 2.36.1 → 2.37.7 no changes
- 2.36.0 04/18/22
- 2.35.1 → 2.35.8 no changes
- 2.35.0 01/24/22
- 2.32.1 → 2.34.8 no changes
- 2.32.0 06/06/21
- 2.30.2 → 2.31.8 no changes
- 2.30.1 02/08/21
- 2.30.0 12/27/20
- 2.29.1 → 2.29.3 no changes
- 2.29.0 10/19/20
- 2.28.1 no changes
- 2.28.0 07/27/20
- 2.27.1 no changes
- 2.27.0 06/01/20
- 2.25.1 → 2.26.3 no changes
- 2.25.0 01/13/20
- 2.23.1 → 2.24.4 no changes
- 2.23.0 08/16/19
- 2.22.2 → 2.22.5 no changes
- 2.22.1 08/11/19
- 2.22.0 06/07/19
- 2.21.1 → 2.21.4 no changes
- 2.21.0 02/24/19
- 2.18.1 → 2.20.5 no changes
- 2.18.0 06/21/18
- 2.17.0 → 2.17.6 no changes
- 2.16.6 12/06/19
- 2.15.4 no changes
- 2.14.6 12/06/19
- 2.13.7 05/22/18
- 2.12.5 no changes
- 2.11.4 09/22/17
- 2.10.5 no changes
- 2.9.5 07/30/17
- 2.8.6 07/30/17
- 2.7.6 07/30/17
- 2.4.12 → 2.6.7 no changes
- 2.3.10 09/28/15
- 2.1.4 → 2.2.3 no changes
- 2.0.5 12/17/14
SINOPSIS
git clone
[--template=
<template-directory>] [-l
] [-s
] [--no-hardlinks
] [-q
] [-n
] [--bare
] [--mirror
] [-o
<name>] [-b
<name>] [-u
<upload-pack>] [--reference
<repository>] [--dissociate
] [--separate-git-dir
<git-dir>] [--depth
<depth>] [--
[no-
]single-branch
] [--no-tags
] [--recurse-submodules
[=
<pathspec>]] [--
[no-
]shallow-submodules
] [--
[no-
]remote-submodules
] [--jobs
<n>] [--sparse
] [--
[no-
]reject-shallow
] [--filter=
<filter-spec>] [--also-filter-submodules
]] [--
] <repository> [<directory>]
DESCRIPCIÓN
Clona un repositorio en un directorio nuevo creado, crea ramas de seguimiento remoto para cada rama en el repositorio clonado (visibles usando git branch --remotes
), y crea y hace check-out en una rama inicial que es bifurcada de la rama actualmente activa del repositorio clonado.
Después de clonar, ejecutar git fetch
sin argumentos actualizará todas las ramas con rastreo remoto, y git pull
sin argumentos además fusionará la rama «master» remota en la rama «master» actual, si la hay (esto no ocurre cuando se añade --single-branch
; lea más abajo).
La configuración predeterminada se consigue creando referencias a las head de la rama remota bajo refs/remotes/origin
e inicializando las variables de configuración remote.origin.url
y remote.origin.fetch
.
OPCIONES
-
-l
-
--local
-
Cuando el repositorio a clonar de, esta en un equipo local, esta bandera sobrepasa el mecanismo de transporte normal "consciente de Git" y clona el repositorio haciendo una copia de
HEAD
y todo bajo los directorios de objetos y referencias. Los ficheros bajo el directorio.git/objects/
son vinculados para ahorrar espacio cuando es posible.Si el repositorio es especificado como una ruta local (ej.
/ruta/a/repositorio
), este es el predeterminado, y --local es esencialmente una no-operación. Si el repositorio es especificado como una URL, entonces esta bandera es ignorada (y nunca usamos las optimizaciones locales). Especificando--no-local
ignorará el predeterminado cuando se proporcione/ruta/a/repositorio
, usando en su lugar el transporte regular de Git.Si los objetos en el directorio
$GIT_DIR/objects
del repositorio tienen ligas simbólicas o son ligas simbólicas la clonación fallará. Esta es una medida de seguridad para prevenir el copia inintencional de ficheros al dereferenciar ligas simbólicas.NOTA: esta operación puede competir con modificación concurrente a la fuente del repositorio, similar a correr
cp -r src dst
mientras se modificasrc
. -
--no-hardlinks
-
Forza el proceso de clonación desde un repositorio en un sistema de ficheros local para copiar los ficheros bajo el directorio
.git/objects
en lugar de usar hardlinks. Esto puede ser deseable si intentas hacer un respaldo de tu repositorio. -
-s
-
Cuando el repositorio a clonar esta en el equipo local, en lugar de usar hardlinks , automáticamente se configura
.git/objects/info/alternates
para compartir los objetos con el repositorio fuente. El repositorio resultante comienza sin tener algún objeto.NOTA: esta es posiblemente una operación peligrosa; no usarse a menos que entiendas lo que hace. Si clonas tu repositorio usando esta opción y luego borras ramas (o usas cualquier otro comando Git que haga a cualquier confirmación existente dereferenciada) en el repositorio fuente, algunos objetos pueden volverse no-referenciados (o colgados). Dichos objetos pueden ser eliminados por operaciones normales de Git (como
git commit
) que automáticamente llamangit maintenance run --auto
. (Ver git-maintenance[1]). Si esos objetos son eliminados y fueron referenciados por el repositorio clonado, entonces el repositorio clonado se corromperá.Nótese que ejecutando
git repack
sin la opción--local
en un repositorio clonado con--shared
, copiará objetos del repositorio fuente en un paquete en el repositorio clonado, quitando ahorros de espacio en disco declone --shared
. No obstante, es seguro ejecutargit gc
, el cual usa la opción--local
predeterminadamente.Si quieres romper la dependencia de un repositorio clonado con
--shared
de su repositorio origen, puedes simplemente ejecutargit repack -a
para copiar todos los objetos del repositorio origen en un paquete en el repositorio clonado. -
--reference
[-if-able
] <repositorio> -
Si el <repositorio> referencia esta en el equipo local, automáticamente se configura
.git/objects/info/alternates
para obtener los objetos del <repositorio> referencia. Usando un repositorio ya existente como un alterno requerirá que menos objetos sean copiados del repositorio siendo clonado, reduciendo costos de red y almacenamiento local. Cuando se usa--reference-if-able
, un directorio inexistente es saltado con una advertencia en lugar de abortar la clonación.NOTA: ver la NOTA para la opción
--shared
, y también la opción--dissociate
. -
--dissociate
-
Toma prestados los objetos de repositorios referencia especificados con la opciones
--reference
sólo para reducir transferencias de red, y deja de tomarlos prestados de ellos después de clonar haciendo las copias locales necesarias de los objetos prestados. Esta opción también se puede usar cuando se clona localmente de un repositorio que ya toma objetos prestados de otro repositorio, el nuevo repositorio tomará prestados los objetos del mismo repositorio, y esta opción puede ser usada para dejar de tomar prestados. -
-q
-
--quiet
-
Operar silenciosamente. El progreso no es reportado al flujo de error estándar.
-
-v
-
--verbose
-
Ejecutar verbosamente. No afecta el reporte de estado de progreso hacia el flujo de error estándar.
-
--progress
-
El estado de avance se indica en la salida de error estándar por defecto cuando esta está asociada a un terminal, a menos que se especifique
--quiet
. Esta bandera forza el estado de avance incluso cuando la salida de error estándar no es por terminal. -
--server-option=
<opción> -
Transmite la cadena de caracteres dada al servidor cuando haya comunicación utilizando la versión 2 del protocolo. La cadena de caracteres dada no debe contener ningún carácter NUL ni LF. La gestión que el servidor hace de sus opciones, incluyendo las desconocidas, es específica de cada servidor. Cuando se dan múltiples
--server-option=
<opción>, todas ellas se envían al otro lado en el orden listado en la línea de comandos. -
-n
-
--no-checkout
-
No hace checkout de HEAD después de completar la clonación.
-
--
[no-
]reject-shallow
-
Falla si la fuente del repositorio es un repositorio superficial. Se puede usar la variable de configuración
clone.rejectShallow
para especificar el valor predeterminado. -
--bare
-
Hace un repositorio Git básico. Esto es, en lugar de crear <directorio> y colocar los ficheros administrativos en <directorio>`/.git`, hace al <directorio> mismo el
$GIT_DIR
. Esto implica obviamente el--no-checkout
porque no hay dónde hacer checkout al árbol de trabajo. Además las heads de las ramas en el remoto son copiadas directamente a las heads de rama local correspondientes, sin mapearlas arefs/remotes/origin/
. Cuando se usa esta opción, no se crean ni las ramas de seguimiento remoto ni las variables de configuración relacionadas. -
--sparse
-
Emplea un checkout -escaso, sólo con los ficheros en el nivel superior del directorio que esten presentes inicialmente. Se puede usar el comando git-sparse-checkout[1] para crecer el directorio de trabajo cuando se necesite.
-
--filter=
<especificación-de-filtro> -
Usa la característica de clonado parcial y solicita que el servidor envíe un subconjunto de objetos alcanzables conforme a un filtro de objetos dado. Cuando se usa
--filter
la <especificación-de-filtro> dada se usa para el filtro de clonado parcial. Por ejemplo,--filter=blob:none
filtrará todos los blobs (contenido del fichero) hasta que lo necesite Git. También--filter=blob:limit=
<tamaño> filtrará todos los blobs cuyo tamaño sea por lo menos <tamaño>. Para mas detalles sobre especificaciones de filtros ver la opción--filter
en git-rev-list[1]. -
--also-filter-submodules
-
Además aplica el filtro de clonación parcial a cualquier submódulo en el repositorio. Requiere
--filter
y--recurse-submodules
. Esto puede habilitarse de forma predeterminada configurando la opción de configuraciónclone.filterSubmodules
. -
--mirror
-
Configura un espejo del repositorio fuente. Esto implica
--bare
. Comparado con--bare
,--mirror
no solo mapea ramas locales de la fuente a ramas locales en el objetivo, mapea todas las referencias (incluyendo ramas de seguimiento-remoto, notas, etc.) y configura una especificación de referencia de tal manera que todas las referencias sean sobre-escritas por ungit remote update
en repositorio objetivo. -
-o
<nombre> -
--origin
<nombre> -
En lugar de usar el nombre remoto
origin
para dar seguimiento al repositorio upstream, usa <nombre>. Anulaclone.defaultRemoteName
de la configuración. -
-b
<nombre> -
--branch
<nombre> -
En lugar de apuntar la HEAD recientemente creada a la rama a la que apunta HEAD del repositorio clonado, apunta a la rama <nombre>. En un repositorio no-básico, a esta rama se le hará checkout.
--branch
también puede tomar etiquetas y soltar la HEAD en ese commit en el repositorio resultante. -
-u
<paquete-a-subir> -
--upload-pack
<paquete-a-subir> -
Cuando se proporciona, y el repositorio a clonar se accesa por ssh, este especifica una ruta no predeterminada para la ejecución del comando en el otro extremo.
-
--template=
<directorio-de-plantilla> -
Especifica el directorio de donde se usarán las plantillas; (Ver la sección "DIRECTORIO DE PLANTILLAS" de git-init[1].)
-
-c
<clave>=
<valor> -
--config
<clave>=
<valor> -
Asigna una variable de configuración en el repositorio recientemente creado; este surte efecto inmediatamente después de que el repositorio es inicializado, pero antes de que el historial remoto sea traído o de que se les haga checkout a los ficheros. La -<clave>_ es en el mismo formato que espera git-config[1] (ej.
core.eol=true
). Si se proporcionan múltiples valores para la misma clave, cada valor se escribirá en el fichero de configuración. Esto hace seguro, por ejemplo, agregar especificaciones de referencia de fetch adicionales al origen remoto.Debido a limitaciones de la implementación actual, algunas variables de configuración no surten efecto hasta después del fetch y checkout inicial. Variables de configuración conocidas por no surtir efecto son:
remote.
<nombre>.mirror
yremote.
<nombre>.tagOpt
. En cambio, use las opciones correspondientes--mirror
y--no-tags
. -
--depth
<profundidad> -
Crea un clon superficial con un historial truncado al número especificado de commits. Implica
--single-branch
a menos que se ponga--no-single-branch
para traer historias cercanas a las puntas de todas las ramas. Si quieres clonar sub-módulos superficialmente, también pon--shallow-submodules
. -
--shallow-since=
<fecha> -
Crear un clon superficial con historial posterior al tiempo especificado.
-
--shallow-exclude=
<revisión> -
Crear un clon superficial con historial excluyendo commits alcanzables desde una rama remota o etiqueta especificada. Esta opción puede ser especificada múltiples veces.
-
--
[no-
]single-branch
-
Clona únicamente el historial hacia la punta de una sola rama, ya sea especificada por la opción
--branch
o por hacia donde apunteHEAD
de la rama remota. Fetchs posteriores en el repositorio resultante sólo actualizarán la rama de seguimiento remoto para la rama en la que se usó ésta opción en la clonación inicial. Si laHEAD
en el remoto no apuntó a alguna rama cuando se hizo la clonación--single-branch
, no se crea rama de seguimiento remoto. -
--no-tags
-
No clona ninguna etiqueta y define
remote.<remote>.tagOpt=--no-tags
en la configuración, lo que garantiza que futuras ejecuciones degit pull
ygit fetch
no seguirán ninguna etiqueta. Aún funcionarán las capturas de etiquetas explícitas que se realicen en el futuro (consulte git-fetch[1]).Puede ser usada en conjunto con
--single-branch
para clonar y mantener una rama sin otras referencias mas que una sola rama clonada. Esto es útil, por ejemplo, para mantener clones mínimos de la rama predeterminada de algún repositorio para indexado de búsqueda. -
--recurse-submodules
[=
<especificación-de-ruta>] -
Después de crear el clon, inicializa y clona sub-módulos con base en la <especificación-de-ruta> proporcionada. Si no se da una <especificación-de-ruta>, todos los sub-módulos son inicializados y clonados. Esta opción se puede dar múltiples veces para especificaciones de ruta consistentes en múltiples entradas. El clon resultante tendrá
submodule.active
configurado con la especificación de ruta proporcionada, o con "." (que significa todos los sub-módulos) si no se proporciona.Sub-módulos son inicializados y clonados usando sus configuraciones predeterminadas. Es equivalente a ejecutar
git submodule update --init --recursive <especificacion-de-ruta>
inmediatamente después de terminada la clonación. Esta opción es ignorada si el repositorio clonado no tiene un árbol de trabajo/checkout (ej. si cualquiera de--no-checkout
/-n
,--bare
, o--mirror
es dado) -
--
[no-
]shallow-submodules
-
Todos los sub-módulos clonados serán superficiales con profundidad 1.
-
--
[no-
]remote-submodules
-
Todos los sub-módulos clonados usarán el estatus de la rama de seguimiento-remoto del sub-módulo para actualizar el sub-módulo, en lugar del SHA-1 registrado en el super-proyecto. Equivalente a pasar
--remote
engit submodule update
. -
--separate-git-dir=
<directorio-git> -
En lugar de colocar el repositorio clonado donde se supone, se coloca en el directorio especificado, y luego se hace hacia él una liga simbólica Git agnóstica de sistema de ficheros. El resultado es que el repositorio Git puede ser separado del árbol de trabajo.
-
--ref-format=
<formato-de-referencia> -
Especifica el formato de almacenamiento de referencia dado para el repositorio. Los valores válidos son:
Warning
|
Missing See original version for this content. |
-
-j
<n> -
--jobs
<número> -
La cantidad de submódulos obtenidos al mismo tiempo. Por defecto usa el valor de la opción
submodule.fetchJobs
. - <repositorio>
-
El <repositorio> (posiblemente remoto) a clonar desde. Ver la sección URLS GIT a continuación para mas información sobre la especificación de repositorios.
- <directorio>
-
El nombre de un nuevo directorio para clonar hacia. Se usa la parte "humanizada" del repositorio fuente si no se da explícitamente un <directorio> (
repo
para/ruta/a/repo.git
yfoo
parahost.xz:foo/.git
). Sólo se permite clonar a un directorio existente si el directorio está vacío. -
--bundle-uri=
<uri> -
Antes de hacer fetch de un remoto, trae un empaquetado de una <uri> dada y desempaqueta los datos en el repositorio local. Las referencias en el empaquetado se almacenarán bajo el espacio de nombres oculto
refs/bundle/*
. Esta opción es incompatible con--depth
,--shallow-since
y--shallow-exclude
.
URLs de GIT
En general, URLs contienen información del protocolo de transporte, la dirección del servidor remoto, y la ruta al repositorio. Dependiendo del protocolo de transporte, alguna de esta información puede estar ausente.
Git soporta los protocolos ssh, git, http y https (además, se puede usar ftp y ftps para fetch, pero es ineficiente y obsoleto; no los use).
El transporte nativo (ej. git:// URL) no hace autenticación y debería ser usado con precaución en redes inseguras.
Se pueden usar las siguientes sintaxis con ellas:
-
ssh://
[<usuario>@
]<servidor>[:
<puerto>]/
<ruta-al-repositorio-git> -
git://
<servidor>[:<puerto>]/
<ruta-al-repositorio> -
http
[s
]://
<servidor>[:
<puerto>]/
<ruta-al-repositorio> -
ftp
[s
]://
<servidor>[:
<puerto>]/
<ruta-al-repositorio>
Se puede usar una sintáxis alternativa similar a scp con el protocolo ssh:
-
[<usuario>
@
]<servidor>:/
<ruta-al-repositorio>
Esta sintaxis sólo se reconoce si no hay diagonales antes del primer dos puntos. Esto ayuda a diferenciar una ruta local que contiene dos puntos. Por ejemplo la ruta local foo:bar
puede ser especificada como una ruta absoluta o ./foo:bar
para evitar ser malinterpretada como una url ssh.
Los protocolos ssh y git soportan adicionalmente expansión de ~
<nombre-de-usuario>:
-
ssh://
[<usuario>@
]<servidor>[:
<puerto>]/~
<usuario>/
<ruta-al-repositorio> -
git://
<servidor>[:
<puerto>]/~
<usuario>/
<ruta-al-repositorio-git> -
[<usuario>
@
]<servidor>:~
<usuario>/
<ruta-al-repositorio-git>
Para repositorios locales, Git también soporta nativamente las sintaxis siguientes:
-
/ruta/al/repositorio.git/
Estas dos sintaxis son casi equivalentes, excepto que la anterior implica la opción --local
.
git clone
, git fetch
y git pull
, pero no git push
, también aceptarán un fichero bundle adecuado. Ver git-bundle[1].
Cuando Git no sepa como manejar cierto protocolo de transporte, intentará usar el auxiliar remoto remote-
<transporte>, si existe alguno. Para solicitar explícitamente un auxiliar remoto, se puede usar la sintaxis siguiente:
-
<transporte>::<dirección>
donde <dirección> puede ser una ruta de acceso, un servidor y una ruta combinados, o bien una cadena semejante a un URL reconocible por el auxiliar remoto concreto que se invoque. Consulte gitremote-helpers[7] para obtener detalles.
Si hay un número grande de repositorios con nombres similares y quieres usar un formato diferente para ellos (de manera que las URLs que uses se reescriban a las URLs que funcionan), puedes crear una sección de configuración de la forma:
[url "<url-base-actual>"] insteadOf = <otra-url-base>
Por ejemplo, con esto:
[url "git://git.host.xz/"] insteadOf = host.xz:/ruta/a/ insteadOf = trabajo:
una URL como "trabajo:repo.git" o como "host.xz:/ruta/a/repo.git" serán re-escritas en cualquier contexto que tome una URL que sea "git://git.host.xz/repo.git".
Si quieres reescribir URLs sólo para push, puedes crear una sección de configuración de la forma:
[url "<url-base-actual>"] pushInsteadOf = <otra-url-base>
Por ejemplo, con esto:
[url "ssh://ejemplo.org/"] pushInsteadOf = git://ejemplo.org/
un URL como «git://ejemplo.org/ruta/al/repositorio.git» se convertirá en «ssh://ejemplo.org/ruta/al/repositorio.git» para los envíos, pero las incorporaciones segurán utilizando el URL original.
EJEMPLOS
-
Clona desde upstream:
$ git clone git://git.kernel.org/pub/scm/.../linux.git mi-linux $ cd mi-linux $ make
-
Hace un clon local que toma prestado desde el directorio actual, sin hacer checkout:
$ git clone -l -s -n . ../copia $ cd ../copia $ git show-branch
-
Clona desde upstream tomando prestado de un directorio local existente:
$ git clone --reference /git/linux.git \ git://git.kernel.org/pub/scm/.../linux.git \ mi-linux $ cd mi-linux
-
Crea un repositorio básico para publicar tus cambios al público:
$ git clone --bare -l /home/proj/.git /pub/scm/proj.git
CONFIGURACIÓN
Warning
|
Missing See original version for this content. |
Warning
|
Missing See original version for this content. |
Warning
|
Missing See original version for this content. |
GIT
Parte de la suite de git[1]