Eu sei que posso svn diff -r a:b repo
visualizar as alterações entre as duas revisões especificadas. O que eu gostaria é um diff para cada revisão que mudou o arquivo. Esse comando está disponível?
Eu sei que posso svn diff -r a:b repo
visualizar as alterações entre as duas revisões especificadas. O que eu gostaria é um diff para cada revisão que mudou o arquivo. Esse comando está disponível?
Respostas:
Não existe um comando interno para isso, então geralmente faço algo assim:
#!/bin/bash
# history_of_file
#
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -n | {
# first revision as full text
echo
read r
svn log -r$r $url@HEAD
svn cat -r$r $url@HEAD
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
Em seguida, você pode chamá-lo com:
history_of_file $1
svn: '.' is not a working copy svn: Syntax error in revision argument '@HEAD' svn: Syntax error in revision argument '@HEAD'
svn log --diff [path_to_file]
funciona exatamente assim! stackoverflow.com/a/24938573/3185510
Um pouco diferente do que você descreveu, mas acho que pode ser o que você realmente precisa:
svn blame filename
Ele imprimirá o arquivo com cada linha prefixada pela hora e autor da confirmação que o alterou pela última vez.
Se você deseja ver o histórico completo de um arquivo com alterações de código:
svn log --diff [path_to_file] > log.txt
--diff
uma vez que possui testes para a opção, enquanto o 1.7.3 não possui nenhum - subversion/tests/cmdline/log_tests.py
.
--limit <number>
opção. Assim:svn log --diff --limit 5 [path_to_file]
Você pode usar git-svn
para importar o repositório para um repositório Git e, em seguida, usar git log -p filename
. Isso mostra cada entrada de log para o arquivo seguida pelo diff correspondente.
git log X..Y -o filename
Começar com
svn log -q file | grep '^r' | cut -f1 -d' '
Isso fornecerá uma lista de revisões nas quais o arquivo foi alterado, que você poderá usar para criar scripts para chamadas repetidas svn diff
.
svn log -q some_file.xxx | grep ^r | awk '{print $1}' | sed -e 's/^r//' | xargs -i svn diff -rHEAD:{} some_file.xxx > ~/file_history.txt
pouco agradável-liner um (awk faz mesmo que cut)
O comando "culpar", de nome estranho, faz isso. Se você usar o Tortoise, ele exibirá uma caixa de diálogo "da revisão" e, em seguida, uma lista de arquivos com um indicador linha a linha do número da revisão e o autor ao lado.
Se você clicar com o botão direito do mouse nas informações da revisão, poderá abrir uma caixa de diálogo "Mostrar log" que fornece informações completas sobre o check-in, juntamente com outros arquivos que fizeram parte do check-in.
Até onde eu sei, não existe um comando svn integrado para fazer isso. Você precisaria escrever um script para executar vários comandos para criar todas as diferenças. Uma abordagem mais simples seria usar um cliente svn da GUI, se essa for uma opção. Muitos deles, como o plug-in subversivo do Eclipse, listarão o histórico de um arquivo e permitirão visualizar o diff de cada revisão.
Obrigado, Bendin. Eu gosto muito da sua solução.
Eu mudei para trabalhar em ordem inversa, mostrando as alterações mais recentes primeiro. O que é importante com o código antigo, mantido por vários anos. Eu costumo colocá-lo em mais.
svnhistory elements.py |more
Eu adicionei -r ao tipo. Eu removi as especificações. manipulação para 'primeiro registro'. É que ocorrerá um erro na última entrada, pois não há nada para diferenciá-la. Embora eu esteja vivendo com isso porque nunca desço tão longe.
#!/bin/bash
# history_of_file
#
# Bendin on Stack Overflow: http://stackoverflow.com/questions/282802
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
#
# Dlink
# Made to work in reverse order
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -nr | {
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
history_of_file $1
Eu já vi várias respostas parciais enquanto pesquisava esse tópico. Foi isso que funcionou para mim e espero que ajude os outros. Este comando exibirá a saída na linha de comando, mostrando o número da revisão, autor, carimbo de data e hora da revisão e alterações feitas:
svn blame -v <filename>
Para facilitar sua pesquisa, você pode gravar a saída em um arquivo e grep para o que está procurando.