DEV Community

Poveda
Poveda

Posted on

4 2

Git apply: colocando os patch files em stage

No último post mostrei como podemos utilizar arquivos patch para compartilhar mudanças e commits quando não temos acesso ao remote. A abordagem utilizada coloca as alterações diretamente na árvore de commits e possui mecanismos para evitar duplicidades no momento da aplicação.

Mas se eu quiser revisar as alterações antes de aplicar o commit na árvore?

É justamente para esse cenário que existe o git apply

Git apply

O comando git apply aplica as mudanças que estão dentro dos arquivos .patch aos arquivos correspondentes dentro da pasta de trabalho.

Para adicionar as mudanças basta executar o comando abaixo

git apply patch-commits/0001-Adiconadas-mais-motoriza-es-a-base.patch
Enter fullscreen mode Exit fullscreen mode

Após a execução do comando temos a área de staging com os arquivos alterados

~/mongoblogposts$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   db_data/carro_dump.json

no changes added to commit (use "git add" and/or "git commit -a")
Enter fullscreen mode Exit fullscreen mode

E analisando os logs dos commits, nota-se que nenhum novo commit foi adicionado à árvore

~/mongoblogposts$ git log -1 --oneline
65182aa (HEAD -> main, origin/main) Material post git patch
Enter fullscreen mode Exit fullscreen mode

Verificando quais arquivos foram alterados no último commit:

~/mongoblogposts$ git show -1 --compact-summary
commit 65182aa52f918b567e33545bd15f3bea93d67c58 (HEAD -> main, origin/main)
Author: Juliano Poveda <julianopoveda@github.com>
Date:   Mon Sep 13 09:41:58 2021 -0300

    Material post git patch

 patch-commits/0001-Adiconadas-mais-motoriza-es-a-base.patch (new)     | 386 ++++++++++++++++++++++++++++++++++++++++++
 patch-commits/0002-Reformata-o-readme-criacao-do-ambiente.patch (new) |  45 +++++
 patch-commits/readme.md (new)                                         |  83 +++++++++
Enter fullscreen mode Exit fullscreen mode

Viram! As alterações estão na área de staging e não há nenhum novo commit na árvore.

O parâmetro --check

O apply por padrão já verifica se é possível adicionar as alterações, no entanto, em determinadas ocasiões é bom fazer uam verificação do arquivo .patch antes de adicionar suas alterações. O parâmetro --check faz justamente esta validação. Caso os arquivos estejam aptos a serem adicionados à área de staging, nenhuma mensagem é retornada

~/mongoblogposts$ git apply patch-commits/0001-Adiconadas-mais-motoriza-es-a-base.patch
Enter fullscreen mode Exit fullscreen mode

Já se o arquivo não estiver apto, o comando emite a mensagem

error: patch failed: db_data/carro_dump.json:2
error: db_data/carro_dump.json: patch does not apply

Note que quando é passado --check no comando, as alterações constantes nos arquivos de patch não são aplicadas à área staging. Para que as alterações sejam aplicadas é necessário adicionar o parâmetro --apply ou rodar o comando sem o --check

Impressões e Conclusão

Este comando ao contrário do git am, nos permite fazer um "PR local" antes de adicionar as alterações à árvore.
Então, na próxima vez que ficares sem acesso ao repositório remoto e precisares entregar aquela tarefa super importante, acessa essa mini série e relembra como fazer a passagem das alterações por patch files :).

Os arquivos para teste, são os mesmos do post anterior(pasta patch-commits) e estão disponíveis no github.

Referências

https://git-scm.com/docs/git-apply

Image of Datadog

How to Diagram Your Cloud Architecture

Cloud architecture diagrams provide critical visibility into the resources in your environment and how they’re connected. In our latest eBook, AWS Solution Architects Jason Mimick and James Wenzel walk through best practices on how to build effective and professional diagrams.

Download the Free eBook

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more