Dado o caso, fiz duas alterações independentes em um arquivo: por exemplo. adicionou um novo método e mudou outro método.
Freqüentemente, não quero comprometer ambas as alterações como um commit, mas como dois commits independentes.
Em um repositório git, eu usaria o modo interativo do git-add (1) para dividir o pedaço em outros menores:
git add --patch
Qual é a maneira mais fácil de fazer isso com o Subversion? (Talvez até usando um plug-in Eclipse)
Atualização:
Em The Thing About Git , Ryan chama isso de: “The Tangled Working Copy Problem”.
Respostas:
Com git-svn você pode fazer um repositório GIT local do repositório SVN remoto, trabalhar com ele usando o conjunto completo de recursos GIT (incluindo commits parciais) e então enviar tudo de volta para o repositório SVN.
git-svn (1)
fonte
Tortoise SVN 1.8 agora suporta isso com seu recurso "Restaurar após confirmação". Isso permite que você faça edições em um arquivo, com todas as edições sendo desfeitas após a confirmação
Pela documentação:
fonte
Eu fiz isso usando o TortoiseSVN .
O utilitário de mesclagem embutido permite que você mostre uma diferença entre a versão do repositório e sua cópia de trabalho.
Use a função de criar backup do utilitário diff
Agora você deve ter todas as suas alterações confirmadas, usando dois commits separados.
fonte
Tente usar e, em
svn diff > out.patch
seguida, copie oout.patch
arquivo paraout.patch.add
eout.patch.modify
Somente quando você tiver um arquivo de patch funcionando, reverta o arquivo original usando
svn revert out.c
.Edite os arquivos de patch manualmente para que eles contenham apenas os pedaços para adicionar ou modificar. Aplique-os ao arquivo original usando o
patch
comando, teste se a adição funcionou e, em seguida,svn commit
a adição.Repita o enxágue da lavagem para o
out.patch.modify
patch.Se as alterações forem separadas no arquivo conforme sua pergunta inicial declarada - adicionado um novo método, alterado um método existente - isso funcionará
Esta é uma solução muito tediosa - embora eu não esteja convencido de que você deva ter algum motivo para separar seus commits.
Você também pode ter verificado várias cópias de trabalho da mesma fonte para aplicar seu trabalho:
Certifique-se de fazer o
svn up
teste e verifique se está tudo bem.fonte
Isso é possível usando TortoiseSvn (Windows) desde v1.8.
No Linux, eu daria uma chance ao http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php . Não tentei sozinho, no entanto.
fonte
Eu costumava fazer isso:
Essa é uma abordagem simplista que assume que um conjunto de alterações é razoavelmente fácil de desfazer. Para situações mais complexas, desistiria e cometeria as duas alterações sem me preocupar com isso.
Agora que uso o git, espero nunca mais ter que fazer isso!
fonte
Eu uso um repositório darcs local ou apenas mesclo as alterações gradualmente. Com a fusão (opendiff abre o FileMerge, um programa de fusão que vem com o Xcode; substitua pela sua ferramenta de fusão favorita):
mesclar as mudanças relacionadas, salvar a mesclagem, sair do programa de mesclagem
se houver mais de um pedaço não relacionado no arquivo, enxágue e repita (mas por que você esperaria tanto antes de confirmar ?!)
Além disso, se você conhece git, pode usar git-svn para manter um repositório git local e sincronizar seus commits para um servidor svn master; funciona muito bem na minha experiência limitada.
fonte
Experimente o VisualSVN para Visual Studio . A versão 6.1 mais recente apresenta o recurso QuickCommit. Você pode confirmar parcialmente as alterações selecionadas em um arquivo usando o novo Commit this Block e Commit Selection comandos do menu de contexto no editor do Visual Studio.
fonte
É um pouco mais arriscado do que a sugestão completa de Spike, mas pode ser mais fácil de fazer. Além disso, certifique-se de tentar em outra coisa primeiro, pois alguns editores se recusarão a salvar um arquivo que foi alterado a menos que você recarregue esse arquivo (perdendo todas as suas alterações)
fonte
Acho que uma opção mais fácil do que gerar arquivos diff, revertendo, etc, seria ter duas cópias do repositório verificadas e usar uma ferramenta de diff visual como DeltaWalker para copiar pedaços de um para o outro.
A primeira cópia seria aquela em que você realmente trabalha, e a segunda seria apenas para esse propósito. Depois de fazer várias alterações na primeira, você pode copiar uma seção para a segunda, submetê-la, copiar outra seção, submetê-la, etc.
fonte
svn diff
.svn revert
.patch
ferramenta, seja por edição manual, ou qualquer outra coisa.diff
depois para comparar sua cópia de trabalho com seu backup para ter certeza de que aplicou as partes do patch corretamente.fonte