Pergunta

Dado o caso que fiz duas mudanças independentes em um arquivo:por exemplo.adicionou um novo método e alterou outro método.

Muitas vezes não quero confirmar as duas alterações como um cometer, mas como dois commits independentes.

Em um repositório git eu usaria o Modo interativo de git-add(1) para dividir o pedaço em menores:

 git add --patch

Qual é a maneira mais fácil de fazer isso com o Subversion?(Talvez até usando um plug-in Eclipse)

Atualizar:
Em A coisa sobre o Git, Ryan chama isso: “O problema da cópia de trabalho emaranhada.”

Foi útil?

Solução

Com git-svn você pode criar um repositório GIT local do repositório SVN remoto, trabalhar com ele usando o conjunto completo de recursos do GIT (incluindo commits parciais) e então enviar tudo de volta para o repositório SVN.

git-svn (1)

Outras dicas

Tartaruga SVN 1.8 agora suporta isso com o 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 o commit

De acordo com a documentação:

Para confirmar apenas as partes do arquivo relacionadas a um problema específico:

  1. na caixa de diálogo de commit, clique com o botão direito no arquivo, escolha "restaurar após commit"
  2. edite o arquivo, por exemplo.Mesclagem de tartaruga:desfaça as alterações que você ainda não deseja confirmar
  3. Salve o arquivo
  4. submeter o arquivo

Eu fiz isso usando TortoiseSVN.

O utilitário de mesclagem integrado permite mostrar uma diferença entre a versão do repositório e sua cópia de trabalho.

Use o criar backup função do utilitário diff

  1. Vá para submeter seu arquivo como se fosse submeter todas as suas alterações.
  2. Na janela de commit, clique duas vezes no arquivo para mostrar uma comparação.
  3. Nas configurações de comparação, clique na opção para fazer backup do arquivo original.
  4. Clique com o botão direito nas alterações que você não deseja e use select use outro bloco de texto.
  5. Salve a diferença exatamente uma vez.O backup será substituído sempre que você salvar.É por isso que você deseja salvar apenas uma vez.
  6. Confirme a mudança.
  7. Substitua o original pelo arquivo .bak criado (que terá todas as alterações originais).
  8. Confirme seu arquivo.

Agora você deve ter todas as suas alterações confirmadas, usando dois commits separados.

Tente usar svn diff > out.patch então copie o out.patch arquivo para out.patch.add e out.patch.modify

Somente quando você tem um arquivo de patch funcionando reverter 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, então svn commit a adição.

Lavar e enxaguar repetir durante out.patch.modify correção.

Se as alterações estiverem separadas no arquivo, conforme indicado na sua pergunta inicial - adicionou um novo método, alterou 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 poderia ter verificado várias cópias de trabalho da mesma fonte para aplicar seu trabalho:

svn co http://location/repository methodAdd

svn co http://location/repository methodModify

Tenha certeza de svn up e teste para ter certeza de que está tudo bem.

Isto é possível usando o TortoiseSvn (Windows) desde a v1.8.

4.4.1.A caixa de diálogo Confirmar

Se sua cópia de trabalho estiver atualizada e não houver conflitos, você está pronto para submeter suas alterações.Selecione qualquer arquivo e/ou pastas que você deseja se comprometer e, em seguida, o Tortoisesvn → Commit ....

<recorte>

4.4.3.Confirme apenas partes dos arquivos

Às vezes você deseja confirmar apenas partes das alterações feitas em um arquivo.Essa situação geralmente acontece quando você está trabalhando em algo, mas uma correção urgente precisa ser cometida, e essa correção está no mesmo arquivo em que você está trabalhando.

clique com o botão direito no arquivo e use Menu de contexto → Restaurar após confirmação.Isso criará uma cópia do arquivo como está.Então você pode editar o arquivo, por exemploNo Tortoisemérge e desfazer todas as mudanças que você não deseja cometer.Depois de salvar essas alterações, você pode enviar o arquivo.

Depois que a confirmação for concluída, a cópia do arquivo é restaurada automaticamente e você tem o arquivo com todas as suas modificações que não foram comprometidas de volta.

No Linux, eu daria http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNParcialCommit.php uma tentativa.Ainda não experimentei.

Eu costumava fazer isso:

  • No meu editor (eu uso o vim), edite o arquivo para que apenas uma das alterações apareça
  • Salve o arquivo (mas não saia do editor)
  • Envie o arquivo alterado para svn
  • Clique em "desfazer" no editor várias vezes para que o segundo conjunto de alterações reapareça
  • Salve o arquivo novamente
  • Confirme o segundo conjunto de alterações.

Esta é uma abordagem simplista que pressupõe que um conjunto de alterações é razoavelmente fácil de desfazer.Para situações mais complexas, eu desistiria e cometeria as duas alterações sem me preocupar com isso.

Agora que uso o git, isso é algo que espero nunca mais ter que fazer!

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 mesclagem que vem com o Xcode;substitua pela sua ferramenta de mesclagem favorita):

cp file file.new
svn revert file
opendiff file.new file -merge file

mesclar as alterações relacionadas, salvar a mesclagem, sair do programa de mesclagem

svn ci -m 'first hunk' file
mv file.new file
svn ci -m 'second hunk' file

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, você pode usar git-svn para manter um repositório git local e sincronizar seus commits com um servidor svn master;funciona muito bem na minha experiência limitada.

Tentar VisualSVN para Visual Studio.O última versão 6.1 apresenta o recurso QuickCommit.Você pode confirmar parcialmente as alterações selecionadas em um arquivo usando o novo Confirmar este bloco e Seleção de confirmação comandos do menu de contexto no editor do Visual Studio.

enter image description here

  1. Abra todos os arquivos que deseja dividir no editor de sua escolha
  2. Usando um conjunto de ferramentas diferente (no Win, use a sugestão de Spike (a versão antiga)) retorne ao segundo conjunto
  3. Comprometer-se
  4. volte ao editor de sua preferência e salve todos os arquivos

É 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 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 alterações).

Acho que uma opção mais fácil do que gerar arquivos diff, reverter, etc., seria fazer o check-out de duas cópias do repositório e usar uma ferramenta de comparação visual como o DeltaWalker para copiar pedaços de um para o outro.

A primeira cópia seria aquela com a qual 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, confirmá-la, copiar outra seção, confirmá-la, etc.

  1. Copie todos os arquivos modificados em questão para cópias de backup.
  2. Crie um patch do estado de funcionamento usando svn diff.
  3. Reverta os arquivos usando svn revert.
  4. Aplique novamente as partes do patch que você deseja submeter, usando o patch ferramenta, ou por edição manual, ou qualquer outra coisa.
  5. Correr diff depois compare sua cópia de trabalho com seu backup para ter certeza de que aplicou as partes do patch corretamente.
  6. Construa e teste.
  7. Comprometer-se.
  8. Copie suas cópias de backup de volta para o check-out do repositório.
  9. Repita em 2.(não em 1.!) até terminar.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top