Системы контроля версий и кодировка имен файлов (У какой VCS нет такой проблемы?)
Модератор: Модераторы разделов
Системы контроля версий и кодировка имен файлов
Привет.
Есть проект, для которого используется git. Проект пишется и под Win, и под Linux. В проекте есть файлы с русскими именами (переименовывать их нельзя). Столкнулся с очень неприятной вещью, которую в git, если и можно обойти, то только через одно место.
Суть:
1. Под Windows добавляем в репозиторий файл, в имени которого есть русские буквы.
2. Пытаемся клонировать репозиторий под Linux на раздел с ФС ext3/4. В именах файлов русские буквы становятся вопросиками.
3. Пытаемся клонировать репозиторий под Linux на раздел с NTFS. Git вообще отказывается создавать файлы с русскими буквами.
После поиска в гугле самое разумное, что нашлось - это повесить хук на post-commit, но этот вариант не нравится, потому что, если поменять кодировку имени файла с помощью convmv, то для git'а эти файлы изменяются.
Вопрос в том, есть ли VCS, в котором этой проблемы нет или она легко обходится? Хотелось бы, чтобы имена файлов, что в Linux, что в Windows из репозитория получались одинаковые (разумеется, в своей кодировке для каждой ОС).
VCS желательно распределенную, но если окажется, что у SVN такой проблемы нет, то она тоже сойдет.
Есть проект, для которого используется git. Проект пишется и под Win, и под Linux. В проекте есть файлы с русскими именами (переименовывать их нельзя). Столкнулся с очень неприятной вещью, которую в git, если и можно обойти, то только через одно место.
Суть:
1. Под Windows добавляем в репозиторий файл, в имени которого есть русские буквы.
2. Пытаемся клонировать репозиторий под Linux на раздел с ФС ext3/4. В именах файлов русские буквы становятся вопросиками.
3. Пытаемся клонировать репозиторий под Linux на раздел с NTFS. Git вообще отказывается создавать файлы с русскими буквами.
После поиска в гугле самое разумное, что нашлось - это повесить хук на post-commit, но этот вариант не нравится, потому что, если поменять кодировку имени файла с помощью convmv, то для git'а эти файлы изменяются.
Вопрос в том, есть ли VCS, в котором этой проблемы нет или она легко обходится? Хотелось бы, чтобы имена файлов, что в Linux, что в Windows из репозитория получались одинаковые (разумеется, в своей кодировке для каждой ОС).
VCS желательно распределенную, но если окажется, что у SVN такой проблемы нет, то она тоже сойдет.
Re: Системы контроля версий и кодировка имен файлов
если судить по концовке этого багрепорта: http://code.google.com/p/msysgit/issues/detail?id=80
то проблему windows+utf8 решили.
то проблему windows+utf8 решили.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: Системы контроля версий и кодировка имен файлов
sash-kan писал(а): ↑23.08.2010 02:27если судить по концовке этого багрепорта: http://code.google.com/p/msysgit/issues/detail?id=80
то проблему windows+utf8 решили.
Интересно, попробую обновить git (если еще не обновлял). Обратную ситуацию, когда файл создается в Линуксе, а читается в Винде я еще не пробовал.
Re: Системы контроля версий и кодировка имен файлов
Поставил последний 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)
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)
Re: Системы контроля версий и кодировка имен файлов
Возможно, я что-то не совсем понимаю (очень давно с ntfs дела не имел), но мне казалось что в Linux все вопросы с кодировками решаются на уровне монтирования, и если локаль utf-8 и смонтирован раздел с поддержкой utf-8, то выше уже проблем быть не должно по определению.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Re: Системы контроля версий и кодировка имен файлов
проблема в том, что git сохраняет (в том числе и) имена файлов as is, как их ему предоставило соответствующее api операционной системы.t.t писал(а): ↑23.08.2010 12:07Возможно, я что-то не совсем понимаю (очень давно с ntfs дела не имел), но мне казалось что в Linux все вопросы с кодировками решаются на уровне монтирования, и если локаль utf-8 и смонтирован раздел с поддержкой utf-8, то выше уже проблем быть не должно по определению.
соответственно, если имена файлов выходят за пределы ascii, будет несостыковка при взаимодействии. как в ту, так и в другую сторону.
там был в истории упомянутый коммит?
upd. в принципе, можно попробовать сэмулировать поведение windows, сгенерировав локаль, соответствующую той, в которой windows хранит имена файлов на ntfs. и запустить git с этой локалью. возможно, что-то получится.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: Системы контроля версий и кодировка имен файлов
Я это писал применительно к приведенной автором топика попытке склонировать хранилище на ntfs-раздел в Linux-е. Т.е. речь о том, что, видимо, имена сохранены как-то не так уже в самом хранилище.sash-kan писал(а): ↑23.08.2010 13:28проблема в том, что git сохраняет (в том числе и) имена файлов as is, как их ему предоставило соответствующее api операционной системы.t.t писал(а): ↑23.08.2010 12:07Возможно, я что-то не совсем понимаю (очень давно с ntfs дела не имел), но мне казалось что в Linux все вопросы с кодировками решаются на уровне монтирования, и если локаль utf-8 и смонтирован раздел с поддержкой utf-8, то выше уже проблем быть не должно по определению.
соответственно, если имена файлов выходят за пределы ascii, будет несостыковка при взаимодействии. как в ту, так и в другую сторону.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Re: Системы контроля версий и кодировка имен файлов
в mercurial тоже есть такие траблы... :-(
[x] close
Re: Системы контроля версий и кодировка имен файлов
они сохранены «так».
я ж об этом и пишу: они сохранены ровно в том виде, как их предоставляет api операционной системы.
в windows оно предоставляет их отнюдь не в utf-8. (в приведённом баг-репорте упоминается utf-16, но память мне настойчиво подсказывает, что всё-таки в ucs-2. но спорить не буду).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: Системы контроля версий и кодировка имен файлов
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, а наружу он бы выдавал имена в кодировке, зависящей от системы.
А вот, кстати, не посмотрел.
Пробовал, не помогало, но это было на скорую руку, надо будет попробовать повторить более вдумчиво. И уже не помню в какой ФС это пробовал.
Re: Системы контроля версий и кодировка имен файлов
естественно, на какой-нибудь нативной надо пробовать. в которой не будет дополнительных конвертаций (типа fat или ntfs).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Системы контроля версий и кодировка имен файлов
у меня была такая проблема (только в другой задаче), написал скрипт-костыль. Основная идея заключается в том, что-бы сделать хардлинки на все файлы, в другом каталоге, переименовав файлы в CP1251. Думаю git такое поймёт (если ему задать LANG=CP1251), единственная проблема - это если в проекте структура каталогов, причём каталоги названы по-русски.
Re: Системы контроля версий и кодировка имен файлов
drBatty писал(а): ↑24.08.2010 00:36у меня была такая проблема (только в другой задаче), написал скрипт-костыль. Основная идея заключается в том, что-бы сделать хардлинки на все файлы, в другом каталоге, переименовав файлы в CP1251. Думаю git такое поймёт (если ему задать LANG=CP1251), единственная проблема - это если в проекте структура каталогов, причём каталоги названы по-русски.
Хм, интересная идея, любопытно как git воспримет хардлинки. Главное, чтобы он их не считал новыми файлами и не пытался добавить в репозиторий отдельно.
Но на самом деле у меня еще и папки с русскими буквами.
Re: Системы контроля версий и кодировка имен файлов
hardlink — это и есть ссылка на содержимое файла. обычно у файла всего один hardlink. но меньше одного быть не может.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: Системы контроля версий и кодировка имен файлов
Похоже, ситуация оказалась проще, чем я думал.
Изменение локали и клонирование репозитория на NTFS ничего не дало, файлы так и не смогли там создаться, на ext3/4 gnome-console русские буквы в виндовой кодировке тоже отказался писать. Но зато konsole после переключения локали имена этих файлов без проблем показывает и работает с ними. Гугл говорит, что это не то недоделка, не то глюк gnome-console.
Изменение локали и клонирование репозитория на NTFS ничего не дало, файлы так и не смогли там создаться, на ext3/4 gnome-console русские буквы в виндовой кодировке тоже отказался писать. Но зато konsole после переключения локали имена этих файлов без проблем показывает и работает с ними. Гугл говорит, что это не то недоделка, не то глюк gnome-console.
Re: Системы контроля версий и кодировка имен файлов
гм...
у меня нет проблем с кодировками....
под SVN-сервер пользую свою домашнюю SuSe 10.2, локаль UTF8.
пакет USVN ставил кажется из бинарников,
под линукосом стандартный(?) SVN, под виндой - TortoiseSVN,
Каталогов русских у меня нет, но русские буквы в именах файлов проблем не вызывают.
у меня нет проблем с кодировками....
под SVN-сервер пользую свою домашнюю SuSe 10.2, локаль UTF8.
пакет USVN ставил кажется из бинарников,
под линукосом стандартный(?) SVN, под виндой - TortoiseSVN,
Каталогов русских у меня нет, но русские буквы в именах файлов проблем не вызывают.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Системы контроля версий и кодировка имен файлов
git (как и любое по) воспринимает хардлинки как 2 разных файла, у которых содержимое одинаковое. На самом деле, это оди файл с несколькими именами. Обычный файл тоже хардлинк (это файл с одним именем. ничто не запрещает ему иметь ещё имена)
да. его система убъёт.
да... есть там такое :(
Re: Системы контроля версий и кодировка имен файлов
если быть совсем точным, то второй (третий и т.д.) hardlink — это просто второе (и т.д.) имя файла. только имя.
все атрибуты файла (принадлежность, права доступа, время создания/изменения/доступа) хранятся в inode, соответственно, у всех hardlink-ов они будут идентичны.
вот не знаю насчёт acl и selinux-контекста (негде проверить сходу, а городить огород — лень). по-моему, они тоже закрепляются за inode-ом, следовательно, одни для всех hardlink-ов.
все атрибуты файла (принадлежность, права доступа, время создания/изменения/доступа) хранятся в inode, соответственно, у всех hardlink-ов они будут идентичны.
вот не знаю насчёт acl и selinux-контекста (негде проверить сходу, а городить огород — лень). по-моему, они тоже закрепляются за inode-ом, следовательно, одни для всех hardlink-ов.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Системы контроля версий и кодировка имен файлов
если быть совсем уж точным, то первый - тоже всего-лишь имя. хардлинки равноценны, в том смысле, что среди них нет первого и второго, ведомого и ведущего.
sash-kan писал(а): ↑25.08.2010 12:09все атрибуты файла (принадлежность, права доступа, время создания/изменения/доступа) хранятся в inode, соответственно, у всех hardlink-ов они будут идентичны.
вот не знаю насчёт acl и selinux-контекста (негде проверить сходу, а городить огород — лень). по-моему, они тоже закрепляются за inode-ом, следовательно, одни для всех hardlink-ов.
понятно что одни - ведь имя файла хранится в каталогах, потому вполне могут быть(и бывают!) файлы вообще без имён, и тем не менее, у них есть все атрибуты и свойства. Имя файла - это всего лишь ручка чемодана - чемодан может быть и без ручек вообще, или иметь их любое количество. Конечно файл/чемодан без имён/ручек дефектный, и требует ремонта. Программа лечения ФС отправляет такие файлы в /lost+found, и придумывает им новые имена.
- Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
- Контактная информация:
Re: Системы контроля версий и кодировка имен файлов
Необязательно, если быть точным :) Например, безымянные пайпы - это тоже файлы :)
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Re: Системы контроля версий и кодировка имен файлов
Оказывается, в Bazaar нет таких проблем с русскими именами файлов. Делаю из Винды коммит файла "бла-бла-бла.txt" и с таким же именем получаю файл из Linux'а на файловой системе ext3/4. В смысле, имя файла получаю в кодировке, которая установлена в текущей ОС.
-
- Сообщения: 41
- ОС: Linux
Re: Системы контроля версий и кодировка имен файлов
А как вообще в таком случае поменять кодировку через convmv? у меня похожая проблема - сделал git clone одного репозитория (который заполнялся под вендой) и вопросики в именах файлах.
Венды под рукой нет =) мне этот репозиторий просто скачать надо, а не менять в нём что-то.
Пишу convmv -t utf8 -f cp1251 -r .
он мне в ответ пишет для каждого файла (с вопросиками), что кодировка УЖЕ utf8, и переводить отказывается...
Re: Системы контроля версий и кодировка имен файлов
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог