{"meta":{"title":"Como usar a API REST para interagir com seu banco de dados Git","intro":"Use a API REST para ler e gravar objetos Git brutos em seu banco de dados Git em GitHub e para listar e atualizar suas referências (cabeçalhos de ramificação e tags).","product":"API REST","breadcrumbs":[{"href":"/pt/rest","title":"API REST"},{"href":"/pt/rest/guides","title":"Guias"},{"href":"/pt/rest/guides/using-the-rest-api-to-interact-with-your-git-database","title":"Introdução – banco de dados Git"}],"documentType":"article"},"body":"# Como usar a API REST para interagir com seu banco de dados Git\n\nUse a API REST para ler e gravar objetos Git brutos em seu banco de dados Git em GitHub e para listar e atualizar suas referências (cabeçalhos de ramificação e tags).\n\n## Visão geral\n\nIsso basicamente permite que você reimplemente uma série de funcionalidades do Git com a API REST - criando objetos brutos diretamente no banco de dados e atualizando referências de ramificações, você poderia tecnicamente fazer praticamente qualquer coisa que o Git pode fazer sem ter o Git instalado.\n\nA API REST retornará `409 Conflict` se o repositório Git estiver vazio ou indisponível. Quando um repositório está indisponível, isso normalmente significa que o GitHub está no processo de criação desse repositório. Para um repositório vazio, você pode usar o endpoint da API REST para criar conteúdo e inicializar o repositório, permitindo assim o uso da API para gerenciar o repositório Git. Entre em contato com nos por meio do portal  se esse status de resposta persistir.\n\nPara obter mais informações sobre o banco de dados de objetos do Git, leia o capítulo [Componentes internos do Git](https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain) do livro Pro Git.\n\nPor exemplo, se desejar fazer commit de uma alteração em um arquivo no seu repositório, você vai:\n\n* Obter o objeto do commit atual\n* Recuperar a árvore para a qual o objeto aponta\n* Recupere o conteúdo do objeto blob que a árvore tem para esse caminho específico do arquivo\n* Alterar o conteúdo de alguma forma e postar um novo objeto do blob com esse novo conteúdo, obtendo, em troca, o SHA do blob\n* Publicar um novo objeto da árvore com esse ponteiro do caminho de arquivo substituído pelo SHA do seu blob novo e obtendo, em troca, o SHA da árvore\n* Criar um novo objeto de confirmação com o SHA do commit atual como o principal e o SHA da novo da árvore, obtendo, em troca, o SHA do commit\n* Atualizar a referência do seu branch para apontar para o novo SHA do commit\n\nPode parecer complexo, mas, na verdade, é bem simples quando você entende o modelo e ele revela várias coisas que podem ser feitas com a API.\n\n## Verificar a possibilidade de mescla de pull requests\n\n> \\[!WARNING]\n> Não dependa do uso direto do Git ou de [`GET /repos/{owner}/{repo}/git/refs/{ref}`](/pt/rest/git/refs#get-a-reference) para atualizações de referências de `merge` do Git, pois esse conteúdo fica desatualizado sem aviso.\n\nUma API de consumo precisa solicitar explicitamente uma solicitação de pull para criar um commit de mesclagem de *teste*. Um commit de mesclagem de *teste* é criado quando você visualiza a solicitação de pull na interface do usuário e o botão \"Mesclar\" é exibido ou quando você [obtém](/pt/rest/pulls/pulls#get-a-pull-request), [cria](/pt/rest/pulls/pulls#create-a-pull-request) ou [edita](/pt/rest/pulls#update-a-pull-request) uma solicitação de pull usando a API REST. Sem essa solicitação, as referências de `merge` do Git ficarão desatualizadas até a próxima vez que alguém visualizar a solicitação de pull.\n\nSe você estiver usando métodos de sondagem que produzem refs git `merge` desatualizados, GitHub recomenda usar as seguintes etapas para obter as alterações mais recentes do branch padrão:\n\n1. Receber o webhook do pull request.\n2. Chame [`GET /repos/{owner}/{repo}/pulls/{pull_number}`](/pt/rest/pulls/pulls#get-a-pull-request) para iniciar uma tarefa em segundo plano para criar o candidato a commit de mesclagem.\n3. Sonde seu repositório usando [`GET /repos/{owner}/{repo}/pulls/{pull_number}`](/pt/rest/pulls/pulls#get-a-pull-request) para ver se o atributo `mergeable` é `true` ou `false`. Use o Git diretamente ou [`GET /repos/{owner}/{repo}/git/refs/{ref}`](/pt/rest/git/refs#get-a-reference) para atualizações nas refs do Git somente depois de executar as etapas anteriores."}