Могу ли я сделать Subversion + TortoiseSVN нечувствительным к регистру для Windows?

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

  •  08-06-2019
  •  | 
  •  

Вопрос

Я использую Subversion для управления кодом с помощью TortoiseSVN для взаимодействия с сервером в течение последних нескольких месяцев, и в целом все идет отлично!Однако иногда моя FoxPro IDE изменяет регистр расширения файла без предупреждения, где "program.prg программа.prg" становится "программа.PRG") TortoiseSVN, по-видимому, принимает это за то, что первый файл был удален, став помеченным как "отсутствующий", а второе имя отображается как "неверсионное", что наносит ущерб моей способности отслеживать изменения в файле.Я понимаю, что Subversion берет свое начало в мире * nix, чувствительном к регистру, но есть ли какой-либо способ контролировать это поведение либо в Subversion, либо в TortoiseSVN, чтобы имя файла не учитывало регистр при использовании с Windows?

Это было полезно?

Решение

К сожалению, Subversion чувствителен к регистру.Это связано с тем, что файлы из Subversion могут быть извлечены как в файловых системах, чувствительных к регистру (например, *nix), так и в файловых системах без учета регистра (например, Windows, Mac).

Этот скрипт перехвата перед фиксацией это может помочь вам избежать проблем при возврате файлов.Если это не решит вашу проблему, мое лучшее предложение - написать небольшой скрипт, чтобы убедиться, что все расширения указаны в нижнем регистре, и запускать его каждый раз перед регистрацией заезда / выезда.Это будет ЛАВАШ, но, возможно, ваш лучший выбор.

Другие советы

Windows поддерживает чувствительность к регистру, но вы должны отправить ей правильные флаги POSIX в CreateFile из Windows API!Возможно, потребуется изменить раздел реестра (в SFU / Tools для Unix и Ultimate Windows 7 эта запись реестра уже установлена, поэтому Windows поддерживает учет регистра имен файлов).

Windows разработана на основе Unix, но такие вещи, как Explorer.exe и другие программы, предназначены для запрета учета регистра для обеспечения обратной совместимости и безопасности (в основном при работе с dos, выполняющейся notepad.exe противNOTEPAD.EXE , где все заглавные буквы - это вирус или вредоносная программа).

Но Vista + имеет атрибуты безопасности, которые делают это устаревшим.

TortiousSVN просто не поддерживает передачу этого флага posix при создании и переименовании файлов.

Я использую TortoiseSVN с VFP, и он в основном легко обрабатывает переключение регистра.Единственный раз, когда этого не происходит, - это если у меня открыт файл в IDE, когда я пытаюсь выполнить фиксацию:блокировка файла, которую удерживает VFP, сбивает его с толку.В этом заключается ваша проблема, или есть другие проблемы?

В прошлом году я делал презентацию в FoxForward об использовании VFP с Subversion:большая часть презентации была посвящена командной строке, но в конце есть пара слайдов, на которых есть ссылки на инструменты, помогающие вам работать с Subversion в VFP. http://docs.google.com/Presentation?id=dfxkh6x4_3ghnqc4

Я считаю, что случайный верхний и нижний регистр в расширениях вовсе не случайный.Я помню, как тестировал это.Если вы измените программу с помощью менеджера проекта.Допустим, нажав на кнопку изменить.А затем сохраните внесенные изменения, указав расширение в нижнем регистре.Если вы выполните команду изменить из окна командной строки и сохраните изменения, расширение будет указано в верхнем регистре.Очевидно, программисты в Microsoft не беспокоились о том, что вариант расширения будет таким же.

Кит, вы прокомментировали выше, что исходные файлы VFP на основе двоичных файлов сложны для работы в Subversion.В ссылке, которую я дал выше, упоминается пара инструментов, упрощающих работу, но я работаю с утилитой TwoFox Кристофа Волленхаупта - она преобразует проект VFP в текстовый формат.Вы должны запустить его вручную, но у меня с этим нет проблем.

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

Нет, ты точно не можешь.SVN чувствителен к регистру, если только вам не пришлось каким-то образом переписывать код...IT является с открытым исходным кодом.

У нас была похожая проблема, и я нашел лучшее решение чем те, что представлены здесь, поэтому я делюсь ими сейчас:

  • Для коммиты выполняются вручную, теперь TortoiseSVN автоматически исправляет регистр имен файлов:он переименовывает локальные файлы в соответствии с регистром файлов с версиями (просто открыв окно фиксации по этому пути), поэтому должно быть никаких проблем с этим.

  • Для автоматизированные коммиты вы не можете использовать TortoiseSVN, так как это требует от вас ручного подтверждения фиксации (откроется окно фиксации с определенным сообщением, но вам все равно придется нажать ok).Но если вы напрямую используете Subversion (svn) для выполнения автоматической фиксации, то при этой фиксации у вас возникнет проблема с учетом регистра, поскольку Subversion по-прежнему чувствительна к регистру...

Как решить эту проблему для автоматических коммитов?Что ж, я попробовал смешанный подход:создание пакетного файла под названием FixCaseSensitiveFileNames.bat это вы можете вызвать, передавая путь, который вы хотите исправить перед фиксацией, например: call FixCaseSensitiveFileNames.bat C:\MyRepo.Пакетный файл открывает TortoiseSVN для ручной фиксации, и это автоматически исправляет имена файлов, но затем закрывает окно фиксации после заданной паузы, так что вы можете продолжить автоматическую фиксацию с уже исправленными именами файлов с учетом регистра.Пауза эмулируется локальным пингом, и вы можете изменить продолжительность, изменив -n аргумент, который является количеством попыток.Если вы не сделаете достаточно долгую паузу, существует риск закрыть окно TortoiseSVN до того, как оно сделает свое волшебное исправление.Вот оно код пакетного файла:

@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

Это полностью решило проблему с нашим автоматизированным ежедневным процессом сборки.Единственная проблема, которую я вижу, - это окно открывается на несколько секунд, что не было проблемой при нашей ежедневной сборке, но если это проблема для вас, то могут быть и обходные пути...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top