Eu olhei em volta e não tenho certeza se isso é possível, mas aqui vai:
Eu tenho um arquivo (javascript) (digamos /lib/client.js) no qual tenho um identificador exclusivo atribuído a uma variável, assim:
var identifier = "SOME_IDENTIFIER";
Você pode pensar no identificador como um número de versão: Periodicamente, mudaremos essa variável para um novo identificador.
O que eu gostaria de fazer é encontrar todos os identificadores exclusivos que já usamos. Como posso fazer isso com o git?
Eu imagino que possa haver uma maneira de pesquisar no histórico do git e imprimir a correspondência de linha "var identifier ="
. Eu poderia desduplicar essa lista manualmente.
De qualquer forma, eu apreciaria qualquer insight aqui. Obrigado.
Respostas:
Desde o git 1.8.4 , existe uma maneira mais direta de responder à sua pergunta.
Supondo que essa linha
110
seja a linha que dizvar identifier = "SOME_IDENTIFIER";
, faça o seguinte:Isso retornará todos os commits que tocaram nessa linha de código.
[ Documentação Git (consulte o parâmetro de linha de comando "-L")]
fonte
Consulte a página do manual para
git-log
egitdiffcore
. Eu acredito que este comando faria isso, mas pode não ser muito certo:EDIT: Aqui está um começo preliminar para um script bash para mostrar as linhas reais. Isso pode ser mais o que você está procurando.
Ele usa
git log -G
para encontrar os commits interessantes, usando--format=%H
para produzir uma lista de hashes de commit. Em seguida, itera sobre cada commit interessante, pedindogit grep
para mostrar as linhas desse commit e arquivo que contém a regex, prefaciada com o hash de commit.EDIT: Alterado para usar em
-G
vez de-S
sugerido nos comentários.fonte
sfile=path/to/some_file; sfind='string_to_find'; for c in $(git log -G $sfind --format=%H -- $sfile); do git --no-pager grep -e $sfind -n $c -- $sfile; echo; done
Você também pode fazer isso com gitk:
Na lista suspensa "commit", escolha "adicionando / removendo string:" e na caixa de texto próxima a ele, digite "var identifier =", e quaisquer commits que adicionam ou removem linhas que contenham aquela string serão destacados.
fonte
git blame file.js
ougit gui blame file.js
?git gui blame file.js
fará isso ... mostrará todas as revisões de um arquivo e quem o alterou; você pode simplesmente clicar para trás no histórico.Se você adaptar a resposta de @ rob um pouco,
git log
basicamente fará isso por você, se tudo o que você precisa é uma comparação visual:-U0
significa saída no modo patch (-p
) e mostra linhas zero de contexto ao redor do patch.Você pode até mesmo fazer isso entre branches:
Pode haver uma maneira de suprimir o cabeçalho diff, mas não conheço nenhuma.
fonte
No magit , você pode fazer isso com
Em seguida, ele solicitará o arquivo e as linhas inicial e final.
fonte