Почему github/gitlab неправильно применяют gitattributes?

Я обнаружил аналогичную проблему: Заставить github использовать двоичный атрибут .gitattributes, если он не предназначен для работы в Github, тогда мой вопрос относится только к Gitlab.


Итак, вопрос: представьте себе создание ветки с одним текстом Dockerfile и последующим .gitattributes:

[core]
    whitespace=trailing-space,space-before-tab
[apply]
    whitespace=fix
* binary
Dockerfile text=auto diff merge

Вы нажимаете этот код, вы можете просмотреть фиксацию в интерфейсе, и она отлично работает. Затем вы решаете, что Dockerfile тоже должно быть двоичным (по какой-то причине), и удаляете последнюю строку. Вы фиксируете его, а затем вносите изменения в Dockerfile, чтобы проверить, работает ли он. Вы вызываете git show, и он показывает, что изменения действительно применены:

pzixe@ZPC MINGW64 ~/Documents/Repos/gitlab-test (all-binary)
$ git show HEAD
commit 141451116e292ae30a515920e6efb906f84b4142 (HEAD -> all-binary, origin/all-binary, github/all-binary)
Author: Psilon <[email protected]>
Date:   Wed Apr 14 19:25:04 2021 +0300

    test changes

diff --git a/Dockerfile b/Dockerfile
index 11f0f66..fef4bc1 100644
Binary files a/Dockerfile and b/Dockerfile differ

Но теперь, если вы проверите интерфейс github, вы увидите, что он на самом деле показывает текстовую разницу вместо двоичной разницы, которая была задана:

введите здесь описание изображения

Затем вы пытаетесь увидеть, работает ли GitLab по-другому, и выясняете, что это не так:

введите здесь описание изображения

Итак, вопрос: есть ли способ заставить это работать? Я ожидаю увидеть текстовую разницу исходного коммита 6c0745e и двоичный свернутый diff последнего коммита 1414511.

Вот репо с воспроизведенным случаем: https://github.com/Pzixel/test-gitlab


person Alex Zhukovskiy    schedule 14.04.2021    source источник
comment
Первые четыре строки в вашем конфиге или в вашем .gitattibutes файле?   -  person bk2204    schedule 15.04.2021
comment
Это все gitattribute, как вы можете видеть в связанном репо.   -  person Alex Zhukovskiy    schedule 15.04.2021


Ответы (1)


Ваш файл .gitattributes имеет недопустимый синтаксис и, вероятно, полностью игнорируется на этом основании. Первые четыре строки (воспроизведенные ниже) представляют собой синтаксис конфигурации и не могут быть включены в файл .gitattributes. Конфигурация не может быть отправлена ​​как часть репозитория и должна храниться либо в .git/config, либо в вашем личном .gitconfig.

[core]
    whitespace=trailing-space,space-before-tab
[apply]
    whitespace=fix

Кроме того, как подчеркнуто в этом ответе, GitHub не использует binary атрибут в .gitattributes, чтобы определить, какие файлы следует сравнивать. Он будет сравнивать те файлы, которые выглядят как обычный текст (и по умолчанию не создаются автоматически), и не будет сравнивать файлы, которые кажутся двоичными. Однако вы можете пометить файл как linguist-generated, чтобы указать, что это сгенерированный файл.

Я не знаю, поддерживает ли GitLab эту функцию, но, учитывая, что ваш файл .gitattributes содержит недопустимый синтаксис, это, вероятно, не помогает.

person bk2204    schedule 15.04.2021
comment
Хм, может быть, ты прав. Этот абзац заставил меня подумать, что я действительно могу его отправить: git-scm.com/docs/gitattributes# _end_of_line_conversion . Связанный вами ответ - это то, на что я также ссылался в своем вопросе, поэтому я его видел, но за последние 7 лет все может измениться. Спасибо за ответ, я дважды проверю, не поддерживает ли gitattributes это, но я почти уверен, что помню, как это работает, даже если оно не задокументировано. - person Alex Zhukovskiy; 16.04.2021
comment
Я только что проверил с действительным файлом .gitattributes - это не сработало. Github просто не использует .gitattributes, но gitlab должен (согласно документации). Спрошу там тогда. Спасибо - person Alex Zhukovskiy; 20.04.2021