在 Mac 和 Windows 虚拟机之间共享 git 存储库,无需行结束文件更改

Mar*_*ans 5 git macos window line-endings

问题

通过 Parallels 在 Mac 上运行 Windows,我们似乎无法找出正确的 Git 设置,因此我们无法获得行结束文件更改。

细节

Git 存储库位于 Windows 虚拟机上,是一个共享驱动器,我们可以在 Mac 上访问它,以便我们可以编辑 Angular 代码。

我读过 StackOverflow 上的很多文章,但它们似乎都没有解决问题。

是否可以在 Windows 中处理 cSharp 文件,并从命令行进行提交。

然后滑到 Mac,编辑一些 javascript,然后在 Mac 终端中进行提交,而不需要不断地对其他不相关的文件进行行尾更改?

我们一直在使用 core.autocrlf 、 core.eol 和 .gitattributes ,但似乎无论我们做什么,一个操作系统或另一个操作系统都会显示大量文件更改(最终成为行结尾),但我们的编辑器不会做出改变。

我可以在 Windows 上进行克隆,然后在 mac 上执行 git status,它看起来就像每个文件都已更改。

问题

需要进行哪些设置?

第 1 步:在 Windows 上

git config --global --unset core.eol
git config --global core.autocrlf true
Run Code Online (Sandbox Code Playgroud)

// 在新分支上

git rm --cached -r .
git reset --hard
git commit "Reset Line Endings" //(I expected this to be larger).
[line 4d14aa1] Reset EOL
9 files changed, 12910 insertions(+), 12910 deletions(-)

git status

$ git status
On branch line
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)

第 2 步:在 Mac 上

git config --unset core.eol
git config --global core.autocrlf input
git status
modified:   tools/NUnit2.5.3/nunit-agent-x86.exe.config
modified:   tools/NUnit2.5.3/nunit-agent.exe.config
modified:   tools/NUnit2.5.3/nunit-console-x86.exe.config
modified:   tools/NUnit2.5.3/nunit-console.exe.config
modified:   tools/NUnit2.5.3/nunit-x86.exe.config
modified:   tools/NUnit2.5.3/nunit.exe.config
modified:   tools/NUnit2.5.3/pnunit-agent.exe.config
modified:   tools/NUnit2.5.3/pnunit-launcher.exe.config
modified:   tools/NUnit2.5.3/runFile.exe.config
modified:   tools/NUnit2.5.3/runpnunit.bat
modified:   tools/NUnit2.5.3/test.conf
modified:   tools/StyleCop 4.3.1.3/ReSharper-code-style-settings.xml
modified:   tools/StyleCop 4.3.1.3/Settings.StyleCop
...(100's of other files)
Run Code Online (Sandbox Code Playgroud)

第 3 步:在 Windows 上

git status
Same output as above
Run Code Online (Sandbox Code Playgroud)

.gitattributes

* text=auto

# These files are text and should be normalized (convert crlf => lf)
# Git Files
.gitattributes text
.gitignore text
.gitconfig text

# cSharp / Visual Studio

*.bat     text eol=crlf
*.cmd     text
*.cs      text  diff=csharp eol=crlf
*.csproj  text
*.h       eol=crlf
*.md      text
*.msbuild text
*.ps1     text
*.sdf     binary
*.sln     text  eol=crlf
*.tt      text
*.xaml    text

# Web
*.css     text
*.sass    text
*.json    text
*.js      text
*.htm     text
*.chm     binary
*.html    text
*.xml     text
*.svg     text  eol=lf

# Images & Media
*.png     binary
*.jpg     binary
*.jpeg    binary
*.gif     binary
*.ico     binary
*.mov     binary
*.ico     binary
*.pdf     binary


# Compression
*.gz      binary
*.zip     binary
*.7z      binary
*.nupkg   binary

# Fonts
*.ttf       binary
*.eot       binary
*.woff      binary

# Documents
*.doc  diff=astextplain
*.DOC  diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot  diff=astextplain
*.DOT  diff=astextplain
*.pdf  diff=astextplain
*.PDF  diff=astextplain
*.rtf  diff=astextplain
*.RTF  diff=astextplain
*.md text
*.adoc text
*.textile text
*.csv text
*.tab text
*.tsv text
*.sql text
*.psd binary
*.ai binary
*.eps binary

# Compiled Dynamic libraries
*.so      binary
*.dylib   binary
*.dll     binary
*.pdb     binary

# Compiled Static libraries
*.lai   binary
*.la    binary
*.a     binary
*.lib   binary
*.llblgenproj binary

# Executables
*.exe binary
*.out binary
*.app binary

# Security
*.p12 binary
*.cer binary
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 1

我对您的建议是让您的整个开发团队就通用代码格式达成一致,包括行结尾。这样,当开发人员尝试在 Windows 上提交上次在 Mac(即 Linux)上编辑的文件时,永远不会出现任何摩擦。Git 很友善地告诉你行尾可能会改变。然而,我相信处理这个问题的更好方法不是依赖Git,而是在所有机器上就通用格式达成一致。

在我从事的许多软件工作中,我都遇到过代码格式问题。这不仅限于行尾,还可能与间距和制表符有关。让每个人都同意格式可以节省时间并避免不必要的合并冲突。

以下是有关如何在主要 IDE 中配置行结束分隔符的链接:

IntelliJ
Eclipse
Netbeans