-
1. Primeiros Passos
- 1.1 Sobre Controle de Versão
- 1.2 Uma Breve História do Git
- 1.3 O que é Git?
- 1.4 A Linha de Comando
- 1.5 Instalando o Git
- 1.6 Configuração inicial do Git
- 1.7 Obtendo Ajuda
- 1.8 Resumo
-
2. Fundamentos do Git
-
3. Ramificação (Branching) no Git
-
4. Git no Servidor
- 4.1 Os Protocolos
- 4.2 Colocando o Git em um Servidor
- 4.3 Gerando a sua Chave Pública SSH
- 4.4 Configurando o Servidor
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Opções de Hospedagem de Terceiros
- 4.10 Resumo
-
5. Git Distribuído
-
6. GitHub
-
7. Ferramentas do Git
- 7.1 Seleção de Revisão
- 7.2 Área de Stage Interativa
- 7.3 Fazendo Stash e Limpando
- 7.4 Assinando Seu Trabalho
- 7.5 Pesquisando (Searching)
- 7.6 Reescrevendo o Histórico
- 7.7 Reset Desmistificado
- 7.8 Merging Avançado
- 7.9 Rerere
- 7.10 Depurando com Git
- 7.11 Submódulos
- 7.12 Empacotando (Bundling)
- 7.13 Substituir (Replace)
- 7.14 Armazenamento de Credenciais
- 7.15 Resumo
-
8. Customizando o Git
- 8.1 Configuração do Git
- 8.2 Atributos do Git
- 8.3 Hooks do Git
- 8.4 Uma Política de Exemplo Imposta pelo Git
- 8.5 Resumo
-
9. Git e Outros Sistemas
- 9.1 Git como Cliente
- 9.2 Migrando para o Git
- 9.3 Resumo
-
10. Git Internals (Por Dentro do Git)
- 10.1 Encanamento e Porcelana (Plumbing and Porcelain)
- 10.2 Objetos do Git
- 10.3 Referências do Git
- 10.4 Arquivos de pacote (Packfiles)
- 10.5 Refspec
- 10.6 Protocolos de Transferência
- 10.7 Manutenção e Recuperação de Dados
- 10.8 Variáveis de Ambiente
- 10.9 Resumo
-
A1. Appendix A: O Git em Outros Ambientes
- A1.1 Interfaces Gráficas
- A1.2 Git no Visual Studio
- A1.3 Git no Visual Studio Code
- A1.4 Git no IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git no Sublime Text
- A1.6 Git no Bash
- A1.7 Git no Zsh
- A1.8 Git no PowerShell
- A1.9 Resumo
-
A2. Appendix B: Incorporando o Git nos seus Aplicativos
- A2.1 Linha de Comando do Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Appendix C: Comandos do Git
- A3.1 Configuração e Ajustes
- A3.2 Obtendo e Criando Projetos
- A3.3 Snapshots Básicos
- A3.4 Branches e Merges
- A3.5 Compartilhando e Atualizando Projetos
- A3.6 Inspeção e Comparação
- A3.7 Depuração
- A3.8 Patches
- A3.9 E-mail
- A3.10 Sistemas Externos
- A3.11 Administração
- A3.12 Comandos de Encanamento
6.2 GitHub - Contribuindo para um Projeto
Contribuindo para um Projeto
Agora que a nossa conta está configurada, vamos examinar alguns detalhes que podem ser úteis para ajudá-lo a contribuir com um projeto existente.
Fazendo Fork de Projetos
Se você quiser contribuir com um projeto existente ao qual não tem acesso de push, você pode fazer um “fork” do projeto. Quando você faz um “fork” de um projeto, o GitHub faz uma cópia do projeto que é inteiramente sua; ela vive no seu namespace e você pode fazer push para ela.
|
Note
|
Historicamente, o termo “fork” tem sido um tanto negativo em seu contexto, significando que alguém levou um projeto de código aberto para uma direção diferente, às vezes criando um projeto concorrente e dividindo os contribuidores. No GitHub, um “fork” é simplesmente o mesmo projeto no seu próprio namespace, permitindo que você faça alterações em um projeto publicamente como uma forma de contribuir de maneira mais aberta. |
Dessa forma, os projetos não precisam se preocupar em adicionar usuários como colaboradores para lhes dar acesso de push. As pessoas podem fazer o fork de um projeto, fazer push nele e contribuir com as suas alterações de volta ao repositório original criando o que é chamado de Pull Request, que abordaremos a seguir. Isso abre um tópico de discussão com revisão de código, e o proprietário e o contribuidor podem então se comunicar sobre a alteração até que o proprietário esteja satisfeito com ela, momento em que o proprietário pode mesclá-la.
Para fazer o fork de um projeto, visite a página do projeto e clique no botão “Fork” no canto superior direito da página.
Depois de alguns segundos, você será levado para a página do seu novo projeto, com a sua própria cópia editável do código.
O Fluxo do GitHub (GitHub Flow)
O GitHub é projetado em torno de um fluxo de trabalho de colaboração particular, centrado em Pull Requests. Esse fluxo funciona quer você esteja colaborando com uma equipe unida em um único repositório compartilhado, ou com uma empresa distribuída globalmente ou uma rede de estranhos contribuindo para um projeto por meio de dezenas de forks. Ele é centrado no fluxo de trabalho de Branches de Tópicos (Topic Branches) abordado em Ramificação (Branching) no Git.
Eis como isso geralmente funciona:
-
Faça um fork do projeto.
-
Crie um branch de tópico a partir do
master. -
Faça alguns commits para melhorar o projeto.
-
Faça um push deste branch para o seu projeto no GitHub.
-
Abra um Pull Request no GitHub.
-
Discuta e, opcionalmente, continue a fazer commits.
-
O proprietário do projeto mescla (merge) ou fecha (close) o Pull Request.
-
Sincronize o
masteratualizado de volta para o seu fork.
Este é basicamente o fluxo de trabalho de Gerente de Integração (Integration Manager) abordado em Fluxo de Trabalho do Gerente de Integração (Integration-Manager), mas em vez de usar e-mail para comunicar e revisar as alterações, as equipes usam as ferramentas baseadas na web do GitHub.
Vamos analisar um exemplo de proposição de uma alteração a um projeto de código aberto hospedado no GitHub usando este fluxo.
|
Tip
|
Você pode usar a ferramenta oficial GitHub CLI em vez da interface web do GitHub para a maioria das coisas. A ferramenta pode ser usada em sistemas Windows, macOS e Linux. Vá para a página inicial do GitHub CLI para instruções de instalação e o manual. |
Criando um Pull Request
Tony está procurando um código para rodar no seu microcontrolador programável Arduino e encontrou um ótimo arquivo de programa no GitHub em https://github.com/schacon/blink.
O único problema é que a taxa de piscar está muito rápida. Achamos que é muito mais agradável esperar 3 segundos em vez de 1 entre cada mudança de estado. Então, vamos melhorar o programa e enviá-lo de volta ao projeto como uma alteração proposta.
Primeiro, clicamos no botão 'Fork' (Fazer Fork) como mencionado anteriormente para obtermos a nossa própria cópia do projeto.
O nosso nome de usuário aqui é “tonychacon”, então a nossa cópia deste projeto está em https://github.com/tonychacon/blink e é lá que podemos editá-lo.
Vamos cloná-lo localmente, criar um branch de tópico, fazer a alteração no código e finalmente fazer o push dessa alteração de volta para o GitHub.
$ git clone https://github.com/tonychacon/blink (1)
Cloning into 'blink'...
$ cd blink
$ git checkout -b slow-blink (2)
Switched to a new branch 'slow-blink'
$ sed -i '' 's/1000/3000/' blink.ino (macOS) (3)
# If you're on a Linux system, do this instead:
# $ sed -i 's/1000/3000/' blink.ino (3)
$ git diff --word-diff (4)
diff --git a/blink.ino b/blink.ino
index 15b9911..a6cc5a5 100644
--- a/blink.ino
+++ b/blink.ino
@@ -18,7 +18,7 @@ void setup() {
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
[-delay(1000);-]{+delay(3000);+} // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
[-delay(1000);-]{+delay(3000);+} // wait for a second
}
$ git commit -a -m 'Change delay to 3 seconds' (5)
[slow-blink 5ca509d] Change delay to 3 seconds
1 file changed, 2 insertions(+), 2 deletions(-)
$ git push origin slow-blink (6)
Username for 'https://github.com': tonychacon
Password for 'https://tonychacon@github.com':
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 340 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://github.com/tonychacon/blink
* [new branch] slow-blink -> slow-blink
-
Clone o nosso fork do projeto localmente.
-
Crie um branch de tópico descritivo.
-
Faça a nossa alteração no código.
-
Verifique se a alteração está boa.
-
Faça o commit da nossa alteração para o branch de tópico.
-
Faça o push do nosso novo branch de tópico de volta para o nosso fork no GitHub.
Agora, se voltarmos para o nosso fork no GitHub, podemos ver que o GitHub notou que fizemos o push de um novo branch de tópico e nos apresenta um grande botão verde para verificar as nossas alterações e abrir um Pull Request para o projeto original.
Alternativamente, você pode ir para a página “Branches” em https://github.com/<user>/<project>/branches para localizar o seu branch e abrir um novo Pull Request a partir de lá.
Se clicarmos naquele botão verde, veremos uma tela que nos pede para dar um título e uma descrição ao nosso Pull Request. Quase sempre vale a pena colocar algum esforço nisso, já que uma boa descrição ajuda o proprietário do projeto original a determinar o que você estava tentando fazer, se as alterações propostas estão corretas e se a aceitação das alterações melhoraria o projeto original.
Também vemos uma lista dos commits em nosso branch de tópico que estão “à frente” (ahead) do branch master (neste caso, apenas um) e um diff unificado de todas as alterações que serão feitas caso este branch seja mesclado pelo proprietário do projeto.
Quando você clica no botão 'Create pull request' nesta tela, o proprietário do projeto do qual você fez fork receberá uma notificação de que alguém está sugerindo uma alteração e fornecerá um link para uma página que contém todas essas informações.
|
Note
|
Embora Pull Requests sejam comumente usados para projetos públicos como este quando o contribuidor tem uma alteração completa pronta para ser feita, eles também são frequentemente usados em projetos internos no início do ciclo de desenvolvimento. Como você pode continuar fazendo push para o branch de tópico mesmo após a abertura do Pull Request, ele costuma ser aberto no início e usado como uma forma de iterar no trabalho em equipe dentro de um contexto, em vez de ser aberto apenas no final do processo. |
Iterando em um Pull Request
Neste ponto, o proprietário do projeto pode examinar a alteração sugerida e mesclá-la, rejeitá-la ou comentá-la. Digamos que ele goste da ideia, mas preferisse um tempo um pouco maior para a luz ficar apagada do que acesa.
Onde essa conversa poderia ocorrer por e-mail nos fluxos de trabalho apresentados em Git Distribuído, no GitHub ela acontece online. O proprietário do projeto pode revisar o diff unificado e deixar um comentário clicando em qualquer uma das linhas.
Assim que o mantenedor faz esse comentário, a pessoa que abriu o Pull Request (e, na verdade, qualquer outra pessoa que esteja observando o repositório) receberá uma notificação. Abordaremos a personalização disso mais tarde, mas se tivesse as notificações por e-mail ativadas, Tony receberia um e-mail como este:
Qualquer pessoa também pode deixar comentários gerais sobre o Pull Request. Em Página de discussão de Pull Request podemos ver um exemplo do proprietário do projeto tanto comentando em uma linha de código quanto deixando um comentário geral na seção de discussão. Você pode ver que os comentários de código também são trazidos para a conversa.
Agora o contribuidor pode ver o que precisa fazer para que a sua alteração seja aceita. Felizmente, isso é muito simples. Enquanto por e-mail você pode ter que reescrever (re-roll) a sua série e reenviá-la para a lista de discussão, com o GitHub você simplesmente faz um commit no branch de tópico novamente e faz o push, o que atualizará automaticamente o Pull Request. Em Final do Pull Request, você também pode ver que o comentário do código antigo foi ocultado no Pull Request atualizado, uma vez que foi feito em uma linha que já foi alterada.
Adicionar commits a um Pull Request existente não aciona uma notificação, então, assim que Tony envia as suas correções, ele decide deixar um comentário para informar ao proprietário do projeto que fez a alteração solicitada.
Uma coisa interessante de se notar é que se você clicar na aba “Files Changed” (Arquivos Alterados) neste Pull Request, você obterá o diff “unificado” — isto é, a diferença total agregada que seria introduzida no seu branch principal se este branch de tópico fosse mesclado.
Em termos de git diff, ele basicamente mostra automaticamente git diff master…<branch> para o branch no qual este Pull Request se baseia.
Veja Determinando o Que é Introduzido para saber mais sobre esse tipo de diff.
A outra coisa que você notará é que o GitHub verifica se o Pull Request se mescla de forma limpa e fornece um botão para fazer o merge para você no servidor. Este botão só aparece se você tiver acesso de gravação (write access) ao repositório e um merge trivial for possível. Se você clicar nele, o GitHub realizará um merge “non-fast-forward”, o que significa que mesmo que o merge pudesse ser um fast-forward, ele ainda criará um commit de merge.
Se preferir, você pode simplesmente fazer o pull do branch e mesclá-lo localmente.
Se você mesclar este branch no branch master e fizer o push para o GitHub, o Pull Request será fechado automaticamente.
Este é o fluxo de trabalho básico que a maioria dos projetos do GitHub usa. Branches de tópico são criados, Pull Requests são abertos neles, uma discussão se segue, possivelmente mais trabalho é feito no branch e, eventualmente, a solicitação é fechada ou mesclada.
|
Note
|
Não Apenas Forks
É importante notar que você também pode abrir um Pull Request entre dois branches no mesmo repositório.
Se você estiver trabalhando em um recurso com alguém e ambos tiverem acesso de gravação ao projeto, você pode fazer o push de um branch de tópico para o repositório e abrir um Pull Request dele para o branch |
Pull Requests Avançados
Agora que cobrimos os fundamentos de contribuição para um projeto no GitHub, vamos abordar algumas dicas e truques interessantes sobre Pull Requests para que você possa ser mais eficaz ao usá-los.
Pull Requests como Patches
É importante entender que muitos projetos não pensam realmente nos Pull Requests como filas de patches perfeitos que devem ser aplicados de forma limpa em ordem, como a maioria dos projetos baseados em lista de discussão pensa das contribuições de séries de patches. A maioria dos projetos no GitHub pensa nos branches de Pull Request como conversas iterativas em torno de uma alteração proposta, culminando em um diff unificado que é aplicado por meio de merge.
Esta é uma distinção importante, porque geralmente a alteração é sugerida antes que o código seja considerado perfeito, o que é muito mais raro com contribuições de séries de patches baseadas em listas de discussão. Isso permite uma conversa mais cedo com os mantenedores para que chegar à solução adequada seja mais um esforço da comunidade. Quando um código é proposto com um Pull Request e os mantenedores ou a comunidade sugerem uma alteração, a série de patches geralmente não é reescrita, mas sim a diferença é enviada como um novo commit para o branch, avançando a conversa com o contexto do trabalho anterior intacto.
Por exemplo, se você voltar e olhar novamente para Final do Pull Request, notará que o contribuidor não fez um rebase do seu commit nem enviou outro Pull Request. Em vez disso, eles adicionaram novos commits e fizeram push para o branch existente. Dessa forma, se você voltar e analisar este Pull Request no futuro, poderá facilmente encontrar todo o contexto do porquê as decisões foram tomadas. Clicar no botão “Merge” no site cria intencionalmente um commit de merge que faz referência ao Pull Request, para que seja fácil voltar e pesquisar a conversa original, se necessário.
Acompanhando o Upstream
Se o seu Pull Request ficar desatualizado ou não puder ser mesclado de forma limpa, você vai querer consertá-lo para que o mantenedor possa mesclá-lo facilmente. O GitHub testará isso para você e informará na parte inferior de cada Pull Request se o merge é trivial ou não.
Se você vir algo como Pull Request não se mescla de forma limpa, você vai querer consertar o seu branch para que ele fique verde e o mantenedor não tenha que fazer trabalho extra.
Você tem duas opções principais para fazer isso.
Você pode fazer um rebase do seu branch em cima de qualquer que seja o branch de destino (normalmente o branch master do repositório do qual você fez fork), ou pode mesclar (merge) o branch de destino no seu branch.
A maioria dos desenvolvedores no GitHub escolherá fazer o último, pelas mesmas razões que acabamos de ver na seção anterior. O que importa é o histórico e o merge final, então fazer rebase não está lhe dando muito além de um histórico ligeiramente mais limpo e, em troca, é muito mais difícil e propenso a erros.
Se você quiser mesclar o branch de destino para tornar o seu Pull Request passível de merge, você adicionaria o repositório original como um novo remoto, faria um fetch dele, mesclaria o branch principal daquele repositório no seu branch de tópico, consertaria quaisquer problemas e finalmente faria o push de volta para o mesmo branch em que você abriu o Pull Request.
Por exemplo, digamos que no exemplo do “tonychacon” que estávamos usando antes, o autor original tenha feito uma alteração que criaria um conflito no Pull Request. Vamos percorrer essas etapas.
$ git remote add upstream https://github.com/schacon/blink (1)
$ git fetch upstream (2)
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
From https://github.com/schacon/blink
* [new branch] master -> upstream/master
$ git merge upstream/master (3)
Auto-merging blink.ino
CONFLICT (content): Merge conflict in blink.ino
Automatic merge failed; fix conflicts and then commit the result.
$ vim blink.ino (4)
$ git add blink.ino
$ git commit
[slow-blink 3c8d735] Merge remote-tracking branch 'upstream/master' \
into slower-blink
$ git push origin slow-blink (5)
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 682 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
To https://github.com/tonychacon/blink
ef4725c..3c8d735 slower-blink -> slow-blink
-
Adicione o repositório original como um remoto chamado
upstream. -
Faça um fetch do trabalho mais recente daquele remoto.
-
Mescle o branch principal daquele repositório no seu branch de tópico.
-
Conserte o conflito que ocorreu.
-
Faça o push de volta para o mesmo branch de tópico.
Assim que você fizer isso, o Pull Request será automaticamente atualizado e verificado novamente para ver se ele se mescla de forma limpa.
Uma das grandes coisas sobre o Git é que você pode fazer isso continuamente. Se você tiver um projeto muito longo, poderá facilmente fazer merge do branch de destino repetidas vezes e só terá que lidar com os conflitos que surgiram desde a última vez que você fez merge, tornando o processo muito gerenciável.
Se você absolutamente deseja fazer rebase do branch para limpá-lo, certamente pode fazê-lo, mas é altamente recomendável não fazer um push forçado (force push) sobre o branch em que o Pull Request já está aberto. Se outras pessoas tiverem feito o pull dele e feito mais trabalho nele, você encontrará todos os problemas descritos em Os Perigos do Rebase (Perils of Rebasing). Em vez disso, faça o push do branch que sofreu rebase para um novo branch no GitHub e abra um Pull Request totalmente novo fazendo referência ao antigo, depois feche o original.
Referências
A sua próxima pergunta pode ser “Como faço referência ao Pull Request antigo?”. Acontece que existem muitas, muitas maneiras de referenciar outras coisas em quase qualquer lugar onde você pode escrever no GitHub.
Vamos começar com como fazer referência cruzada a outro Pull Request ou a uma Issue.
Todos os Pull Requests e Issues recebem números e eles são únicos dentro do projeto.
Por exemplo, você não pode ter o Pull Request #3 e a Issue #3.
Se você quiser referenciar qualquer Pull Request ou Issue a partir de qualquer outro, você pode simplesmente colocar #<num> em qualquer comentário ou descrição.
Você também pode ser mais específico se a Issue ou Pull Request estiver em outro lugar; escreva username#<num> se estiver se referindo a uma Issue ou Pull Request em um fork do repositório em que você está, ou username/repo#<num> para referenciar algo em outro repositório.
Vamos ver um exemplo. Digamos que fizemos um rebase do branch no exemplo anterior, criamos um novo pull request para ele e agora queremos referenciar o pull request antigo a partir do novo. Nós também queremos referenciar uma issue no fork do repositório e uma issue em um projeto completamente diferente. Podemos preencher a descrição exatamente como em Referências cruzadas em um Pull Request.
Quando submetermos este pull request, veremos tudo isso renderizado como em Referências cruzadas renderizadas em um Pull Request.
Observe que a URL completa do GitHub que colocamos lá foi encurtada apenas para as informações necessárias.
Agora, se Tony voltar e fechar o Pull Request original, podemos ver que, ao mencioná-lo no novo, o GitHub criou automaticamente um evento de trackback (rastreamento) na linha do tempo do Pull Request. Isso significa que qualquer um que visite este Pull Request e veja que ele está fechado pode facilmente encontrar um link para aquele que o substituiu. O link se parecerá com Link de volta para o novo Pull Request na linha do tempo do Pull Request fechado.
Além dos números de issue, você também pode referenciar um commit específico pelo seu SHA-1. Você tem que especificar um SHA-1 completo de 40 caracteres, mas se o GitHub vir isso em um comentário, ele criará um link direto para o commit. Novamente, você pode referenciar commits em forks ou outros repositórios da mesma forma que fez com issues.
Markdown do GitHub (GitHub Flavored Markdown)
Vincular a outras Issues é apenas o começo de coisas interessantes que você pode fazer com quase qualquer caixa de texto no GitHub. Em descrições de Issue e Pull Request, comentários, comentários de código e muito mais, você pode usar o que é chamado de “GitHub Flavored Markdown”. Markdown é como escrever em texto simples, mas que é renderizado com riqueza de detalhes.
Veja Um exemplo de GitHub Flavored Markdown como escrito e como renderizado para um exemplo de como os comentários ou textos podem ser escritos e depois renderizados usando Markdown.
A variação de Markdown do GitHub adiciona mais coisas que você pode fazer além da sintaxe Markdown básica. Tudo isso pode ser realmente útil ao criar comentários ou descrições úteis de Pull Request ou Issue.
Listas de Tarefas (Task Lists)
A primeira funcionalidade Markdown realmente útil específica do GitHub, especialmente para uso em Pull Requests, é a Lista de Tarefas (Task List). Uma lista de tarefas é uma lista de caixas de seleção de coisas que você deseja que sejam feitas. Colocá-las em uma Issue ou Pull Request normalmente indica coisas que você deseja que sejam feitas antes de considerar o item completo.
Você pode criar uma lista de tarefas como esta:
- [X] Write the code
- [ ] Write all the tests
- [ ] Document the code
Se incluirmos isso na descrição do nosso Pull Request ou Issue, o veremos renderizado como em Listas de tarefas renderizadas em um comentário Markdown.
Isso é frequentemente usado em Pull Requests para indicar tudo o que você gostaria de ver feito no branch antes que o Pull Request esteja pronto para o merge. A parte realmente legal é que você pode simplesmente clicar nas caixas de seleção para atualizar o comentário — você não precisa editar o Markdown diretamente para marcar as tarefas como concluídas.
Além do mais, o GitHub procurará por listas de tarefas em suas Issues e Pull Requests e as mostrará como metadados nas páginas que os listam. Por exemplo, se você tem um Pull Request com tarefas e olha na página de visão geral de todos os Pull Requests, pode ver o quanto ele está concluído. Isso ajuda as pessoas a dividirem Pull Requests em subtarefas e ajuda outras pessoas a acompanhar o progresso do branch. Você pode ver um exemplo disso em Resumo da lista de tarefas na lista de Pull Request.
Elas são incrivelmente úteis quando você abre um Pull Request logo no início e o usa para rastrear o seu progresso através da implementação do recurso.
Trechos de Código (Code Snippets)
Você também pode adicionar trechos de código (code snippets) aos comentários. Isso é especialmente útil se você quiser apresentar algo que você poderia tentar fazer antes de realmente implementá-lo como um commit no seu branch. Isso também é usado com frequência para adicionar código de exemplo do que não está funcionando ou o que este Pull Request poderia implementar.
Para adicionar um trecho de código você tem que “cercá-lo” (fence) com crases.
```java
for(int i=0 ; i < 5 ; i++)
{
System.out.println("i is : " + i);
}
```
Se você adicionar um nome de linguagem como fizemos ali com 'java', o GitHub também tentará destacar a sintaxe do trecho. No caso do exemplo acima, ele acabaria renderizando como em Exemplo de código cercado renderizado.
Citando (Quoting)
Se você estiver respondendo a uma pequena parte de um comentário longo, você pode citar seletivamente do outro comentário precedendo as linhas com o caractere >.
De fato, isso é tão comum e tão útil que existe um atalho de teclado para isso.
Se você destacar texto em um comentário ao qual deseja responder diretamente e pressionar a tecla r, ele citará esse texto na caixa de comentário para você.
As citações se parecem mais ou menos assim:
> Whether 'tis Nobler in the mind to suffer
> The Slings and Arrows of outrageous Fortune,
How big are these slings and in particular, these arrows?
Uma vez renderizado, o comentário se parecerá com Exemplo de citação renderizado.
Emoji
Finalmente, você também pode usar emoji em seus comentários.
Isso é, na verdade, usado extensivamente em comentários que você vê em muitas Issues e Pull Requests no GitHub.
Há até mesmo um assistente de emoji no GitHub.
Se você estiver digitando um comentário e começar com um caractere :, um recurso de autocompletar ajudará a encontrar o que você está procurando.
Os emojis assumem a forma de :<name>: em qualquer lugar no comentário.
Por exemplo, você poderia escrever algo assim:
I :eyes: that :bug: and I :cold_sweat:.
:trophy: for :microscope: it.
:+1: and :sparkles: on this :ship:, it's :fire::poop:!
:clap::tada::panda_face:
Quando renderizado, ficaria parecido com Comentários repletos de emoji.
Não que isso seja incrivelmente útil, mas adiciona um elemento de diversão e emoção a um meio no qual, de outra forma, é difícil transmitir emoção.
|
Note
|
Na verdade, há um bom número de serviços da web que fazem uso de caracteres emoji hoje em dia. Um ótimo guia de referência (cheat sheet) para encontrar o emoji que expressa o que você quer dizer pode ser encontrado em: |
Imagens
Isso não é tecnicamente GitHub Flavored Markdown, mas é incrivelmente útil. Além de adicionar links de imagens Markdown aos comentários, que podem ser difíceis de encontrar e incorporar URLs, o GitHub permite que você arraste e solte imagens em áreas de texto para incorporá-las.
Se você olhar para Arraste e solte imagens para carregá-las e incorporá-las automaticamente, poderá ver uma pequena dica “Parsed as Markdown” (Analisado como Markdown) acima da área de texto. Clicar nela lhe dará um guia de referência completo de tudo o que você pode fazer com Markdown no GitHub.
Mantenha o seu repositório público do GitHub atualizado
Depois que você faz o fork de um repositório no GitHub, o seu repositório (o seu "fork") existe independentemente do original. Em particular, quando o repositório original tiver novos commits, o GitHub o informará com uma mensagem como:
This branch is 5 commits behind progit:master.
Mas o seu repositório no GitHub nunca será atualizado automaticamente pelo GitHub; isso é algo que você mesmo deve fazer. Felizmente, isso é muito fácil de fazer.
Uma possibilidade para fazer isso não requer configuração.
Por exemplo, se você fez fork de https://github.com/progit/progit2.git, você pode manter o seu branch master atualizado desta forma:
$ git checkout master (1)
$ git pull https://github.com/progit/progit2.git (2)
$ git push origin master (3)
-
Se você estava em outro branch, retorne ao
master. -
Faça um fetch das alterações de
https://github.com/progit/progit2.gite as mescle nomaster. -
Faça o push do seu branch
masterpara aorigin.
Isso funciona, mas é um pouco entediante ter que soletrar a URL do fetch todas as vezes. Você pode automatizar esse trabalho com um pouco de configuração:
$ git remote add progit https://github.com/progit/progit2.git (1)
$ git fetch progit (2)
$ git branch --set-upstream-to=progit/master master (3)
$ git config --local remote.pushDefault origin (4)
-
Adicione o repositório de origem e dê um nome a ele. Aqui, escolhi chamá-lo de
progit. -
Obtenha uma referência aos branches do progit, em particular ao
master. -
Configure o seu branch
masterpara fazer fetch do remotoprogit. -
Defina o repositório padrão de push para
origin.
Uma vez feito isso, o fluxo de trabalho se torna muito mais simples:
$ git checkout master (1)
$ git pull (2)
$ git push (3)
-
Se você estava em outro branch, retorne ao
master. -
Faça um fetch das alterações do
progite mescle as alterações nomaster. -
Faça o push do seu branch
masterpara aorigin.
Essa abordagem pode ser útil, mas não deixa de ter desvantagens.
O Git ficará feliz em fazer esse trabalho para você silenciosamente, mas não o avisará se você fizer um commit no master, fizer um pull de progit e depois fizer um push para origin — todas essas operações são válidas com esta configuração.
Então, você terá que tomar cuidado para nunca comitar diretamente no master, já que esse branch pertence efetivamente ao repositório upstream.