1 (изменено: Freeman, 28.05.2023 в 09:03)

Тема: Переход на Git (2020-2021)

Для хранения исходного кода в «Канторовых системах» настоящий момент используется система контроля версий Subversion (SVN). Среди современных разработчиков она считается устаревшей, и в некоторых популярных открытых проектах продолжает использоваться по историческим причинам. Та же причина использования SVN и в «Канторовых системах». Когда в 2007 году начиналась разработка, Git не был популярен, еще не было GitHub. SVN же был хорошо освоен и оказался весьма пригоден для отслеживания версий кода. Подкупала и его легкость.

Выбор системы версионирования не является предметом религиозного спора в «Канторовых системах». Пару лет назад уже изучался вопрос использования распределенных систем Mercurial и Fossil, некоторое внимание привлекала малопопулярная система Pijul. Возможный переход планировался, под него даже была перестроена историческая часть дерева исходников на соответствующую классической для SVN branches/tags/trunk.

Ситуация 2020 года похожа на 2007-й, но для Git. Он хорошо освоен, используется в каждодневной разработке на работе. Самое важное — найден адекватный графический интерфейс Git под Windows, соответствующий предъявляемым требованиям. Он также используется в каждодневной работе. Лицензия позволяет использовать его в частных проектах с некоторыми ограничениями, некритичными для «Канторовых систем». В связи с этим рассматривается переход на Git, импорт существующих исходников из SVN, использование GitHub в качестве публичного хранилища кода.

Преимущества Git для «Канторовых систем» следующие:

  • Возможность дополнять коммиты

  • Возможность переставлять коммиты, менять их порядок

  • Быстрая работа (в сравнении с Mercurial)

  • Популярность среди разработчиков

Пока разработка ведется одним человеком, распределенные возможности Git фактически не востребованы. Останутся заделом на будущее.

Раньше препятствиями использования Git были: большой размер дистрибутива в сравнении с SVN, наличие встроенного Perl, необходимость использования собственного Git-терминала и отсутствие адекватной графической оболочки, удобной настолько же, как RapidSVN для SVN. Сейчас все препятствия преодолены. Дистрибутив Git для Windows относительно изучен. Теперь он не содержит встроенного Perl, давая возможность установить собственный, используемый вне Git. Perl используется для сборки некоторых открытых библиотек из исходников, для чего должен стоять в системе разработчика. На работе используется StrawberryPerl. Найдена также возможность вызывать Git везде, в том числе напрямую из Far.

Наконец, использование GitHub, возможно, придаст больше социальности «Канторовым системам» в среде разработчиков. Хочется надеяться, но веры нет.

Тема открыта для обсуждения, можно высказывать свои аргументы.

Re: Переход на Git (2020-2021)

Полностью поддерживаю переход на Git.

Про препятствия:

  • Большой размер дистрибутива, наличие встроенного Perl — никогда на это не обращал внимания. Изначально Git разрабатывался для Linux, поэтому ранние дистрибутивы для Windows тащили весь MSys. Сейчас вроде не весь, лишнее выкинули.

  • Собственный Git-терминал — Git использую с 2015 года, ни разу специальным терминалом не воспользовался. Набирал команды внутри Far Maganer’а, всё работало нормально.

  • Графическая оболочка — никогда не пользовался графическими оболочками ни для SVN, ни для Git. Для Git я пользуюсь встроенным вьюером gitk, в котором можно удобно смотреть коммиты.

Пара полезных настроек по моему опыту:

git config --global gui.encoding utf-8
git config --global core.editir "far -e"

Первая опция нужна для нормального отображения коммитов в gitk, вторая устанавливает редактор по умолчанию (сообщения коммитов, сценарий git rebase -i) на встроенный редактор Far’а.

Сайт GitHub по умолчанию считает, что исходники и сообщения коммитов записаны в UTF-8. Если это не так, например, комментарии записаны в какой-то другой кодировке, они отображаются «вопросиками». Поэтому при импорте исходники нужно (или очень желательно) сконвертировать в UTF-8.

Скрипт, который переписывает всю историю Git, меняя кодировку всех текстовых файлов на UTF-8, у меня есть. Есть также настройки, позволяющие вести локально разработку в CP1251, но при коммитах конвертировать в UTF-8. Если надо — пишите.

Добавлено 03.05.2020 в 11:41

Добавлю. Раздел issues репозиториев я использую как площадку для размышлений, т.е. примерно с той же целью, с какой Вы используете форум.

3

Re: Переход на Git (2020-2021)

Маздайщик пишет:

Есть также настройки, позволяющие вести локально разработку в CP1251, но при коммитах конвертировать в UTF-8. Если надо — пишите.

