GitLab кодировка windows-1251
Если ваши проекты содержат файлы с кодировкой win-1251, вы столкнетесь с тем, что gitlab не корректно обрабатывает кириллицу в данных файлах (например комментарии). Проблема в ruby gem charlock_holmes, который не может распознать не UTF-8 кодировку. Решение проблемы указать gitlab’у: если кодировка не utf-8, то она windows-1251. Но, с этого момента в репозитории можно загружать только файлы с этими двумя кодировками: другие кодировки будут определятся как windows-1251 и соответсвующим образом обрабатываться. Данная проблема тянется уже давно, решение есть у xRayDev в репозитории на github. Данное решение так же описано в блоге JackyFox. Я покажу как я это решение применил на версии gitlab-ce 9.0.5 (Community Edition).Править нужно 2 файла, пути отличаются от указанных на github и других статьях. Если и мой вариант не подошел, значит ищите их по содержимому файлов — с обновлениями, они могут переместиться в другие каталоги.
Файл первый:
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/git/encoding_helper.rb
Было:
# force detected encoding if we have sufficient confidence. if detect && detect[:encoding] && detect[:confidence] > ENCODING_CONFIDENCE_THRESHOLD message.force_encoding(detect[:encoding]) end
Стало:
# force detected encoding if we have sufficient confidence. if detect && detect[:encoding] message.force_encoding("windows-1251") message.encode("utf-8", "windows-1251", undef: :replace, replace: "", invalid: :replace) end
Файл второй:
/opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/gitlab-grit-2.8.1/lib/grit_ext.rb
Было:
# encoding message to detect encoding if detect && detect[:encoding] message.force_encoding(detect[:encoding]) end
Стало:
# encoding message to detect encoding if detect && detect[:encoding] message.force_encoding("windows-1251") message.encode("utf-8", "windows-1251", undef: :replace, replace: "", invalid: :replace) end
xRay
25.07.2017Уже два года держу тут репу https://github.com/xRayDev/gitlab_windows1251
и в ней держу описание фикса. Не всегда успеваю обновлять пути до файликов, но суть не меняется.
Но разработчики таки надумали реализовать эту опцию. Подробности тут https://gitlab.com/gitlab-org/gitlab-ce/issues/14048#note_35540346