Como podemos obter a diferença entre dois repositórios git?
O cenário: temos um repo_a e repo_b. Este último foi criado como uma cópia de repo_a. Houve um desenvolvimento paralelo nos dois repositórios posteriormente. Existe uma maneira de listar as diferenças das versões atuais desses dois repositórios?
Respostas:
Em repo_a:
fonte
origin/master
vez de um simplesmaster
. Além disso, isso encontra a diferença entre os ramos principais, e se você quiser encontrar todos os ramos diferentes? Por exemplo, para verificar o status de um backup do repositório?Meld pode comparar diretórios:
Basta usar os diretórios dos dois repositórios git e você obterá uma boa comparação gráfica:
Quando você clica em um dos itens azuis, pode ver o que mudou.
fonte
Você pode adicionar outro repo primeiro como controle remoto ao repo atual:
Em seguida, busque o brach desse controle remoto:
isso cria esse ramo como um novo ramo no seu repo atual, e você pode diferenciá-lo com qualquer um dos seus ramos, por exemplo, para comparar o ramo atual com o novo ramo (branch_name):
fonte
Depois de ter as duas ramificações em um repositório, você pode fazer a
git diff
. E colocá-los em um repositório é tão fácil quantofonte
Isso está incorreto.
remotes/b
é um controle remoto, mas não um ramo.Para fazê-lo funcionar, eu tinha que fazer:
fonte
Consulte http://git.or.cz/gitwiki/GitTips , seção "Como comparar dois repositórios locais" em "Geral".
Em resumo, você está usando a variável de ambiente GIT_ALTERNATE_OBJECT_DIRECTORIES para ter acesso ao banco de dados de objetos do outro repositório e usando git rev-parse com
--git-dir
/ GIT_DIR para converter o nome simbólico em outro repositório no identificador SHA-1.A versão moderna ficaria assim (supondo que você esteja em 'repo_a'):
onde
../repo_b/.git
está o caminho para o banco de dados de objetos no repo_b (seria repo_b.git se fosse um repositório vazio). Claro que você pode comparar versões arbitrárias, não apenas HEADs.Observe que, se repo_a e repo_b forem o mesmo repositório, pode fazer mais sentido colocar os dois no mesmo repositório, usando "
git remote add -f ...
" para criar apelidos para o repositório para atualizações repetidas ou obedeça "git fetch ...
"; conforme descrito em outras respostas.fonte
Eu uso o PyCharm, que tem ótimos recursos para comparar entre pastas e arquivos.
Basta abrir a pasta pai para ambos os repositórios e aguarde até que seja indexada. Em seguida, você pode usar o botão direito do mouse em uma pasta ou arquivo
Compare to...
e escolher a pasta / arquivo correspondente do outro lado.Ele mostra não apenas quais arquivos são diferentes, mas também seu conteúdo. Muito mais fácil que a linha de comando.
fonte
Sua melhor aposta é ter ambos os repositórios em sua máquina local e usar o comando linux diff com os dois diretórios como parâmetros:
diff -r repo-A repo-B
fonte
Uma maneira fácil de fazer isso sem tocar na configuração dos controles remotos. No repositório A, no mestre (suponha que você queira comparar as ramificações principais):
fonte
Você pode usar o seguinte comando:
ou, lado a lado, você pode usar:
No caso de Colorizing cada arquivo diff, você pode usar:
fonte
Lembrete de auto ... buscar primeiro, caso contrário, o repositório não possui hash local (eu acho).
etapa 1. Configure o controle remoto acima e acima ^
a diferença de um único arquivo segue esse padrão:
git diff localBranch uptreamBranch --spacepath / singlefile
git diff master upstream/nameofrepo -- src/index.js
fonte