Форум программистов, компьютерный форум, киберфорум
Наши страницы
Системы контроля версий
Войти
Регистрация
Восстановить пароль
 
Dragokas
Эксперт WindowsАвтор FAQ
17088 / 7143 / 861
Регистрация: 25.12.2011
Сообщений: 10,951
Записей в блоге: 16
1

Как запретить замену LF на CRLF в git bash?

30.03.2019, 13:38. Просмотров 418. Ответов 9
Метки нет (Все метки)

Здравствуйте!

Задрала меня эта проблема с автозаменой. Как git bash-у сказать не трогать файлы?

Попробовал эти советы:
https://stackoverflow.com/questions/...s-it-important
https://stackoverflow.com/questions/...53073#20653073

Они мне не помогли.

У меня такой скрипт, написанный для полной замены версии на сервере локальной:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
:<<EOF
 
@echo off
SetLocal EnableExtensions
 
echo.
echo --------------------------------
echo GitHub Uploader by Alex Dragokas
echo --------------------------------
echo.
 
"C:\Program Files\Git\bin\sh.exe" --login -i -- "%~nx0"
pause
exit /b
EOF
 
repo="Luxs-Model-Changer"
git config --global user.name "dragokas"
git config --global user.email "xxxxxx"
git config --global core.autocrlf false
git config --global core.safecrlf false
 
# If repository is already initialized with at least one file
# Warning !!! All files pushed by contributors will be overwritten by local version
rm -R -f .git
rm -R -f GitHub-tmp
mkdir GitHub-tmp
cd GitHub-tmp
git clone https://github.com/dragokas/$repo.git
 
mv $repo/.git ../
cd ..
rm -R -f GitHub-tmp
 
# This is required for the first commit (to create .git folder locally)
if [ ! -d ".git" ]; then
  git init
  git remote add origin https://github.com/dragokas/$repo.git
fi
 
git checkout master
 
# This is required if somebody pushed to your repository
# git pull origin master --allow-unrelated-histories
 
echo ""
echo ""
 
git add *
 
echo ""
echo ""
 
echo "Ready to upload ..."
echo ""
echo -e "ENTER NEW VERSION NUMBER: \c"
read -r line
echo ""
 
git commit -a -m "$line"
 
echo ""
echo ""
git push -u origin master
echo ""
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2019, 13:38
Ответы с готовыми решениями:

Как редактировать текстовые файлы через Git Bash?
Добрый день! В общем задача следующая записать в файл некий текст, но при этом нельзя пользоваться...

Как запретить замену i на I?
Уважаемые участники форума! Помогите мне запретить моему Word 2003 автоматически менять строчную...

Git Bash - $PATH
Доброго времени суток Опишу всё максимально подробно.. Лежит в директории D:\App\php-7.2.3-nts...

Как не отключая обновления запретить замену ядра на более новую версию?
win xp, sp 3, лицензионка постоянно вылетает бсод на ядро ntoskrnl.exe версии 5.1.2600.6368 ,...

Обновление PHP (Git Bash - $PATH)
Доброго времени суток Опишу всё максимально подробно.. Лежит в директории D:\App\php-7.2.3-nts...

9
Rius
Эксперт .NET
6017 / 3875 / 936
Регистрация: 25.05.2015
Сообщений: 11,757
Записей в блоге: 12
Завершенные тесты: 4
01.04.2019, 22:23 2
Цитата Сообщение от Dragokas Посмотреть сообщение
Задрала меня эта проблема с автозаменой. Как git bash-у сказать не трогать файлы?
Можно указать гиту, что некоторые файлы - бинарные.
А чем именно автозамена помешала?
0
Dragokas
Эксперт WindowsАвтор FAQ
17088 / 7143 / 861
Регистрация: 25.12.2011
Сообщений: 10,951
Записей в блоге: 16
01.04.2019, 23:47  [ТС] 3
Цитата Сообщение от Rius Посмотреть сообщение
Можно указать гиту, что некоторые файлы - бинарные.
Да как то делал, в одном проекте это работало, а в другом отказывается их воспринимать как бинарные.

