Qual é a diferença entre pull e clone no git?


237

Qual é a diferença entre doing (after mkdir repoe cd repo):

git init
git remote add origin git://github.com/cmcculloh/repo.git
git fetch --all
git pull origin master

e

git clone git://github.com/cmcculloh/repo.git

Quero dizer, obviamente um é mais curto, mas fora isso eles estão basicamente fazendo a mesma coisa?

Respostas:


122

Eles são basicamente os mesmos, exceto que o clone configurará ramificações de rastreamento remoto adicionais, não apenas o mestre. Confira a página de manual :

Clona um repositório em um diretório recém-criado, cria ramificações de rastreamento remoto para cada ramificação no repositório clonado (visível usando git branch -r) e cria e faz check-out de uma ramificação inicial que é bifurcada na ramificação atualmente ativa do repositório clonado.


10
git fetch --all configura ramificações de rastreamento remoto adicionais, então basicamente elas são as mesmas.
Cmcculloh 01/09/10

251

git cloneé assim que você obtém uma cópia local de um repositório existente para trabalhar. Geralmente é usado apenas uma vez para um determinado repositório, a menos que você queira ter várias cópias de trabalho dele. (Ou deseja obter uma cópia limpa depois de bagunçar a sua local ...)

git pull(ou git fetch+ git merge) é como você atualiza essa cópia local com novas confirmações do repositório remoto. Se você estiver colaborando com outras pessoas, é um comando que você executará com freqüência.

Como seu primeiro exemplo mostra, é possível emular git clonecom uma variedade de outros comandos git, mas não é realmente o caso que git pullesteja fazendo "basicamente a mesma coisa" que git clone(ou vice-versa).


4
O que especificamente o clone git está fazendo que não é realizado pela sequência de comandos que envolveu o "git pull"?
Cmcculloh 02/09/10

21
@cmcculloh: Nothing - a sequência que você descreve efetivamente realiza o que o "git clone" faz. O ponto é que "git pull" é usado para fazer uma variedade de coisas além do que você fez lá - sem mencionar que "git pull" é realmente exatamente a combinação de "git fetch; git merge <branch atual> <origin / ramo atual> ". IOW, você poderia viver sem clone e pull se realmente quisesse. Além disso, você pode obter de repositórios diferentes daquele em que você clonou. Eu gosto de pensar em 'clone' como "faça-me uma cópia local desse repositório" e 'pull' como "obtenha-me as atualizações de algum controle remoto especificado".
ebneter 02/09/10

120

Na linguagem dos leigos, podemos dizer:

  • Clone : obtenha uma cópia de trabalho do repositório remoto.
  • Pull : Estou trabalhando nisso, consiga as novas alterações que podem ser atualizadas por outras pessoas.

3
Eu acho que o seu Pull definição também pode ser dito para Clone
henrywright

10
Como você pode trabalhar em algo que não clonou?
Jyoti Prakash

Eu não entendo o que você quer dizer?
Henrywright 24/08/2015

esperança @henrywright, a resposta de Ebneter irá abordar a sua pergunta
Mc

41

git clone significa que você está fazendo uma cópia do repositório em seu sistema.

git fork significa que você está copiando o repositório para sua conta do Github.

git pull significa que você está buscando o último repositório modificado.

git push significa que você está retornando o repositório após modificá-lo.

No termo leigo:

git cloneestá baixando e git pullestá atualizando.


9

clone : copiando o repositório do servidor remoto para sua máquina local.

pull : obtenha novas alterações adicionadas à sua máquina local.

Essa é a diferença.

O clone é geralmente usado para obter uma cópia de repo remoto.

Pull é usado para visualizar o código adicionado de outros companheiros de equipe, se você estiver trabalhando em equipes.


5

O git clone é usado apenas para baixar exatamente o que está atualmente funcionando no repositório do servidor remoto e salvá-lo na pasta da sua máquina onde o projeto está localizado. Principalmente, é usado apenas quando vamos carregar o projeto pela primeira vez. Depois que puxar é a melhor opção.

O git pull é basicamente uma operação (clone (download) + mesclagem) e usada principalmente quando você trabalha como trabalho em equipe. Em outras palavras, quando você deseja as alterações recentes nesse projeto, pode puxar.


3

Miss Clone: ​​Recebo uma cópia nova para o local.

Sr. Pull: Eu já o localmente, apenas atualizo.


Miss Clone: ​​Eu posso fazer o que você faz! Você é apenas meu subconjunto.

Sr. Pull: Idem!


Miss Clone: ​​Não, você não cria. Isto é o que eu faço:

  1. Criar repositório vazio vazio
  2. Preencher ramificações de rastreamento remoto
  3. Execute a busca git sem argumentos

Você faz apenas o número 3 e depois mescla, o que eu não preciso fazer (o meu é novo).

Sr. Pull: Calças inteligentes, não é grande coisa, eu vou fazer um "git init" primeiro! Então somos iguais. Além disso, tenho o recurso extra de 'mesclagem' no repositório existente! O que me torna o comando mais usado no Git;)


Criadores de Git: mantenha seus cavalos, Sr. Pull, se --bare ou --mirror for usado com clone ou init, sua fusão não acontecerá. Permanece somente leitura.


Resposta subestimada.
sinekonata 21/02

2

Hmm, o que está faltando para ver o ramo remoto "4.2" quando eu puxo, como faço quando clono? Algo claramente não é idêntico.

tmp$  mkdir some_repo

tmp$  cd some_repo

some_repo$  git init
Initialized empty Git repository in /tmp/some_repo/.git/

some_repo$  git pull https://github.ourplace.net/babelfish/some_repo.git
  :
From https://github.ourplace.net/babelfish/some_repo
 * branch            HEAD       -> FETCH_HEAD

some_repo$  git branch
* master

vs

tmp$  rm -rf some_repo

tmp$  git clone https://github.ourplace.net/babelfish/some_repo.git
Cloning into 'some_repo'...
  :
Checking connectivity... done.

tmp$  cd some_repo

some_repo$  git branch
* 4.2

Também notei isso e suspeito que as alterações nos padrões do git ao longo do tempo são o problema. Eu tenho 1.9.5.msysgit no windows e 2.3.2-applegit-55 em um mac.
AnneTheAgile 8/09/15

2

URL do clone git ---> O projeto ou repositório completo será baixado como um diretório separado. e não apenas as alterações git pull URL ---> buscar + mesclar -> Ele buscará apenas as alterações que foram feitas e não o projeto inteiro


1

Embora o git fetchcomando busque todas as alterações no servidor que você ainda não possui, ele não modificará seu diretório de trabalho. Ele simplesmente obterá os dados para você e permitirá que você os mescle. No entanto, existe um comando chamado git pullque é essencialmente um git fetchimediatamente seguido por um git mergena maioria dos casos.

Leia mais: https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Pulling


1
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
Ekad #

0

Clone -: Ele criará uma cópia exatamente duplicada do seu projeto de repositório remoto na sua máquina local.

Pull -: Suponha que duas ou mais de duas pessoas estejam compartilhando o mesmo repositório. (Suponha que o nome de outra pessoa seja Syam) (Um repositório é um local em que seu projeto existe no Github) Portanto, se o Syam faz algumas alterações no mesmo projeto no local dele e o envia para o repositório remoto, sejam quais forem as alterações que o Syam fez, essas alterações serão não reflete em seu local. Portanto, para refletir essas novas mudanças no seu local, você deve usar o git pull. No geral, usamos git pull para atualizar o projeto.

Então, basicamente, usamos o git clone apenas uma vez, enquanto usamos o git pull várias vezes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.