From 75e5b93567524ad7ae423218bcc2047eb9362f18 Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Mon, 30 Jun 2014 07:16:57 -0300 Subject: [PATCH] =?utf8?q?git=20push=20e=20seus=20padr=C3=B5es.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Explica o padrão matching, simple, upstream, current e nothing. --- Colaborando_com_Git.mdwn | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/Colaborando_com_Git.mdwn b/Colaborando_com_Git.mdwn index 0172b2e..65910d8 100644 --- a/Colaborando_com_Git.mdwn +++ b/Colaborando_com_Git.mdwn @@ -153,6 +153,73 @@ branch remoto que é rastreado pelo branch local. O rastreamento de um branch local é importante para comandos como git push e git pull, que veremos logo mais. +## Atualizando repositórios remotos + +Após clonar ou adicionar um repositório remoto com uma URL que permite +escrita, poderemos atualizá-lo através do comando git push. + +O comportamento de git push sofreu alterações ao longo das versões de +Git. Veremos alguns destes comportamentos padrões, e como utilizar +parâmetros explícitos para evitar surpresas. + + ~/project$ git add hello.c + ~/project$ git commit -m "Utiliza world sem capitalização" + [master 18c7b69] Utiliza world sem capitalização + 1 file changed, 1 insertion(+), 1 deletion(-) + ~/project$ git push origin master:master + Counting objects: 3, done. + Delta compression using up to 4 threads. + Compressing objects: 100% (3/3), done. + Writing objects: 100% (3/3), 321 bytes | 0 bytes/s, done. + Total 3 (delta 2), reused 0 (delta 0) + To /home/user2/project + 033d4b8..18c7b69 master -> master + ~/project$ + +Adicionamos um novo commit ao nosso histórico, e fazemos uma atualização +no repositório remoto origin. O primeiro parâmetro é o repositório +remoto que queremos atualizar. O segundo parâmetro, chamado refspec, +especifica o branch local e o branch remoto que serão sincronizados. + +No exemplo acima, o branch local master foi utilizado para atualizar o +branch remoto master. Objetos são escritos no repositório remoto, e a +referência atualizada. + +Note que o branch de origem deve conter todos os commits no branch de +destino a ser atualizado. Caso contrário, o push não avançará o branch +remoto, o que chamamos de fast-forward. Veremos mais à frente as +condições para termos uma situação de fast-forward. + +Tanto o remoto quanto o refspec podem ser omitidos. O padrão em versões +anteriores à versão 2.0.0 do Git era fazer o push de todos os branches +com nomes iguais ao repositório remoto especificado explicitamente ou +implicitamente. Se o remoto não é especificado, é assumido o remoto que +o branch corrente rastreia. + +No exemplo sobre Branches remotos acima, o branch local shell rastreia o +branch remoto alice/shell. Caso este branch seja o branch corrente, git +push utilizaria por padrão o repositório remoto alice. O refspec +matching, como é chamado o padrão utilizado em versões anteriores à Git +2.0.0, atualizaria todos os branches no remoto alice que tivessem um +branch local com o mesmo nome. Ou seja, se alice tivesse branches +master, devel e shell, e estes mesmos branches existissem localmente, +todos seriam atualizados. Ainda que o branch local master rastreasse o +branch remoto origin/master, alice/master seria atualizado neste caso +específico. Se o branch corrente fosse master, que rastreasse +origin/master, o repositório remoto origin seria atualizado no lugar do +repositório remoto alice. + +O novo padrão, a partir da versão 2.0.0, se chama simple. Ele atualiza +apenas o branch atual, apenas se o branch remoto rastreado tiver o mesmo +nome. + +As outras opções, sendo todas elas configuráveis globalmente ou por +repositório, através da opção push.default, são upstream, current e +nothing. A opção nothing exige que o refspec esteja explícito na linha +de comando. A opção current atualiza no remoto especificado ou ímplicito +o branch com o mesmo nome que o branch local corrente. E a opção +upstream atualiza o branch remoto rastreado pelo branch corrente. + ## Publicando um repositório Vimos como trabalhar com um repositório remoto, obtendo seus commits -- 2.20.1