Qual é a diferença entre git clone e checkout?

Respostas:

337

A página de manual do checkout: http://git-scm.com/docs/git-checkout

A página de manual do clone: http://git-scm.com/docs/git-clone

Para resumir, clone é para buscar repositórios que você não possui, o checkout é para alternar entre ramificações em um repositório que você já possui.

Nota: para aqueles que têm um histórico de SVN / CVS e são novos no Git, o equivalente git cloneem SVN / CVS é checkout. A mesma formulação de termos diferentes é frequentemente confusa.

August Lilleaas
fonte
41
checkouttambém pode ser usado para outras coisas, como sobrescrever um arquivo na sua cópia de trabalho por uma versão desse arquivo de outra revisão.
svick
8
e quando você usa "pull" vs "checkout"?
Kokodoko 25/05
27
pull é uma busca e mesclagem, o checkout é uma operação local que opera apenas com dados que já foram buscados. Portanto, não é como o svn checkout.
August Lilleaas
13
Vindo do mundo SVN, eu também estava confuso. Uau .. que bagunça. Em um mundo ideal, eu aplicaria todos os fabricantes de sistemas de controle de origem a usar os mesmos termos.
Zoltán Tamási
5
Fork é um termo do github e não está relacionado ao próprio git.
August Lilleaas
123

O clone git é buscar seus repositórios no servidor git remoto.

O git checkout consiste em verificar o status desejado do seu repositório (como ramificações ou arquivos específicos).

Por exemplo, você está atualmente no ramo principal e deseja mudar para o ramo de desenvolvimento.

git checkout develop_branch

Por exemplo, você deseja fazer o checkout para um status específico de um arquivo específico

git checkout commit_point_A -- <filename>

Aqui está uma boa referência para você aprender Git, permite entender muito mais facilmente.

Kit Ho
fonte
20
"do servidor git remoto" - não é necessário que o servidor seja remoto. git clonetambém trabalha com repositórios locais.
SET
11
Obrigado pelo link para uma referência visual ao git!
David Pointer
@ Ho Ho: O link é bom como referência, mas não ajuda muito alguém com perguntas básicas sobre o git como a pessoa acima. Como o próprio artigo diz: "Uma vez que você sabe um pouco sobre como funciona o git, este site pode solidificar sua compreensão"
SN
Definições circulares não são tão úteis. A palavra "buscar" usada para descrever o clone é útil e acrescenta significado, mas a frase "checkout é checkout ..." não adiciona significado, nem ajuda a distinguir a diferença entre as duas operações.
C Perkins
11

Uma coisa a notar é a falta de qualquer "cópia" no git. Isso ocorre porque você já tem uma cópia completa no seu repositório local - o seu repositório local é um clonedo seu repositório upstream escolhido. Portanto, você tem efetivamente um pessoal checkoutde tudo , sem colocar algum 'bloqueio' nesses arquivos no repositório de referência.

O Git fornece os valores de hash SHA1 como o mecanismo para verificar se a cópia que você possui de uma árvore de arquivos / diretórios / commit / repo é exatamente a mesma usada por quem é capaz de declarar as coisas como "Mestre" dentro da hierarquia de confiança. Isso evita todos os 'bloqueios' que causam o sufocamento da maioria dos sistemas SCM (com os problemas comuns de cópias particulares, grandes fusões e nenhum controle ou gerenciamento real do código-fonte ;-)!

Philip Oakley
fonte
4
A pergunta não menciona bloqueios e deve-se presumir por padrão nos dias de hoje que uma pessoa não está familiarizada com esse conceito; portanto, essas diferenças em relação aos VCS antigos devem ser explicadas apenas se solicitadas explicitamente.
wRAR
6

Simplesmente git checkout tem 2 usos

  1. Alternando entre filiais locais existentes, como git checkout <existing_local_branch_name>
  2. Crie uma nova ramificação a partir da ramificação atual usando o sinalizador -b. Suponha que, se você estiver na ramificação principal, git checkout -b <new_feature_branch_name>crie uma nova ramificação com o conteúdo da ramificação principal e mude para a ramificação recém-criada

Você pode encontrar mais opções no site oficial

Khader MA
fonte
Agradável. Essa -bopção é incrível, o que cria uma nova ramificação local e a verifica ao mesmo tempo em um único comando. Amei!
RBT
2

checkout pode ser usado para muitos casos:

1º caso : alternar entre ramificação no repositório local Por exemplo: git checkout exists_branch_to_switch

Você também pode criar uma nova ramificação e alternar neste caso com -b

git checkout -b new_branch_to_switch

2º caso : restaurar arquivo de x rev

git checkout rev file_to_restore ...

Goms
fonte