Цитата Сообщение от Rius Посмотреть сообщение
А чем именно автозамена помешала?
Ну вот форкаешь ты чужой проект, а при коммите оно пишет будто ты внес изменения во все файлы. Присылаю я пул-риквест, и у оригинального автора расходятся глаза. Да, и вообще, некоторые текстовые файлы, связанные с контролами, нельзя трогать, они после такой экзекуции перестают корректно работать в IDE.

Добавлено через 1 минуту
P.S. Вот такой у меня .gitattributes

Код
# Set the default behavior, in case people don't have core.autocrlf set.
* text eol=auto
*.* binary
0
Rius
Эксперт .NET
6017 / 3875 / 936
Регистрация: 25.05.2015
Сообщений: 11,757
Записей в блоге: 12
Завершенные тесты: 4
02.04.2019, 06:17 4
Цитата Сообщение от Dragokas Посмотреть сообщение
Вот такой у меня .gitattributes
Все файлы обозначаются *, а не *.*.
Цитата Сообщение от Dragokas Посмотреть сообщение
Ну вот форкаешь ты чужой проект, а при коммите оно пишет будто ты внес изменения во все файлы. Присылаю я пул-риквест, и у оригинального автора расходятся глаза.
У пряморукого автора окончания строк в программе значения иметь не должны. А исходные файлы распаковываются при checkout с теми окончаниями, которые приняты в используемой ОС: CRLF в Windows, LF в Linux. И в каком виде они в репозитории хранятся - не важно.
Попытками установить бинарный режим вы как раз создаёте проблему и потом будете её героически решать. Т.к. заботиться об окончаниях строк будет не гит с настройками, хранящимися в репозитории, а вы - настраивая на каждом рабочем месте редактор под конкретный проект.

Добавлено через 4 минуты
Цитата Сообщение от Dragokas Посмотреть сообщение
Да, и вообще, некоторые текстовые файлы, связанные с контролами, нельзя трогать, они после такой экзекуции перестают корректно работать в IDE.
Вот именно для них есть .gitattributes с *.ext binary
1
02.04.2019, 06:17
Dragokas
Эксперт WindowsАвтор FAQ
17088 / 7143 / 861
Регистрация: 25.12.2011
Сообщений: 10,951
Записей в блоге: 16
02.04.2019, 08:04  [ТС] 5
Цитата Сообщение от Rius Посмотреть сообщение
У пряморукого автора окончания строк в программе значения иметь не должны. А исходные файлы распаковываются при checkout с теми окончаниями, которые приняты в используемой ОС: CRLF в Windows, LF в Linux. И в каком виде они в репозитории хранятся - не важно.
Попытками установить бинарный режим вы как раз создаёте проблему и потом будете её героически решать. Т.к. заботиться об окончаниях строк будет не гит с настройками, хранящимися в репозитории, а вы - настраивая на каждом рабочем месте редактор под конкретный проект.
Не знаю, что тут может быть не понятно.
Вот чужой проект программы на VB, любезно исправленный Git-ом в формат LF: https://github.com/mrbellek/ADSspy
Скачиваем его кнопкой Download в винде через браузер, распаковываем, открываем в IDE, получаем нерабочий проект.
Делаем замену LF -> CRLF (\n => \r\n у ADSSpy.frm), сохраняем, открываем проект, он становится рабочим.
Ну и спрашивается при чём тут автор. И зачем Github делает всякие пакости. И почему задокументированная функция отключения замены стиля переноса строк, не работает.
0
Rius
Эксперт .NET
6017 / 3875 / 936
Регистрация: 25.05.2015
Сообщений: 11,757
Записей в блоге: 12
Завершенные тесты: 4
02.04.2019, 08:45 6
Цитата Сообщение от Dragokas Посмотреть сообщение
И почему задокументированная функция отключения замены стиля переноса строк, не работает.
Потому что:
Цитата Сообщение от Dragokas Посмотреть сообщение
Скачиваем его кнопкой Download в винде через браузер, распаковываем, открываем в IDE, получаем нерабочий проект.
Скачивать надо через Git. Преобразование в виндовом клиенте, вроде бы, по умолчанию будет настроено на CRLF. Владелец репозитория сохранением этой настройки в .gitattributes не озаботился.

