git - 在没有行结束文件更改的情况下在 mac 和 windows vm 之间共享 git repo

标签 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

//在一个新的分支上

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

第 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)

第 3 步:在 Windows 上

git status
Same output as above

.git 属性

* 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

最佳答案

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

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

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

IntelliJ
Eclipse
Netbeans

关于git - 在没有行结束文件更改的情况下在 mac 和 windows vm 之间共享 git repo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33295867/

相关文章:

c++ - 苹果安全传输代码错误

python - 如何通过在pyglet窗口中用鼠标拖动将.png从x,y拖动到x1,y1

git - 如何为 laravel5.2 忽略 .gitignore 中的 .env 文件

git clone fatal error : RPC failed , 远端意外挂断,早EOF

git - Jenkins Git 环境变量未在管道中设置

javascript - 如何在 macOS 上安装 Nodemon Nodejs? nodemon 保持显示 : command not found

Git Extensions 存储了错误的凭据

ios - 在 OSX x86-64 上交叉编译 ARM

Java创建Mac面板

Android - 禁用应用程序的虚拟启动窗口