Colabore usando um comando pull

Concluído

No seu tempo de inatividade fora do seu novo emprego, você tem trabalhado em um site que hospeda fotos de gatos. Você tem usado o Git para controle de versão e é hora de convidar colaboradores para o projeto. Durante uma festa de pizza em sua casa, sua amiga e amante de gatos Alice se oferece para ajudar a concretizar sua visão, e você aceita ansiosamente.

Alice primeiro precisa fazer uma cópia do seu projeto Git. Em seguida, Alice vai querer enviar as alterações para você como eles fazem. Esta situação é onde a natureza distribuída do Git brilha. Usando o Git, duas ou mais pessoas podem trabalhar juntas em um projeto sem medo de substituir o trabalho da outra. Além disso, você pode verificar o trabalho de Alice antes de fundi-lo com o seu trabalho. (Alice é talentosa, mas nenhum desenvolvedor é perfeito. Confie, mas verifique.)

Nesta lição, você aprenderá a clonar um repositório (também chamado de repo) para torná-lo disponível para outras pessoas. Também irá saber como utilizar uma das funcionalidades mais importantes do Git: os pedidos Pull.

Clone um repositório (git clone)

No Git, você copia um repositório clonando-o usando o git clone comando. Você pode clonar um repositório, não importa onde ele esteja armazenado, desde que tenha um URL ou caminho para apontá-lo.

git clone aceita um caminho do sistema de arquivos; um caminho SSH (por exemplo, git@example.com:alice/Cats—você estará familiarizado com este formulário se tiver usado Rsync ou SCP); ou uma URL, normalmente uma que começa com file:, git:ou ssh. Os vários formulários estão descritos na documentação para git clone. Em Unix e Linux, a operação de clonagem usa links rígidos, por isso é rápida e usa espaço mínimo, porque apenas as entradas de diretório precisam ser copiadas, não os arquivos.

Repositórios remotos (git pull)

Quando o Git clona um repositório, ele cria uma referência ao repositório original que é chamado de remoto usando o nome origin. Ele configura o repositório clonado para que o repositório clonado extraia ou recupere dados do repositório remoto. (O Git também pode empurrar. Você aprenderá sobre como enviar no Git mais adiante neste módulo.) origin é o local padrão para o Git extrair alterações e enviá-las por push. git pull copia as alterações do repositório remoto para o local. O git pull comando é muito eficiente porque copia apenas novos commits e objetos e, em seguida, verifica-os em sua árvore de trabalho.

Você puxa de origin usando o git pull comando. É útil para comparar git pull com outros métodos para copiar ficheiros. O comando copia scp tudo. scp( é semelhante ao comando Unixcp, exceto que os arquivos que estão sendo copiados não precisam estar no mesmo computador.) Se houver 10.000 arquivos no diretório remoto, scp copie todos. Um programa mais eficiente chamado Rsync analisa todos os arquivos nos diretórios locais e remotos e copia apenas os que são diferentes. Geralmente, o Rsync é utilizado para criar cópias de segurança, mas ainda precisa de efetuar o hash de todos os ficheiros, a menos que tenham datas de criação ou tamanhos diferentes.

O Git olha apenas para os compromissos. Ele já sabe a última confirmação que obteve do repositório remoto porque salvou a lista de confirmações. Em seguida, o Git diz ao computador que está copiando para enviar tudo o que mudou, incluindo as novas confirmações e os objetos para os quais elas apontam. Esses commits e objetos são agrupados em um arquivo chamado pacote e enviados em um lote. Finalmente, o Git atualiza a árvore de trabalho descompactando todos os objetos que foram alterados e mesclando-os (se necessário) com as confirmações e objetos na árvore de trabalho.

O Git puxa ou empurra apenas quando você manda. Isso é diferente, digamos, do Dropbox, que tem que pedir ao sistema operacional para notificá-lo de quaisquer alterações que você fizer em sua pasta e, ocasionalmente, perguntar ao servidor se alguém fez alterações.

Criar solicitações pull (git request-pull)

Depois que outro desenvolvedor, como Alice, clonou seu repositório e fez algumas alterações localmente, eles vão querer incorporar essas alterações de volta ao repositório original. Pode parecer que empurrar essas alterações para o repositório original é a abordagem certa. No entanto, um push para o repositório original falharia porque outros usuários não têm permissão para fazer alterações no seu repositório. É assim que deve ser. Por enquanto, você deseja revisar as alterações recebidas antes de mesclá-las na base de código principal.

Por enquanto, Alice terá que enviar uma solicitação pull para pedir que você puxe suas alterações para a base de código principal. Alice pode fazer isso usando git request-pull, que pode se parecer com este exemplo:

git request-pull -p origin/main .

Alice refere-se ao main ramo no origin controle remoto como origin/main.

Essa solicitação pull é essencialmente a mesma coisa que uma solicitação pull no GitHub (o GitHub é um lugar para armazenar código, que não abordamos neste módulo). Um pull request dá-lhe a oportunidade de rever as alterações de outros colaboradores antes de incorporar o seu trabalho no trabalho que está a fazer no website. As revisões de código são uma parte importante – alguns diriam a parte mais importante – da programação colaborativa.

Crie um controle remoto (git remote) e conclua a solicitação pull (git pull)

Como proprietário de um projeto, você precisa saber como mesclar solicitações pull. Primeiro, você usa o git remote comando para configurar o repositório de outro desenvolvedor como um controle remoto. Em seguida, você usa esse controle remoto para pulls e pull requests usando o git pull comando.

Nos bastidores, git pull é uma combinação de duas operações mais simples: git fetch, que obtém as alterações e git merge, que intercala essas alterações no seu repositório. Neste caso, a mesclagem foi rápida, o que significa que Alice tinha sua última confirmação em seu repositório, para que sua confirmação pudesse ser adicionada à frente do seu histórico sem qualquer modificação.