¿Cuál es la diferencia entre git clone y checkout?

Respuestas:

337

La página del manual para el pago: http://git-scm.com/docs/git-checkout

La página del manual para clonar: http://git-scm.com/docs/git-clone

Para resumir, clonar es para recuperar repositorios que no tiene, el pago es para cambiar entre ramas en un repositorio que ya tiene.

Nota: para aquellos que tienen antecedentes SVN / CVS y nuevos en Git, el equivalente de git cloneen SVN / CVS es checkout. La misma redacción de diferentes términos a menudo es confusa.

August Lilleaas
fuente
41
checkouttambién se puede utilizar para otras cosas, como sobrescribir un archivo en su copia de trabajo con una versión de ese archivo de otra revisión.
svick
8
y cuando usas "pull" vs "checkout"?
Kokodoko
27
pull es una búsqueda más combinación, el pago es una operación local que solo opera en datos que ya se han obtenido. Entonces no es como svn checkout en absoluto.
Agosto Lilleaas
13
Al venir del mundo SVN, también estaba confundido. Wow ... que desastre. En un mundo ideal, obligaría a todos los fabricantes de sistemas de control de fuente a utilizar los mismos términos.
Zoltán Tamási
55
Fork es un término github y no está relacionado con git en sí.
August Lilleaas
123

git clone es buscar sus repositorios desde el servidor remoto de git.

git checkout es verificar el estado deseado de su repositorio (como ramas o archivos particulares).

Por ejemplo, actualmente está en la rama maestra y desea cambiar a la rama de desarrollo.

git checkout develop_branch

Por ejemplo, desea pagar a un estado particular de un archivo particular

git checkout commit_point_A -- <filename>

Aquí hay una buena referencia para que aprendas Git, te permite entender mucho más fácilmente.

Kit Ho
fuente
20
"desde el servidor remoto de git": no es necesario que el servidor sea remoto. git cloneTambién funcionará con repositorios locales.
SET
1
¡Gracias por el enlace a una referencia visual de git!
David Pointer
@Kit Ho: El enlace está bien como referencia, pero no es de mucha ayuda para alguien con preguntas básicas sobre git como la persona anterior. Como dice el artículo en sí, "Una vez que sepa un poco sobre cómo funciona git, este sitio puede solidificar su comprensión"
SN
Las definiciones circulares no son tan útiles. La palabra "buscar" utilizada para describir el clon es útil y agrega significado, pero la frase "pagar es pagar ..." no agrega significado, ni ayuda a distinguir la diferencia entre las dos operaciones.
C Perkins
11

Una cosa a notar es la falta de cualquier "Copia" dentro de git. Esto se debe a que ya tiene una copia completa en su repositorio local: su repositorio local es uno clonede sus repositorios ascendentes elegidos. Por lo tanto, tiene efectivamente un personal checkoutde todo , sin poner algún 'bloqueo' en esos archivos en el repositorio de referencia.

Git proporciona los valores hash SHA1 como mecanismo para verificar que la copia que tiene de un archivo / árbol de directorios / commit / repo es exactamente la misma que la utilizada por cualquiera que pueda declarar cosas como "Master" dentro de la jerarquía de confianza. ¡Esto evita todos esos 'bloqueos' que causan que la mayoría de los sistemas SCM se ahoguen (con los problemas habituales de copias privadas, grandes fusiones y sin control o administración real del código fuente ;-)!

Philip Oakley
fuente
44
La pregunta no menciona los bloqueos y se debe suponer de forma predeterminada en estos días que una persona no está familiarizada con este concepto, por lo que estas diferencias con los VCS antiguos solo se deben explicar si se le pregunta explícitamente.
wRAR
6

Simplemente git checkout tiene 2 usos

  1. Cambiar entre sucursales locales existentes como git checkout <existing_local_branch_name>
  2. Cree una nueva rama desde la rama actual usando la bandera -b. Suponga que si está en la rama maestra git checkout -b <new_feature_branch_name>, creará una nueva rama con el contenido de la rama maestra y cambiará a la rama recién creada

Puedes encontrar más opciones en el sitio oficial

Khader MA
fuente
Agradable. Esta -bopción es increíble, que crea una nueva sucursal local y la comprueba al mismo tiempo en un solo comando. ¡Me encantó!
RBT
2

checkout Se puede usar para muchos casos:

1er caso : cambiar de rama en el repositorio local Por ejemplo: git checkout exists_branch_to_switch

También puede crear una nueva rama y cambiar a través de este caso con -b

git checkout -b new_branch_to_switch

2do caso : restaurar archivo desde x rev

git checkout rev file_to_restore ...

Goms
fuente