Снова на концах строк git

Все наши разработчики работают на компьютерах с Windows, а сборка выполняется на Linux.

Чтобы соответствовать истинному пути, мы решили нормализовать окончания строк и следовать сценарию описан на GitHub.

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

Затем я наткнулся на документацию GitBook по окончаниям строк и их нормализации.

Поэтому мне интересно, в чем разница между этими двумя подходами?:

git rm --cached -r .
# Remove everything from the index.

git reset --hard
# Write both the index and working directory from git's database.

git add .
# Prepare to make a commit by staging all the files that will get normalized.
# This is your chance to inspect which files were never normalized. You should
# get lots of messages like: "warning: CRLF will be replaced by LF in file."

git commit -m "Normalize line endings"
# Commit

а также

$ rm .git/index     # Remove the index to force git to
$ git reset         # re-scan the working directory
$ git status        # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"

Поскольку эти два дают разные наборы файлов в git status.

И когда я должен отправлять нормализованные файлы на удаленный компьютер?

UPD: Вот такая ситуация у меня при запуске git-команд и переключении между ветками:

>git status
on develop, no changes

>git checkout -t origin/BRANCH-1 && git status
Branch BRANCH-1 set up to track remote branch GPIII-96 from origin.
Switched to a new branch 'BRANCH-1'
modified: A.java
modified: B.java
modified: C.java

>file A.java
A.java: ASCII text, with CRLF line terminators

>git rm --cached -r . && git reset --hard && git status
# On branch BRANCH-1
nothing to commit (working directory clean)

*WTF??*

>git checkout develop -f && git status
modified: D.java

*WTF???*

>git checkout BRANCH-1 -f && git status
modified: A.java
modified: B.java
modified: C.java

*WTF???*

person glaz666    schedule 01.04.2014    source источник


Ответы (1)


У меня однажды была такая же проблема. Я могу дать вам только один совет.

Для меня это не работа VCS по управлению окончаниями наших строк. Это работа разработчика или IDE. Так что нормализуйте окончания строк один раз, а после этого переключите окончания строк в IDE Windows-машины на Unix-Line-Endings и снова будьте счастливы. Вот что решило наши проблемы.

person ckruczek    schedule 07.05.2015