Posso tornar o Subversion + TortoiseSVN insensível a maiúsculas e minúsculas para Windows?

StackOverflow https://stackoverflow.com/questions/14582

  •  08-06-2019
  •  | 
  •  

Pergunta

Tenho usado o Subversion para controle de código com o TortoiseSVN para fazer interface com o servidor nos últimos meses e, em geral, está indo muito bem!No entanto, ocasionalmente meu FoxPro IDE altera o caso de uma extensão de arquivo sem avisar onde "programa.prg" torna-se "programa.PRG") O TortoiseSVN aparentemente entende que isso significa que o primeiro arquivo foi removido, sendo sinalizado como "ausente" e o segundo nome aparece como "não versionado", causando estragos na minha capacidade de rastrear alterações no arquivo.Eu entendo que o Subversion tem origem no mundo que diferencia maiúsculas de minúsculas do *nix, mas existe alguma maneira de controlar esse comportamento no Subversion ou no TortoiseSVN para que o nome do arquivo não diferencie maiúsculas de minúsculas quando usado com o Windows?

Foi útil?

Solução

Infelizmente, o Subversion diferencia maiúsculas de minúsculas.Isto se deve ao fato de que os arquivos do Subversion podem ser verificados tanto em sistemas de arquivos com distinção entre maiúsculas e minúsculas (por exemplo, *nix) quanto em sistemas de arquivos que não diferenciam maiúsculas de minúsculas (por exemplo, Windows, Mac).

Este script de gancho pré-confirmação pode ajudá-lo a evitar problemas ao fazer check-in de arquivos.Se isso não resolver o seu problema, minha melhor sugestão é escrever um pequeno script para garantir que todas as extensões estejam em letras minúsculas e executá-lo sempre antes de fazer check-in/check-out.Será uma PITA, mas talvez seja a sua melhor aposta.

Outras dicas

O Windows suporta distinção entre maiúsculas e minúsculas, mas você deve enviar os sinalizadores POSIX corretos em CreateFile da API do Windows!Uma chave de registro pode precisar ser alterada (SFU/Tools for Unix e Ultimate Windows 7 já tem essa entrada de registro definida para que o Windows suporte nomes de arquivos com distinção entre maiúsculas e minúsculas).

O Windows foi projetado a partir do Unix, mas coisas como o Explorer.exe e outros programas são projetados para não permitir a distinção entre maiúsculas e minúsculas para compatibilidade com versões anteriores e segurança (principalmente ao lidar com a execução do notepad.exe vs.NOTEPAD.EXE, onde todas as letras maiúsculas são vírus ou malware).

Mas o Vista+ possui atributos de segurança que o tornam obsoleto.

TortiousSVN simplesmente não suporta passar esse sinalizador posix ao criar e renomear arquivos.

Eu uso o TortoiseSVN com VFP, e ele lida perfeitamente com a inversão do caso.A única vez que isso não acontece é se eu tiver o arquivo aberto no IDE quando tento fazer o commit:o bloqueio de arquivo que o VFP mantém o confunde.É aqui que entra o seu problema ou existem outros problemas?

Fiz uma apresentação na FoxForward no ano passado sobre o uso do VFP com o Subversion:a maior parte da apresentação tratou da linha de comando, mas há alguns slides no final que possuem links para ferramentas que ajudam você a trabalhar com o Subversion no VFP. http://docs.google.com/Presentation?id=dfxkh6x4_3ghnqc4

Acredito que as letras maiúsculas e minúsculas aleatórias nas extensões não são nada aleatórias.Lembro-me de testar isso.Se você modificar um programa do gerente de projeto.Ao clicar no botão modificar, digamos.E então salve as alterações, a extensão fica em minúsculas.Se você executar um comando de modificação na janela de comando e salvar as alterações, a extensão ficará em maiúscula.Aparentemente, os programadores da Microsoft não se preocuparam com o fato de o caso da extensão ser o mesmo.

Kit, você comentou acima que os arquivos de origem baseados em binários do VFP são difíceis de trabalhar no Subversion.O link que forneci acima menciona algumas ferramentas para facilitar, mas aquela com a qual trabalho é o utilitário TwoFox de Christof Wollenhaupt - ele converte um projeto VFP em somente texto.Você tem que executá-lo manualmente, mas não tenho problemas com isso.

http://www.foxpert.com/docs/cvs.en.htm

Não, você com certeza não pode.SVN diferencia maiúsculas de minúsculas, a menos que você reescreva o código de alguma forma ...isto é Código aberto.

Tivemos um problema semelhante e eu encontrei uma solução melhor do que os expostos aqui, então estou compartilhando agora:

  • Para commits feitos manualmente, agora o TortoiseSVN corrige o caso dos nomes dos arquivos automaticamente:ele renomeia os arquivos locais para corresponder ao caso dos arquivos versionados (apenas abrindo a janela de commit nesse caminho), então deve haver sem problemas com isso.

  • Para confirmações automatizadas você não pode usar o TortoiseSVN, pois requer que você confirme manualmente o commit (ele abre a janela de commit com uma mensagem específica, mas você ainda precisa clicar em ok).Mas se você usar diretamente o Subversion (svn) para fazer um commit automatizado, então você terá o problema de distinção entre maiúsculas e minúsculas nesse commit, já que o Subversion ainda diferencia maiúsculas de minúsculas...

Como resolver isso para commits automatizados?Bem, tentei uma abordagem mista:criando um arquivo em lote chamado FixCaseSensitiveFileNames.bat que você pode chamar passando o caminho que deseja corrigir antes do commit, por exemplo: call FixCaseSensitiveFileNames.bat C:\MyRepo.O arquivo em lote abre o TortoiseSVN para um commit manual, e isso corrige automaticamente os nomes dos arquivos, mas depois fecha a janela de commit após uma pausa predefinida, para que você possa continuar com o commit automatizado com os nomes dos arquivos com distinção entre maiúsculas e minúsculas já corrigidos.A pausa é emulada com um ping local e você pode alterar a duração alterando o -n argumento, que é o número de tentativas.Se você não fizer uma pausa longa o suficiente, existe o risco de fechar a janela do TortoiseSVN antes que ela faça sua correção mágica.Aqui está o código do arquivo em lote:

@echo off
REM *** This BAT uses TortoiseSVN to fix the case-sensitive names of the files in Subversion
REM *** Call it before an automated commit. The Tortoise commit fixes this issue for manual commits,
REM *** so the trick is opening the commit window and close it automatically after a pause (with ping).
REM *** %1 = path to be fixed

start TortoiseProc.exe /command:commit /path:"%1"
ping localhost -n 10 >nul
taskkill /im TortoiseProc.exe

Isso resolveu totalmente o problema do nosso processo de construção diário automatizado.O único problema que vejo é que uma janela será aberta por alguns segundos, o que não foi um problema para nossa compilação diária, mas se isso for um problema para você, também pode haver soluções alternativas...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top