Какие DVCS поддерживают имена файлов Unicode?

Мне интересно попробовать распределенные системы контроля версий. git звучит многообещающе, но я видел где-то примечание для порта git для Windows, в котором говорится: «Не используйте имена файлов, отличные от ASCII». Я не могу найти это сейчас, но есть эта ссылка . На данный момент это отвлекло меня от git, но я не знаю, лучше ли другие варианты.

Поддержка имен файлов, отличных от ASCII, очень важна для моей японской компании. Я ищу тот, который внутренне хранит имена файлов как Unicode, а не платформенно-зависимую кодировку, которая вызовет бесконечное горе. Так:

  1. Какие DVCS поддерживают имена файлов Unicode?
  2. И в Windows, и в Linux?
  3. В идеале, с возможностью переноса репозиториев между машинами Windows и Linux с минимальными проблемами?

person Craig McQueen    schedule 06.05.2009    source источник
comment
Скоро появится поддержка UTF-8 для msysgit. См. stackoverflow.com/a/5855213/6309 и обновленный ответ ниже: stackoverflow.com/a/1274142/6309   -  person VonC    schedule 07.02.2012


Ответы (7)


См. проблему 80 в том же репозитории. В 2009 г. проводилось обсуждение списка рассылки Git (например, 1, 2), где сопровождающий Git Юнио Хамано задал несколько вопросов по этому поводу. У меня его нет прямо здесь. Присоединившись к обсуждению конструктивным образом, вы можете помочь в решении проблемы.

В реализации Java JGit мы всегда используем UTF-8 при создании текстовых метаданных и имен файлов. Это единственный способ, но есть некоторые вещи, которые следует учитывать.

person robinr    schedule 06.05.2009

Bazaar VCS внутренне работает с именами файлов в формате Unicode. И он имеет очень хорошую поддержку юникода как в Linux, так и в Windows.

person bialix    schedule 06.05.2009
comment
На их сайте есть страница о поддержке Unicode в Bazaar: bazaar-vcs.org/UnicodeSupport - person Austin; 07.05.2009
comment
Эта страница больше предназначена для разработчиков, чем для пользовательской документации, и она немного устарела. - person bialix; 07.05.2009
comment
Я провел несколько базовых тестов Bazaar в Windows и подтвердил, что он может добавлять и объединять файлы, даже если у них есть символы имени файла за пределами текущей системной кодовой страницы. Хорошая вещь. Позже я попробую репозиторий на Linux и посмотрю, сможет ли он правильно его разветвить. - person Craig McQueen; 12.05.2009
comment
Я провел несколько дополнительных тестов Bazaar в Windows и обнаружил, что, хотя командная строка работает нормально, графический интерфейс не может зафиксировать изменения в файле с символами имени файла за пределами текущей системной кодовой страницы. - person Craig McQueen; 12.05.2009
comment
Крейг, спасибо за комментарий. На самом деле это проблема всех программ на Python. Я зарегистрировал ошибку, касающуюся символов Юникода вне текущей системной кодовой страницы в командной строке: ошибки. launchpad.net/bzr/+bug/375934. Скоро это будет исправлено. - person bialix; 13.05.2009
comment
Так я узнал о Python и командной строке Windows. См. Мой вопрос по этому поводу: stackoverflow.com/questions/846850/ - person Craig McQueen; 20.05.2009
comment
Спасибо, Крейг. Я уже реализовал подобное решение для bzr. Он будет выпущен как bzr 1.16 или более поздняя версия, IIUC. - person bialix; 20.05.2009

мерзавец

Август 2009 г .:

Проект msysgit занят исправлением поддержки UTF-8 для Git в Windows. Это может быть исправлено в следующем выпуске.


Обновление, февраль 2012 г.

UTF-8 подходит для msysgit, с такие же коммиты, как этот Обновление без настроек 8

На + странице Git для Windows:

Патчи UTF-8 Карстена Близа для Git для Windows теперь объединены с 'devel'.
Это означает, что предстоящий выпуск будет поддерживать имена файлов Unicode!


Обновление апрель 2012 г.

Теперь он выпущен в составе mSysGit 1.7.10.

См. Страницу Git для поддержки Unicode Windows.

