问题
I'm going to answer my question with the fix what solved my problem.
Note for downvoters: I understand that the root cause is discussed in various other threads (that is how I solved my problem). This post is more about how having a dual boot system can lead you to this issue. So no, this question/answer is not a duplicate, but a particular instance of a general class of problems, adding more cases to SO's repository on this issue.
At home: I code in Linux. LF
used as line ending
At the office: I code in windows. CRLF
used as line endings.
By default, git's autocrlf
feature (https://stackoverflow.com/a/20653073/2715083) keeps things happy.
However, if you run a dual boot system with Linux and Windows, you can mess yourself up in the following way:
git pull
some files you worked on in a linux environment in a windows environment, in a location that can be accessed from the dual-booted linux environment. This modifies the files to containCRLF
endings.- Then when you open up the file in linux, where the default is only
LF
,git diff
will say entire file is modified, because eachLF
got changed toCRLF
at every single line. (I was warned by Atom, which has this diff count inbuilt)
回答1:
you are talking about text=auto part? I wasn't sure If I need to include that in a new
.gitattributes
file or not, because when I did, ATOM still showed the files as modified.
Yes, it does.
To force Git to apply .gitattributes
directives, see "Dealing with line endings".
I would first make sure core.autocrlf
is set to false.
git config --global core.autocrlf false
Then:
git add . -u
git commit -m "Saving files before refreshing line endings"
rm .git/index
git reset
git status
git add -u
git add .gitattributes
git commit -m "Normalize all the line endings"
You can also use, to force the index re-normalization:
git rm --cached -r .
git reset --hard
See "Force LF eol in git repo and working copy"
* text=auto eol=lf
回答2:
The FIX
- Delete/move to another location the problem files/folders
- do
git checkout <hash> <your/files/location>
where <hash>
is for the last good commit, and your/files/location
being the location of the files you want to cure from the CRLF
problem. This will basically restore the older versions from your local .git
repository.
Worked for me.
If you know something i missed, or explained incorrectly, do let me know
来源:https://stackoverflow.com/questions/45598577/git-crlf-issue-in-windows-linux-dual-boot