Цитата Сообщение от Dragokas Посмотреть сообщение
Ну и спрашивается при чём тут автор. И зачем Github делает всякие пакости.
GitHub тут тоже ни причём. Спросите криворуких разработчиков древней IDE
0
Dragokas
Эксперт WindowsАвтор FAQ
17088 / 7143 / 861
Регистрация: 25.12.2011
Сообщений: 10,951
Записей в блоге: 16
02.04.2019, 09:06  [ТС] 7
Цитата Сообщение от Rius Посмотреть сообщение
Владелец репозитория сохранением этой настройки в .gitattributes не озаботился.
Да хз, как там это настраивается. Короче танцы с бубнами, делать преобразование в LF для того чтобы потом делать обратно преобразование в CRLF, которое еще и надо отдельно настраивать.

Цитата Сообщение от Rius Посмотреть сообщение
GitHub тут тоже ни причём. Спросите криворуких разработчиков древней IDE
Уверен, что в каких-то из новых IDE можно наткнутся на такие же грабли. Мне он бывало и чисто бинарные файлы как-то пытался исправить.
0
Rius
Эксперт .NET
6017 / 3875 / 936
Регистрация: 25.05.2015
Сообщений: 11,757
Записей в блоге: 12
Завершенные тесты: 4
02.04.2019, 09:13 8
Цитата Сообщение от Dragokas Посмотреть сообщение
Да хз, как там это настраивается. Короче танцы с бубнами, делать преобразование в LF для того чтобы потом делать обратно преобразование в CRLF, которое еще и надо отдельно настраивать.
В репозитории хранится LF, потому что основано было на линуксе, где так принято.
На клиенте распаковывается в зависимости от настроек .gitattributes, либо по умолчанию - по своему в каждой ОС.
И все довольны.

Цитата Сообщение от Dragokas Посмотреть сообщение
Уверен, что в каких-то из новых IDE можно наткнутся на такие же грабли.
В этом случае просто юзают .gitattributes.

Добавлено через 3 минуты
Обычно, если скачивают в виде архива, то обратно не коммитят, и такой проблемы не возникает:
Цитата Сообщение от Dragokas Посмотреть сообщение
Присылаю я пул-риквест, и у оригинального автора расходятся глаза.
0
Dragokas
Эксперт WindowsАвтор FAQ
17088 / 7143 / 861
Регистрация: 25.12.2011
Сообщений: 10,951
Записей в блоге: 16
02.04.2019, 09:20  [ТС] 9
Цитата Сообщение от Rius Посмотреть сообщение
Владелец репозитория сохранением этой настройки в .gitattributes не озаботился.
ты можешь, пожалуйста, написать как эта настройка выглядит?
0
Rius
Эксперт .NET
6017 / 3875 / 936
Регистрация: 25.05.2015
Сообщений: 11,757
Записей в блоге: 12
Завершенные тесты: 4
02.04.2019, 09:24 10
Git - gitattributes Documentation
Код
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c* text
*.h* text

# Declare files that will always have CRLF line endings on checkout.
readme.txt text eol=crlf

# Denote all files that are truly binary and should not be modified.
*.png binary
*.a binary
1
02.04.2019, 09:24
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2019, 09:24

Открыть в редакторе по умолчанию (из Git Bash)
Здравствуйте! Подскажите, пожалуйста, как в Git Bash, установленном в windows, открыть файл...

Command not found при запуске git bash
Здравствуйте! Извините, если может быть не в том разделе создаю эту тему. У меня такая проблема....

Почему git add . и git add * это плохо? И как тогда быть?
Вопрос по гиту, почему git add . и git add * это плохо? и как тогда быть?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru