Системы контроля версий и кодировка имен файлов (У какой VCS нет такой проблемы?)

IDE, VCS и прочее

Модератор: Модераторы разделов

Ответить
Jenyay
Сообщения: 18
ОС: WinXP / Ubuntu 11.10
Контактная информация:

Системы контроля версий и кодировка имен файлов

Сообщение Jenyay »

Привет.

Есть проект, для которого используется git. Проект пишется и под Win, и под Linux. В проекте есть файлы с русскими именами (переименовывать их нельзя). Столкнулся с очень неприятной вещью, которую в git, если и можно обойти, то только через одно место.

Суть:

1. Под Windows добавляем в репозиторий файл, в имени которого есть русские буквы.
2. Пытаемся клонировать репозиторий под Linux на раздел с ФС ext3/4. В именах файлов русские буквы становятся вопросиками.
3. Пытаемся клонировать репозиторий под Linux на раздел с NTFS. Git вообще отказывается создавать файлы с русскими буквами.

После поиска в гугле самое разумное, что нашлось - это повесить хук на post-commit, но этот вариант не нравится, потому что, если поменять кодировку имени файла с помощью convmv, то для git'а эти файлы изменяются.

Вопрос в том, есть ли VCS, в котором этой проблемы нет или она легко обходится? Хотелось бы, чтобы имена файлов, что в Linux, что в Windows из репозитория получались одинаковые (разумеется, в своей кодировке для каждой ОС).

VCS желательно распределенную, но если окажется, что у SVN такой проблемы нет, то она тоже сойдет.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение sash-kan »

если судить по концовке этого багрепорта: http://code.google.com/p/msysgit/issues/detail?id=80
то проблему windows+utf8 решили.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Jenyay
Сообщения: 18
ОС: WinXP / Ubuntu 11.10
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение Jenyay »

sash-kan писал(а):
23.08.2010 02:27
если судить по концовке этого багрепорта: http://code.google.com/p/msysgit/issues/detail?id=80
то проблему windows+utf8 решили.


Интересно, попробую обновить git (если еще не обновлял). Обратную ситуацию, когда файл создается в Линуксе, а читается в Винде я еще не пробовал.
Спасибо сказали:
Jenyay
Сообщения: 18
ОС: WinXP / Ubuntu 11.10
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение Jenyay »

Поставил последний git из исходников. Не помогло. Вот как выглядит клонирование под линуксом на ntfs-ом разделе:

jenyay@jenyay-ubuntu-10:/media/System/temp/4$ git clone /media/HANDY160/Git/test
Cloning into test...
done.
error: git checkout-index: unable to create file ��������.txt (Invalid or incomplete multibyte or wide character)

Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Системы контроля версий и кодировка имен файлов

Сообщение t.t »

Возможно, я что-то не совсем понимаю (очень давно с ntfs дела не имел), но мне казалось что в Linux все вопросы с кодировками решаются на уровне монтирования, и если локаль utf-8 и смонтирован раздел с поддержкой utf-8, то выше уже проблем быть не должно по определению.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение sash-kan »

t.t писал(а):
23.08.2010 12:07
Возможно, я что-то не совсем понимаю (очень давно с ntfs дела не имел), но мне казалось что в Linux все вопросы с кодировками решаются на уровне монтирования, и если локаль utf-8 и смонтирован раздел с поддержкой utf-8, то выше уже проблем быть не должно по определению.
проблема в том, что git сохраняет (в том числе и) имена файлов as is, как их ему предоставило соответствующее api операционной системы.
соответственно, если имена файлов выходят за пределы ascii, будет несостыковка при взаимодействии. как в ту, так и в другую сторону.


Jenyay писал(а):
23.08.2010 10:55
Поставил последний git из исходников
там был в истории упомянутый коммит?


upd. в принципе, можно попробовать сэмулировать поведение windows, сгенерировав локаль, соответствующую той, в которой windows хранит имена файлов на ntfs. и запустить git с этой локалью. возможно, что-то получится.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Системы контроля версий и кодировка имен файлов

Сообщение t.t »

sash-kan писал(а):
23.08.2010 13:28
t.t писал(а):
23.08.2010 12:07
Возможно, я что-то не совсем понимаю (очень давно с ntfs дела не имел), но мне казалось что в Linux все вопросы с кодировками решаются на уровне монтирования, и если локаль utf-8 и смонтирован раздел с поддержкой utf-8, то выше уже проблем быть не должно по определению.
проблема в том, что git сохраняет (в том числе и) имена файлов as is, как их ему предоставило соответствующее api операционной системы.
соответственно, если имена файлов выходят за пределы ascii, будет несостыковка при взаимодействии. как в ту, так и в другую сторону.
Я это писал применительно к приведенной автором топика попытке склонировать хранилище на ntfs-раздел в Linux-е. Т.е. речь о том, что, видимо, имена сохранены как-то не так уже в самом хранилище.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Системы контроля версий и кодировка имен файлов

