gitattributes игнорируется при оформлении заказа - PullRequest
0 голосов
/ 08 января 2019

Мы недавно перешли с svn на git в моей компании, поэтому общее ноу-хау все еще довольно низкое.

Мы решили установить core.autocrlf = true на каждой машине и использовать файлы ".gitattributes" для "точной настройки".

My Main Focus - это проект интеграции с apache-camel для преобразования файлов из "a" в "b". Поскольку многие конечные точки различны, мне нужно обеспечить кодирование, окончания строк и т. Д. В моих тестах с верблюдом apache я беру статический файл из моих ресурсов тестирования, преобразую его и сравниваю выходные данные с другим статическим файлом (в основном ожидаемый результат) в моих тестовых ресурсах.

Раньше это работало идеально, пока мы не ввели "core.autocrlf = true". С тех пор, похоже, тесты на jenkins успешно завершаются, но когда я запускаю их локально, многие из них терпят неудачу. (Я недавно клонировал репозиторий после введения "core.autocrlf = true"). Я искал 1 из ожидаемых выходных файлов. Если я проверяю окончание строки на моей машине (победа 10), они "crlf". Если я проверяю окончания строк в файле из репозитория, то они "lf". Это преобразование следовало ожидать с core.autocrlf = true.

Однако я попытался добавить файл ".gitattributes". С этими двумя спецификациями:

* text=auto
*.xml binary

Я просто использовал "* .xml", чтобы облегчить тестирование, если оно работает. По сути, мне нужно, чтобы все мои файлы в тестовых ресурсах игнорировались. Но с указанным выше файлом «.gitattributes» я все равно получаю тестовый файл с crlf на моей машине, даже если я недавно клонировал весь репозиторий и выполняю «git checkout branchname». Это то же самое поведение, если я делаю

*.xml text eol=lf 

или

*.xml -text" etc.

Из того, что я прочитал до сих пор, я понял, что, если я указываю путь или тип файла в качестве "двоичного", git вообще не должен делать никакого преобразования, если я делаю git checkout, git commit или git, что угодно.

Я что-то не так понял, или я просто что-то делаю не так, или мерзавец не работает как надо?

1 Ответ

0 голосов
/ 11 января 2019

Мне удалось решить эту проблему, но мне, вероятно, нужно сначала записать, как настроены и как я сделал это изначально.

Таким образом, у нас есть основная ветвь по умолчанию (в основном ветвь, которая содержит «живой код» или код, который скоро будет доступен) и ветвь разработки. Мы создаем ветки функций и исправлений из разработки и объединяем их, когда ошибка исправлена ​​или функция завершена.

Итак, что я сделал вначале: в bitbucket я создал ветку из Develop (давайте просто назовем ее BranchX). Локально я открыл консоль git-bash:

git pull
git checkout branchX

Затем я создал файл gitattributes со спецификациями в моем первом посте. После этого я зафиксировал и подтолкнул к удаленному репо. Я полностью удалил локальное репо и сделал:

git clone remoteRepoUrl
cd repoName
git checkout branchX

После этого файлы по-прежнему отображаются как crlf вместо lf.

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

git clone --branch branchX remoteRepoUrl

Это клонирует репо, но напрямую проверяет нужную ветку. Кажется, что мои спецификации gitattributes работают.

Однако странно, если я это сделаю

git checkout master

теперь я все еще получаю lf lineendings, что нормально, но на самом деле не должно быть, так как главная ветвь не имеет файла .gitattributes и поэтому должна просто использовать конфигурацию autocrlf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...