Se eu excluir um arquivo no Subversion, como posso ver seu histórico e conteúdo? Se eu tentar fazer svn cat
ou svn log
em um arquivo inexistente, ele reclama que o arquivo não existe.
Além disso, se eu quiser ressuscitar o arquivo, devo svn add
devolvê-lo?
(Perguntei especificamente sobre o Subversion, mas também gostaria de saber como Bazaar, Mercurial e Git lidam com esse caso também.)
svn
version-control
bazaar
Benjamin Peterson
fonte
fonte
Quando você deseja olhar para arquivos antigos, realmente deve saber a diferença entre:
e
A primeira versão examina o caminho que agora está disponível como http: // server / svn / project / file e recupera esse arquivo como estava na revisão 1234. (Portanto, essa sintaxe não funciona após a exclusão de um arquivo).
A segunda sintaxe recebe o arquivo que estava disponível como http: // server / svn / project / arquivo na revisão 1234. Portanto, esta sintaxe FAZ trabalhar em arquivos excluídos.
Você pode até combinar esses métodos para recuperar um arquivo que estava disponível na revisão 2345 como http: // server / svn / project / file, mas com o conteúdo como em 1234 com:
fonte
./local/file
quando o./local
diretório não existia. Isso pode não ser um problema para versões mais recentes do SVN.^
notação é útil: refere-se à raiz do repositório, assim você pode dizersvn cat ^/local/file@REV
(dependendo da distância entre a raiz e a URL do repositório).svn: E200009: Could not cat all targets because some targets are directories
Primeiro, encontre o número da revisão em que o arquivo foi excluído:
Em seguida, procure no log.txt (não um guru do SVN, por isso não conheço uma maneira melhor) de encontrar uma linha com
e ver qual revisão foi essa. Em seguida, como nas outras respostas, ressuscite o arquivo usando a revisão anterior.
fonte
Não é nada de especial no git. Se você souber o nome do arquivo, poderá descobrir a alteração que o removeu com o log:
Em seguida, você pode usar essa confirmação para obter o arquivo como ele existia antes da exclusão.
Exemplo:
Observe que isso realmente não coloca o arquivo novamente no controle de revisão. Ele simplesmente coloca o arquivo como existia em seu estado final no local atual. Você pode adicioná-lo ou apenas inspecioná-lo ou qualquer outra coisa a partir desse ponto.
fonte
Uma solução usando apenas a GUI:
Se você souber o nome do arquivo, mas não souber o número da última revisão ou o caminho:
Isso mostrará apenas as revisões em que o arquivo foi adicionado / modificado / excluído. Este é o seu histórico do arquivo.
Observe que se o arquivo foi excluído excluindo uma de suas pastas pai, ele não terá uma entrada 'excluída' no log (e, portanto, a solução de mjy não funcionará). Nesse caso, sua entrada mais recente no log filtrado corresponderá ao seu conteúdo na exclusão.
fonte
Você obterá o caminho e a revisão. No git (também verifica se há renomeação):
fonte
Além da resposta de Dustin, se você quiser apenas examinar o conteúdo, e não conferir, no exemplo dele, você pode fazer:
o: separa uma revisão e um caminho nessa revisão, solicitando efetivamente um caminho específico em uma revisão específica.
fonte
Use este comando:
Isso listará todas as revisões que já excluíram todos os arquivos correspondentes ao padrão. Ou seja, se você estiver procurando por README arquivo, então todos
/src/README
,/src/README.first
e/some/deeply/hidden/directory/READMENOT
será encontrado e listados.Se o seu nome de arquivo contiver barras (caminho), pontos ou outros caracteres especiais de expressão regular, não esqueça de evitá-los para evitar incompatibilidade ou erros.
fonte
Se você não conhece o caminho para o arquivo excluído, é possível procurá -lo no
svn log
comando pesado demais :O comando provavelmente está martelando o servidor da mesma forma que faria sem a opção de pesquisa, mas pelo menos o restante dos recursos envolvidos (incluindo seus globos oculares) seria um pouco aliviado, pois isso indicará em que revisão esse arquivo foi excluído. Em seguida, você pode seguir as outras dicas (principalmente usando o mesmo
svn log
comando, mas já em um caminho definido).fonte
svn log --search _test2.php -v
... svn: opção inválida: --search ... :(O pôster realmente fez 3 perguntas aqui:
Todas as respostas que vejo aqui são para as perguntas 2 e 3.
A resposta à pergunta 1 é:
Você ainda precisa obter o número da revisão para quando o arquivo existiu pela última vez, o que é claramente respondido por outras pessoas aqui.
fonte
Ah, como estou aprendendo a usar o Bazaar, é algo que tentei. Sem sucesso, parece que você não pode registrar e anotar arquivos removidos atualmente ... :-(
Tentou:
mas curiosamente (e felizmente) eu posso fazer:
e:
e como sugerido no bug acima:
(ajuste
-B
(--before-context
) parâmetro conforme necessário).fonte
Você precisaria especificar uma revisão.
fonte
Se você deseja examinar o histórico de um arquivo antes de ser renomeado, como mencionado em um comentário aqui, você pode usar
fonte
Eu também queria uma resposta. Tente o seguinte para produzir apenas exclusões de
svn log
.Isso filtra a saída do log através do awk . O awk armazena em buffer cada linha de revisão que encontra, produzindo-a somente quando um registro de exclusão é encontrado. Cada revisão é emitida apenas uma vez, portanto, várias exclusões em uma revisão são agrupadas (como na
svn log
saída padrão ).Você pode especificar a
--limit
para reduzir a quantidade de registros retornados. Você também pode remover o--stop-on-copy
, conforme necessário.Sei que há queixas sobre a eficiência de analisar todo o log. Eu acho que essa é uma solução melhor do que o grep e sua opção "lançar uma ampla rede"
-B
. Não sei se é mais eficiente, mas não consigo pensar em uma alternativasvn log
. É semelhante à resposta de Alex Amelkin, mas não precisa de um nome específico. Também é o meu primeiro script awk , por isso pode não ser convencional.fonte
Suponha que seu arquivo tenha sido nomeado como ~ / src / a / b / c / delete.file
saída de amostra, encontrada em r90440
copie-o novamente para a versão anterior (90439 = 90440-1)
fonte
Você pode encontrar a última revisão que fornece o arquivo usando a pesquisa binária. Eu criei um
/bin/bash
script simples para isso:fonte
Eu escrevi um script php que copia o log svn de todos os meus repositórios em um banco de dados mysql. Agora posso fazer pesquisas de texto completo nos meus comentários ou nomes de arquivos.
fonte