Сообщение deadhead »

в mercurial тоже есть такие траблы... :-(
[x] close
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение sash-kan »

t.t писал(а):
23.08.2010 13:55
имена сохранены как-то не так уже в самом хранилище
они сохранены «так».
я ж об этом и пишу: они сохранены ровно в том виде, как их предоставляет api операционной системы.
в windows оно предоставляет их отнюдь не в utf-8. (в приведённом баг-репорте упоминается utf-16, но память мне настойчиво подсказывает, что всё-таки в ucs-2. но спорить не буду).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Jenyay
Сообщения: 18
ОС: WinXP / Ubuntu 11.10
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение Jenyay »

t.t писал(а):
23.08.2010 12:07
Возможно, я что-то не совсем понимаю (очень давно с ntfs дела не имел), но мне казалось что в Linux все вопросы с кодировками решаются на уровне монтирования, и если локаль utf-8 и смонтирован раздел с поддержкой utf-8, то выше уже проблем быть не должно по определению.


С обычными файлами проблем нет. Тут как-то странно git себя ведет.

sash-kan писал(а):
23.08.2010 13:28
проблема в том, что git сохраняет (в том числе и) имена файлов as is, как их ему предоставило соответствующее api операционной системы.
соответственно, если имена файлов выходят за пределы ascii, будет несостыковка при взаимодействии. как в ту, так и в другую сторону.


Да, я вот как раз и хочется найти VCS, который бы "подправлял" имена файлов. Я себе это представляю примерно так, что в репозитории файлы хранятся в каком-нибудь UTF-8/16, а наружу он бы выдавал имена в кодировке, зависящей от системы.

sash-kan писал(а):
23.08.2010 13:28
Jenyay писал(а):
23.08.2010 10:55
Поставил последний git из исходников
там был в истории упомянутый коммит?


А вот, кстати, не посмотрел.

sash-kan писал(а):
23.08.2010 13:28
upd. в принципе, можно попробовать сэмулировать поведение windows, сгенерировав локаль, соответствующую той, в которой windows хранит имена файлов на ntfs. и запустить git с этой локалью. возможно, что-то получится.


Пробовал, не помогало, но это было на скорую руку, надо будет попробовать повторить более вдумчиво. И уже не помню в какой ФС это пробовал.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение sash-kan »

Jenyay писал(а):
23.08.2010 14:58
И уже не помню в какой ФС это пробовал.
естественно, на какой-нибудь нативной надо пробовать. в которой не будет дополнительных конвертаций (типа fat или ntfs).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение drBatty »

у меня была такая проблема (только в другой задаче), написал скрипт-костыль. Основная идея заключается в том, что-бы сделать хардлинки на все файлы, в другом каталоге, переименовав файлы в CP1251. Думаю git такое поймёт (если ему задать LANG=CP1251), единственная проблема - это если в проекте структура каталогов, причём каталоги названы по-русски.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Jenyay
Сообщения: 18
ОС: WinXP / Ubuntu 11.10
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение Jenyay »

drBatty писал(а):
24.08.2010 00:36
у меня была такая проблема (только в другой задаче), написал скрипт-костыль. Основная идея заключается в том, что-бы сделать хардлинки на все файлы, в другом каталоге, переименовав файлы в CP1251. Думаю git такое поймёт (если ему задать LANG=CP1251), единственная проблема - это если в проекте структура каталогов, причём каталоги названы по-русски.


Хм, интересная идея, любопытно как git воспримет хардлинки. Главное, чтобы он их не считал новыми файлами и не пытался добавить в репозиторий отдельно.

Но на самом деле у меня еще и папки с русскими буквами.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение sash-kan »

hardlink — это и есть ссылка на содержимое файла. обычно у файла всего один hardlink. но меньше одного быть не может.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Jenyay
Сообщения: 18
ОС: WinXP / Ubuntu 11.10
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение Jenyay »

Похоже, ситуация оказалась проще, чем я думал.

Изменение локали и клонирование репозитория на NTFS ничего не дало, файлы так и не смогли там создаться, на ext3/4 gnome-console русские буквы в виндовой кодировке тоже отказался писать. Но зато konsole после переключения локали имена этих файлов без проблем показывает и работает с ними. Гугл говорит, что это не то недоделка, не то глюк gnome-console.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Системы контроля версий и кодировка имен файлов

Сообщение Denjs »

гм...

у меня нет проблем с кодировками....
под SVN-сервер пользую свою домашнюю SuSe 10.2, локаль UTF8.
пакет USVN ставил кажется из бинарников,

под линукосом стандартный(?) SVN, под виндой - TortoiseSVN,

Каталогов русских у меня нет, но русские буквы в именах файлов проблем не вызывают.
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение drBatty »

Jenyay писал(а):
24.08.2010 08:31
Хм, интересная идея, любопытно как git воспримет хардлинки. Главное, чтобы он их не считал новыми файлами и не пытался добавить в репозиторий отдельно.

git (как и любое по) воспринимает хардлинки как 2 разных файла, у которых содержимое одинаковое. На самом деле, это оди файл с несколькими именами. Обычный файл тоже хардлинк (это файл с одним именем. ничто не запрещает ему иметь ещё имена)
sash-kan писал(а):
24.08.2010 11:09
но меньше одного быть не может.

да. его система убъёт.
Jenyay писал(а):
24.08.2010 17:03
Гугл говорит, что это не то недоделка, не то глюк gnome-console.

да... есть там такое :(
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение sash-kan »

если быть совсем точным, то второй (третий и т.д.) hardlink — это просто второе (и т.д.) имя файла. только имя.
все атрибуты файла (принадлежность, права доступа, время создания/изменения/доступа) хранятся в inode, соответственно, у всех hardlink-ов они будут идентичны.
вот не знаю насчёт acl и selinux-контекста (негде проверить сходу, а городить огород — лень). по-моему, они тоже закрепляются за inode-ом, следовательно, одни для всех hardlink-ов.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение drBatty »

sash-kan писал(а):
25.08.2010 12:09
если быть совсем точным, то второй (третий и т.д.) hardlink — это просто второе (и т.д.) имя файла. только имя.

если быть совсем уж точным, то первый - тоже всего-лишь имя. хардлинки равноценны, в том смысле, что среди них нет первого и второго, ведомого и ведущего.
sash-kan писал(а):
25.08.2010 12:09
все атрибуты файла (принадлежность, права доступа, время создания/изменения/доступа) хранятся в inode, соответственно, у всех hardlink-ов они будут идентичны.
вот не знаю насчёт acl и selinux-контекста (негде проверить сходу, а городить огород — лень). по-моему, они тоже закрепляются за inode-ом, следовательно, одни для всех hardlink-ов.

понятно что одни - ведь имя файла хранится в каталогах, потому вполне могут быть(и бывают!) файлы вообще без имён, и тем не менее, у них есть все атрибуты и свойства. Имя файла - это всего лишь ручка чемодана - чемодан может быть и без ручек вообще, или иметь их любое количество. Конечно файл/чемодан без имён/ручек дефектный, и требует ремонта. Программа лечения ФС отправляет такие файлы в /lost+found, и придумывает им новые имена.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение Portnov »

drBatty писал(а):
26.08.2010 03:40
файл/чемодан без имён/ручек дефектный

Необязательно, если быть точным :) Например, безымянные пайпы - это тоже файлы :)
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Jenyay
Сообщения: 18
ОС: WinXP / Ubuntu 11.10
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение Jenyay »

Оказывается, в Bazaar нет таких проблем с русскими именами файлов. Делаю из Винды коммит файла "бла-бла-бла.txt" и с таким же именем получаю файл из Linux'а на файловой системе ext3/4. В смысле, имя файла получаю в кодировке, которая установлена в текущей ОС.
Спасибо сказали:
BattleCoder
Сообщения: 41
ОС: Linux

Re: Системы контроля версий и кодировка имен файлов

Сообщение BattleCoder »

Jenyay писал(а):
22.08.2010 23:29
После поиска в гугле самое разумное, что нашлось - это повесить хук на post-commit, но этот вариант не нравится, потому что, если поменять кодировку имени файла с помощью convmv, то для git'а эти файлы изменяются

А как вообще в таком случае поменять кодировку через convmv? у меня похожая проблема - сделал git clone одного репозитория (который заполнялся под вендой) и вопросики в именах файлах.
Венды под рукой нет =) мне этот репозиторий просто скачать надо, а не менять в нём что-то.

Пишу convmv -t utf8 -f cp1251 -r .
он мне в ответ пишет для каждого файла (с вопросиками), что кодировка УЖЕ utf8, и переводить отказывается...
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Системы контроля версий и кодировка имен файлов

Сообщение sash-kan »

BattleCoder
так проверьте:
$ ls | iconv -f cp1251
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Ответить