Quase todos os sistemas de controle de versão têm opções de ramificação. Mas Git é conhecido por seus recursos de ramificação rápida. Ramos do Git são leves. Portanto, as penalidades de desempenho para ramificação são mínimas e as equipes de desenvolvimento são encorajadas a ramificar e fundir o máximo possível. Mas quando você está trabalhando com vários ramos, é importante ser capaz de comparar e contrastar as diferenças. Neste tutorial, vamos passar por um fluxo de trabalho para ver como podemos comparar vários branches e commits.Vamos primeiro configurar a seguinte situação:
C00 => C01 => C03 => C06 (mestre)
\
C02 => C04 => C05 (desenvolvimento)
As seguintes etapas foram realizadas:
- C00: Adicionado hello_world.py (ramo mestre)
- - Criou o ramo de desenvolvimento
- C01: hello_world modificado.py para adicionar um segundo hello (branch master)
- C02: hello_world modificado.py para adicionar o ramo de desenvolvimento diz Olá (ramo de desenvolvimento)
- C03: readme adicionado.txt (ramo mestre)
- C04: hello_world modificado.py para adicionar o ramo de desenvolvimento diz Olá novamente (ramo de desenvolvimento)
- C05: Informação adicionada.txt (ramo de desenvolvimento)
- C06: Leia-me modificado.txt para adicionar segunda linha (ramo mestre)
Depois de todos os commits, o branch 'master' tem os seguintes arquivos:
Olá Mundo.py
Leia-me.TXT
E o branch 'development' possui os seguintes arquivos:
Olá Mundo.py
informação.TXT
Comparando as cabeças de dois ramos
Você pode usar o nome dos ramos para comparar as cabeças de dois ramos:
$ git diff master… developmentdiff --git a / hello_world.py b / hello_world.py
índice e27f806… 3899ed3 100644
--- a / hello_world.py
+++ b / hello_world.py
@@ -2,7 +2,7 @@
def main ():
print ("Primeiro Olá!")
- print ("Segundo Olá!")
-
+ print ("O ramo de desenvolvimento diz Olá")
+ print ("O ramo de desenvolvimento diz Olá novamente")
if __name__ == "__main__":
a Principal()
diff --git a / info.txt b / info.TXT
novo modo de arquivo 100644
índice 0000000… 0ab52fd
--- / dev / null
+++ b / info.TXT
@@ -0,0 +1 @@
+Nova informação
diff --git a / readme.txt b / readme.TXT
modo de arquivo excluído 100644
índice e29c296… 0000000
--- a / readme.TXT
+++ / dev / null
@@ -1,2 +0,0 @@
-1 Primeira linha do readme.TXT
-2 segunda linha do readme.TXT
O comando diff está olhando recursivamente para as mudanças. Ele executou os seguintes diffs:
diff -git a / hello_world.py b / hello_world.py
diff -git a / info.txt b / info.TXT
diff -git a / readme.txt b / readme.TXT
Aqui, 'a' representa o ramo 'mestre' e 'b' representa o ramo de desenvolvimento. O 'a' é sempre atribuído ao primeiro parâmetro e 'b' ao segundo parâmetro. O / dev / null significa que o branch não tem o arquivo.
Comparando entre commits
Em nosso exemplo, o branch 'master' tem os seguintes commits:
$ git statusNo mestre de filial
nada para confirmar, diretório de trabalho limpo
$ git log --oneline
caa0ddd C06: leia-me modificado.txt para adicionar segunda linha (ramo mestre)
efaba94 C03: readme adicionado.txt (ramo mestre)
ee60eac C01: hello_world modificado.py para adicionar um segundo hello (branch master)
22b4bf9 C00: Adicionado hello_world.py (ramo mestre)
O branch de desenvolvimento tem os seguintes commits:
$ git statusNo desenvolvimento da filial
nada para confirmar, diretório de trabalho limpo
$ git log --oneline
df3a4ee C05: informações adicionadas.txt (ramo de desenvolvimento)
0f0abb8 C04: hello_world modificado.py para adicionar o ramo de desenvolvimento diz Olá novamente (ramo de desenvolvimento)
3f611a0 C02: hello_world modificado.py para adicionar o ramo de desenvolvimento diz Olá (ramo de desenvolvimento)
22b4bf9 C00: Adicionado hello_world.py (ramo mestre)
Suponha que queremos comparar o hello_world.py para confirmações C01 e C02. Você pode usar os hashes para comparar:
$ git diff ee60eac: hello_world.py 3f611a0: hello_world.pydiff --git a / ee60eac: hello_world.py b / 3f611a0: hello_world.py
índice e27f806… 72a178d 100644
--- a / ee60eac: hello_world.py
+++ b / 3f611a0: hello_world.py
@@ -2,7 +2,7 @@
def main ():
print ("Primeiro Olá!")
- print ("Segundo Olá!")
+ print ("O ramo de desenvolvimento diz Olá")
if __name__ == "__main__":
a Principal()
Você pode usar o mesmo princípio para comparar commits dentro do mesmo branch também.
Visual Merge Tools
Olhar para comparações baseadas em texto pode ser difícil. Se você configurar o difftool Git com um aplicativo de mesclagem visual como DiffMerge ou BeyondCompare, você será capaz de ver as diferenças melhor.
Um estudo mais aprofundado:
- Documentação Git Diff
- Documentação Git DiffTool
- Configuração DiffMerge com DiffTool
- Configuração BeyondCompare com DiffTool
Referências:
- Tutorial do Git: ferramentas Diff e Merge, YouTube
- http: // coding4streetcred.com / blog / post / configure-diffmerge-for-your-git-difftool
- http: // gitbaby.com / how-to-diff-diff-one-file-to-an-arbitrary-version-in-git.html
- https: // git-scm.com / book / en / v2 / Git-Branching-Basic-Branching-and-Merging
- https: // git-scm.com / book / id / v2 / Git-Branching-Branches-in-a-Nutshell
- https: // git-scm.com / docs / git-diff
- https: // git-scm.com / docs / git-difftool
- https: // sourcegear.com / diffmerge /
- https: // sourcegear.com / diffmerge / webhelp / sec__git__linux.html
- https: // stackoverflow.com / questions / 9834689 / comparing-two-branches-in-git
- https: // veerasundar.com / blog / 2011/06 / git-tutorial-comparing-files-with-diff /
- https: // www.scootersoftware.com / recursos.php
- https: // www.scootersoftware.com / support.php?zz = kb_vcs