跨平台git配置的最佳实践?

Bas*_*ink 47 git git-config

上下文

我的许多应用程序用户配置文件都保存在git存储库中,以便在多台计算机和多个平台之间轻松共享.这些配置文件.gitconfig中包含以下用于处理回车换行符的设置

[core]
    autocrlf = true
    safecrlf = false
Run Code Online (Sandbox Code Playgroud)

问题

这些设置也应用于GNU/Linux平台,这会导致模糊的错误.

在配置文件中处理这些特定于平台的差异有哪些最佳实践?

提出的解决方案

我意识到这个问题可以通过为每个平台建立一个分支并将主要内容保持在主服务器并在主服务器向前移动时与平台分支合并来解决.我想知道这个问题是否有更简单的解决方案?

has*_*sen 54

永不打开autocrlf,它只会引起头痛和悲伤.

\r\n在Windows 上没有任何借口,所有体面的编辑(根据定义)都可以处理\n.

  • 头痛和悲伤的一些例子将是这个答案的一个很好的补充. (8认同)
  • @ naught101如果您正在与其他开发人员合作并且您并非全部使用相同的autocrlf设置,那么最终可能会发生大量与文件/更改的合并冲突,这些文件/更改实际上不会发生冲突,因为行结尾不同.Git,默认情况下,自动提交合并它认为*成功的方式尤其危险,因为差异编辑器可以设置为将空格视为非重要.您的开发团队对代码审查不佳或不存在可能会导致您重新引入修复的错误/导致危险的代码回归. (6认同)
  • 我迟到了,但我有一个例子 - Cygwin无法处理shell脚本中的CRLF结尾.通常情况下这没关系,但是当该脚本是团队项目的一半的构建脚本时......人们认为构建系统被破坏或构建存在缺陷时,他们只是忘记运行Dos-to- Unix脚本.最后更改了repo设置,这样就不会发生. (3认同)
  • meh - 大多数编辑器/可以/只处理\n,但默认为平台行结尾,正如他们应该的那样. (2认同)

Von*_*onC 32

crlf在问题中广泛地审查了这种配置设置():
使用代码分发git配置.

结论是:

*.java +crlf
*.txt +crlf
...
  • 避免对不需要它的文件类型进行任何类型的转换,因为这种转换对合并的各种副作用git status,shell环境和svn import(请参阅" 使用代码分发git配置 "链接和引用) .
  • crlf如果可以的话,完全避免任何转换.

现在,关于每个平台设置的具体问题,分支并不总是正确的工具,特别是对于非程序相关数据(即;这些设置与您正在开发的内容无关,仅与存储您的历史记录的VCS相关)发展)

正如问题Git中所述:如何维护项目的两个分支并仅合并共享数据?:

如果将依赖于系统的代码放在不同的目录中并处理构建系统中的跨平台依赖项(Makefiles或您使用的任何内容),那么您的生活将变得非常简单.

在这种情况下,虽然分支可以用于依赖于系统的代码,但我建议使用支持工具系统相关设置的目录,并且脚本能够.gitattributes根据repo部署平台构建适当的文件以应用正确的设置.