Como funciona o commit não recursivo do Tortoise?

110

Eu verifiquei uma cópia do branch SVN (meu branch) localmente ao qual eu mesclei de um branch diferente (que tem uma estrutura de pastas completamente diferente). Basicamente, há muitas exclusões (de arquivos antigos) e adições (de novos arquivos).

Quando eu tento enviar a fusão para o repositório (para o meu branch), o Tortoise diz

Este commit não é recursivo, e existem pastas movidas / renomeadas selecionadas para commit. Essas movimentações / renomeações são sempre realizadas recursivamente no repositório. Você quer se comprometer assim mesmo?

Tudo bem continuar com este commit? Se não, o que devo fazer para que não haja problemas?

Além disso, para alguns arquivos que adicionei, fiz alterações após adicionar (se isso afetar a natureza).

user1447725
fonte

Respostas:

129

Encontrado pelo Google como consertar: pressione F5 na janela de confirmação (não no "popup de aviso")

Consulte http://tortoisesvn.tigris.org/ds/viewMessage.do?dsForumId=757&dsMessageId=2831045 para obter detalhes.

Em 26.08.2011 22:39, Ryan J Ollos escreveu:

Há vários meses, vejo a seguinte caixa de diálogo aparecer ao iniciar o Commit. Isso freqüentemente acontece ao tentar confirmar após uma fusão.

O que tenho notado recentemente, no entanto, é que se eu cancelar e atualizar manualmente a lista de arquivos (F5), não vejo a mensagem novamente ao iniciar o commit uma segunda vez. O commit parece bem sucedido e sem problemas adicionais.

O diálogo de confirmação monitora a cópia de trabalho em um thread de segundo plano para notificações de mudança. Tais notificações são enviadas pelo sistema operacional caso os arquivos sejam modificados / movidos / renomeados / ... Se tal notificação for recebida, a caixa de diálogo de confirmação primeiro faz algumas verificações para que possa descartar a maioria delas. Se a notificação indicar que um arquivo que não foi verificado e não está visível na caixa de diálogo de confirmação foi alterado de alguma forma, ela volta para a confirmação não recursiva. Isso porque se você tiver, por exemplo, um arquivo aberto em outro editor e salvar suas alterações enquanto a caixa de diálogo de submissão estiver aberta, então esse arquivo será enviado também mesmo que você não o tenha verificado na caixa de diálogo de submissão (não aparece até que você atualize a caixa de diálogo com F5).

Portanto, se você vê essa caixa de diálogo de aviso com frequência, verifique se há outra ferramenta / aplicativo em execução que modifica os arquivos em sua cópia de trabalho.

E como você notou: se você apertar F5, aquele 'sinalizador não recursivo' é reiniciado porque depois de uma atualização, você vê todos os arquivos novamente - mesmo aqueles que você modificou depois de iniciar o diálogo.

Stefan

ichaki5748
fonte
1
O link na resposta parece estar morto. Aqui está um válido do Internet Archive web.archive.org/web/20150306224932/http://…
buzz3791
1
Tentei pressionar F5. O efeito é que agora, a lista de arquivos da caixa de diálogo de confirmação mostra a maioria dos meus arquivos duas vezes (exatamente com o mesmo caminho e nome), e a mensagem de aviso ainda aparece quando tento fazer a confirmação.
OR Mapper
26

Eu tive o mesmo problema, mas resolvi revertendo as alterações nos arquivos que marquei para 'ignorar ao confirmar'

Depois de reverter esses arquivos, o tortoisesvn foi capaz de confirmar todos os outros arquivos da fusão

Kevin brady
fonte
qual é a razão real? por que ou como esses arquivos estão causando o problema?
Mannoj
5

Tudo bem se eu continuar com este commit?

Não, seu commit irá ignorar todas as mudanças no WC-tree e refletir apenas as mudanças no nível raiz (mesclagem quebrada).

Você cometeu um erro ao fazer o check-out não recursivo inicialmente. Você pode tentar executar um commit completo e bom usando o --depth infinityparâmetro na CLI ou encontrar esta opção na GUI do TortoiseSVN.