Было бы очень полезно. Нет уверенности, что перейду на более современную версию Delphi. Delphi 6 не поддерживает UTF-8 для исходников.

Re: Переход на Git (2020-2021)

Freeman, напишите тогда на почту. Когда увижу письмо — пришлю материалы.

5

Re: Переход на Git (2020-2021)

А форум на что? Мне кажется, что это даже неуважительно...

Саму настройку, похоже, нашел:

*.pas working-tree-encoding=windows-1252 git-encoding=utf-8

Исходники Кантора хранятся в западноевропейской кодировке.

Re: Переход на Git (2020-2021)

Freeman пишет:

А форум на что? Мне кажется, что это даже неуважительно...

Дело в том, что про форум я забуду, а про письмо в папке «Входящие» — нет.

Freeman пишет:

Саму настройку, похоже, нашел:

*.pas working-tree-encoding=windows-1252 git-encoding=utf-8

Век живи, век учись. Я велосипедил с фильтрами clean и smudge.

Freeman пишет:

Исходники Кантора хранятся в западноевропейской кодировке.

Моя утилита для перекодирования истории умеет работать только с кириллическими кодировками (1251 и 866), для них и писалась.

А часто ли в содержимом репозитория (исходники, доки и т.д.) используются знаки с кодами 128–255? Если не используются (т.е. 7-битная ASCII), то никаких проблем нет.

7

Re: Переход на Git (2020-2021)

Маздайщик пишет:
Freeman пишет:

Саму настройку, похоже, нашел:

*.pas working-tree-encoding=windows-1252 git-encoding=utf-8

Век живи, век учись. Я велосипедил с фильтрами clean и smudge.

Это современная настройка. В интернетах пишут, появилась в 2018 году.

Маздайщик пишет:

А часто ли в содержимом репозитория (исходники, доки и т.д.) используются знаки с кодами 128–255? Если не используются (т.е. 7-битная ASCII), то никаких проблем нет.

Хороший вопрос человеку, который вручную написал поддержку кодировок в CoreLite. Предлагаю посмотреть исходник CoreConsts.pas. Там даже комментарий по этому поводу есть.

Re: Переход на Git (2020-2021)

Freeman пишет:
Маздайщик пишет:

Век живи, век учись. Я велосипедил с фильтрами clean и smudge.

Это современная настройка. В интернетах пишут, появилась в 2018 году.

Я велосипедил в 2019 году

Добавлено 05.05.2020 в 18:40

Маздайщик пишет:

Я велосипедил в 2019 году

После этих слов был юникодовский плачущий смайлик, по которому срезался ответ. Поэтому заново его перепечатываю.

Я велосипедил в 2019 году :'(. Я помнил тогда, что есть какие-то инструменты в Git, которые позволяют перекодировать файлы при коммите и чекауте и наоборот, они использовались, например, для перекодировки между отступами пробелами и табуляциями. Нашёл (это оказались фильтры clean и smudge), повесил на них вызов iconv. Если бы я поступил как чайник — вместо велосипедостроения поискал бы тему конкретно про Git и кодировки, то было бы не так обидно.

Кстати, iconv устанавливается на Windows вместе с Git, но в общий PATH не добавляется. Однако, его (и многие другие утилиты MSys) можно использовать и в фильтрах, и в командах вроде git filter-branch.

Freeman пишет:
Маздайщик пишет:

А часто ли в содержимом репозитория (исходники, доки и т.д.) используются знаки с кодами 128–255? Если не используются (т.е. 7-битная ASCII), то никаких проблем нет.

Хороший вопрос человеку, который вручную написал поддержку кодировок в CoreLite. Предлагаю посмотреть исходник CoreConsts.pas. Там даже комментарий по этому поводу есть.

Если перекодируемый файл только один и находится по фиксированному пути во всех коммитах, то кодировка в репозитории исправляется простой командой git filter-branch. Я когда-то велосипедил, писал программу на C++, которая перебирает все файлы в папке, ищет в них текстовые в кодировках 1251, 866 или UTF-16 и перекодирует их в UTF-8.

9

Re: Переход на Git (2020-2021)

Переход оказался не так прост, как хотелось бы. Git фактически не умеет работать с ветками и тегами SVN, а тупо сливает всё в master. Придется искать обходные пути, если они существуют.

Re: Переход на Git (2020-2021)

Нормально он всё конвертирует. Ветки SVN при правильном использовании превращаются в ветки Git, теги SVN — в ветки Git, которые начинаются на tags/.

Рекомендую почитать про миграцию в старой книге про Git:

https://git-scm.com/book/ru/v1_/Git-и-д … Subversion
https://git-scm.com/book/ru/v1_/Git-и-д … ция-на-Git

В новой книге там сложнее и непонятнее.