person Community    schedule 13.08.2009
comment
Йохан: если они исправят это, вернитесь и обновите свой пост. Я уверен, что кому-то это пригодится. - person quark; 19.08.2009
comment
Пока знаю (9/2010) это не исправлено! - person niels; 14.09.2010
comment
В msysgit 1.7.6 он все еще не исправлен. :( - person Ryan Lundy; 10.08.2011
comment
Я использую Git-1.7.10-preview20120409.exe, и теперь имена файлов Unicode распознаются правильно. - person anno; 14.04.2012

Mercurial

В Linux я думаю, что Mercurial просто кодирует в любой кодировке системы (поправьте меня, если я ошибаюсь). Поэтому лучше всего настроить Linux для UTF-8 для кросс-платформенной совместимости. Это значение по умолчанию для многих современных дистрибутивов.

В Windows Mercurial (из-за обработки строки байтов Python) использует системную кодовую страницу. Это примерно гарантирует плохое межплатформенное взаимодействие для символов, отличных от ASCII.

fixutf8 Extension для Windows (до Mercurial 2.0)

Существует созданное извне расширение Mercurial под названием fixutf8 для Windows, которое правильно обрабатывает все символы Unicode. (даже те, которые находятся за пределами текущей кодовой страницы) и кодирует имена файлов как UTF-8 в репозитории Mercurial. Таким образом, он обеспечивает взаимодействие с Linux, пока Linux использует кодировку UTF-8. На прошлой неделе я попытался включить его в настройках Windows, и при установке возникла пара проблем. С тех пор исправлена ​​одна проблема. Теперь единственная проблема заключается в том, что двоичные дистрибутивы Mercurial построены с использованием Python 2.4, в то время как fixutf8 требует, чтобы Mercurial был собран с Python 2.5 или выше для загрузки fixutf8. Надеюсь, это будет решено в ближайшее время.

Mercurial 2.0 и выше для Windows

fixutf8 кажется несовместимым с Mercurial 2.0 и более поздними версиями, согласно веб-странице fixutf8. См. WindowsUTF8Plan для получения подробной информации о будущих решениях. Я не уверен, когда это будет реализовано.

person Craig McQueen    schedule 09.05.2009
comment
Когда я просмотрел код Mercurial, я не обнаружил поддержки Unicode для имен файлов. - person bialix; 11.05.2009
comment
Я поддерживаю расширение fixutf8 и ежедневно использую его с бинарной сборкой HG. Сообщите об ошибке bitbucket.org/stefanrusek/hg-fixutf8, и я с радостью посмотрю . - person Stefan Rusek; 13.05.2009
comment
Спасибо, Стефан. Я сильно отредактировал этот ответ теперь, когда успешно установил fixutf8 и обнаружил, что он работает хорошо. Меня сдерживает ошибка, которую вы исправили за последние несколько дней. - person Craig McQueen; 13.05.2009
comment
fixutf8 не работает с последними версиями mercurial (например, 2.5) - person Nathan; 22.09.2012
comment
-1 потому что это больше не работает. По состоянию на декабрь 2012 года Mercurial НЕ поддерживает Unicode DVCS, и, вероятно, в ближайшие годы у него будет плохая поддержка, потому что по какой-то странной причине они решили рассматривать имена файлов как двоичные капли, а не в текст (для записи, это потому, что Unix также обрабатывает имена файлов как двоичные капли, а не текст). - person Roman Starkov; 03.12.2012
comment
Спасибо, что дал мне знать. Но, возможно, Mercurial стремится поддерживать его изначально. См. WindowsUTF8Plan. Это похоже на то, как git обрабатывает это (работает в Linux, если файловая система настроена на UTF8; перевод в Windows). - person Craig McQueen; 03.12.2012

Git в Windows 1.7.10 теперь использует UTF-8 для имен файлов независимо от локали пользователя.

person robinr    schedule 27.04.2012

Согласно этой странице: Bazaar, Codendi, CVSNT, Monotone, Perforce, Rational Team Concert, Subversion , Surround SCM, Synergy. Но на этой странице много «неизвестного».

person Benjol    schedule 21.05.2010

Это действительно сложная проблема. Проблемы возникают из-за того, что либо инструменты пытаются интерпретировать имена файлов, когда они точно не знают кодировку, либо потому, что они переводят, но переводят в форму, которая не может обрабатывать все случаи (например, ASCII или UTF-16). Ни одна из трех основных ОС не согласна с тем, как кодируется имя файла, что еще больше усложняет задачу.

Для лучшего понимания проблем я предлагаю прочитать страницу стратегии кодирования Mercurial. В нем описывается, как разные платформы различаются, и почему Mercurial выбрала свою стратегию.

Если вам действительно нужно это сделать, то самое простое - необходимо настроить ВСЕ системы на использование имен файлов UTF-8, а не на одну из многих кодовых страниц на японском языке. Хотя это легче сказать, чем сделать, но как только это будет сделано, ни одной системе не потребуется переводить имена файлов во что-либо еще.

Нет перевода, нет проблем.


*: Да, я знаю, что у вас может быть системная кодировка по умолчанию, но это не то же самое, что и кодировка файловой системы. Что происходит, когда к файловой системе обращаются несколько систем или она физически перемещается между системами?

person Paul S    schedule 20.10.2013