svn commit --depth infinity . -m "Merge"
Texugo Preguiçoso
fonte
1
"Você cometeu um erro ao fazer o check-out não recursivo inicialmente." Não, não necessariamente. Eu verifiquei meu banheiro da mesma forma que sempre faço, mas ainda estou tendo esse problema de repente. Na verdade, esse não parece ser o caso para nenhuma das soluções alternativas abaixo.
Keith M de
Isso é completamente falso. Eu recebo esta mensagem de vez em quando e verifiquei minha cópia de trabalho recursivamente da mesma maneira que sempre fiz
1800 INFORMAÇÕES
1

Além disso, para alguns arquivos que adicionei ao SVN, fiz alterações após a adição (se isso afetar a natureza).

No meu caso, foi exatamente isso que fez a mensagem aparecer, até mesmo eu deselecionei esses arquivos para o commit.

Solução feia que só funciona com segurança se apenas alguns arquivos forem afetados:

  1. Crie uma cópia dos arquivos alterados
  2. Reverter os arquivos alterados
  3. Comprometa a fusão / reintegração
  4. Copie os arquivos alterados de volta para o local original

Lembrete para mim mesmo: só reintegre um galho se o alvo (tronco) estiver limpo.

Thomas Weller
fonte
1

Parece que o TortoiseSVN realiza algum tipo de verificação de validade antes de chamar o commit. Bom, mas a mensagem de erro não é muito clara.

Quando enfrentei esse problema, voltei a usar a linha de comando svn para confirmar. A confirmação falhou devido ao motivo de uma das pastas não estar atualizada. Depois de atualizar apenas essa pasta, executei "svn commit" mais uma vez e foi tudo bem.

Edit: PS: Antes de usar, tente fazer isso, certifique-se de não ter nenhum arquivo marcado como "ignorar ao enviar". "Ignorar no commit" é específico para tartarugas e o SVN commit escolhe essas mudanças também.

sgowd
fonte
1

Só pensei em postar isso porque funcionou para mim ...

A razão pela qual isso aconteceu é porque eu parcialmente renomeei um dos novos projetos que criei e por alguma razão todos eles apareceram como "Missing" na tela de commit.

Depois de remover o projeto e a pasta (que o SVN havia marcado) e colocá-los de volta como um novo projeto novamente, de repente todos os "ausentes" se transformaram em "adicionados" e o commit funcionou bem sem me avisar de nada .

Espero que isto ajude!

Danny Lager
fonte
1

Eu percebi esse problema e a causa foram alguns arquivos adicionados que não tinham o status adicionado sem motivo aparente. Eles eram 'normais', embora a pasta pai fosse exibida corretamente como 'adicionada'. Eu reverti essas alterações 'normais' e então as refiz manualmente. Isso fez com que cada item adicionado aparecesse duas vezes na lista de confirmação, mas resolveu o erro e tudo parece estar funcionando bem agora.

Não tinha nada a ver com ignore-on-commit como em outra resposta, apenas parecia um bug no TortoiseSVN.

Chris
fonte
Pelo que eu posso dizer, o TortoiseSVN não move arquivos recursivamente. Mover uma pasta altera o histórico da pasta, mas não os arquivos nela contidos. Isto significa que para mover pastas com o TortoiseSVN você tem que recriar a pasta no destino desejado, adicionar a pasta e então mover o conteúdo da pasta original para a nova. Ou apenas use a linha de comando.
Bradley Singer
Acredito que isso foi uma fusão, não um movimento. A menos que sejam operações semelhantes, não estou entendendo.
Chris
0

O problema pode ser que seu mergeinfo seja excluído por alguém ou automaticamente, porque as informações subiram na árvore. Se você for mesclá-los novamente, funcionará no momento. Mas todos os outros terão problemas com suas ramificações não mescladas. O SVN perderá algum código e mesclará o código já enviado novamente.

Portanto, reverter esses arquivos e alterá-los novamente pode funcionar, mas você não deve apenas confirmar as alterações.

Nicolas
fonte
0

Eu simplesmente tive o mesmo problema. Em vez de selecionar todos os arquivos, cliquei em versionado e tudo funcionou bem. No meu caso, a opção versionado selecionou todos os arquivos, então está tudo ok agora.

Bruno Milanez
fonte
-4

Eu não conheço uma opção para tortoisesvn, mas você poderia usar a linha de comando

svn commit --non-recursive [folder]

isso deve funcionar exatamente como você gostaria que funcionasse bem

amarelo
fonte
Outras respostas dizem que isso não comprometerá o que você realmente deseja.
Keith M de