用代码分发gitconfiguration

为了使开发者的平台标准化,我的需求之一就是提交.git/config这样每个人都可以拥有相同的CRLFconfiguration,而不会忘记手动设置。

我如何设置?

我对所有这种对autocrlf否定性有点担心。 为什么不删除这个function,如果它不工作? 这个function的制造者或者被误解了,或者做了一个失败的实验,应该删除它,以防止更多的人浪费时间(阅读不明确的手册页,提出问题,回答这些问题的人等)。

我一直发现autocrlfconfiguration属性有问题。 (如我的答案在Windows(msysgit) – Unix或DOS行终止Git 1.6.4testing版 )

  • 它不仅使一些合并棘手
  • 它可以根据在一个环境中使用的shell而变化
  • 它也有git状态的问题
  • 和svn导入 。

注意: msysgit问题538设置为true(这是由msysgit安装程序设置的默认值),但我不相信。

我更喜欢以下三种解决scheme之一:

  • configuration一个行尾样式
  • 使这个configuration通过不同的Git仓库传播

1.使用新的configuration设置core.eol (1.7.2+)

设置文本属性设置的文件在工作目录中使用的行结束types。
替代方法是“ lf ”,“ crlf ”和“ native ”,它们使用平台的本地行结尾。
默认值是本地的。

2. 结帐/检查.gitattribute 。 请参阅gitattributes手册页: core.autocrlfcore.autocrlf是在.gitattributes文件中logging以前是本地configuration属性的方法。

3.一个git属性filter驱动程序 ,它可以:

  • 强制执行您可能要设置的任何格式标准
  • 将这些标准应用于某些文件/目录
  • 被logging为configuration文件( .gitattributes )能够被推到任何地方。

如果您使用的是Unix家族操作系统,我会build议您只创build一个符号链接。

 ln -s .git/config git-config git add git-config git commit -m "Now tracking git config file" 

可能是更好的方式来使用硬链接 :

在* nix或OS X系统中:

 ln .git/config git-config git add git-config git commit -m "Now tracking git config file" 

在Windows NTFS文件系统上:

 mklink /H git-config .git\config git add git-config git commit -m "Now tracking git config file" 

但是我们必须记住,在克隆项目时应用设置来执行相反的过程:

在* nix或OS X系统中:

 git clone FROM_PROJ_URL rm .git/config ln git-config .git\config 

在Windows NTFS文件系统上:

 git clone FROM_PROJ_URL del .git\config mklink /H .git\config git-config 

.git/config可以由~/.gitconfig在本地重写。

因此,作为构build,Makefile或configuration脚本的一部分,您可以将用户的更改提交到~/.gitconfig ,或通过git config加载本地脚本.gitconfig

例如,使用一些设置创build新的.gitconfig ,并通过以下方式加载它:

 git config --local include.path "/path/to/.gitconfig" 

或者要求用户在他们的~/.gitconfig~/.gitconfig行:

 [include] path = .gitconfig 

如果您使用Vagrant作为代码分发的一部分,则可以通过以下方式从Vagrantfile加载gitconfiguration:

 system('GIT_TRACE=1 git config --local include.path "$(git rev-parse --show-toplevel)/git/gitconfig"'); 

然后在git/gitconfig提交你的gitconfiguration,所以每当用户运行他们虚拟机的configuration时,这个文件就会自动加载到主机上的git(例如强制core.filemode被禁用,所以Windows将不会任何文件权限问题)。


为了强制用户的行结束,你应该使用.gitattributes而不是开箱即用。 使用类Unix结束符( LF )的示例语法:

 # Drupal git normalization # @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html # @see https://www.drupal.org/node/1542048 # Define text file attributes. # - Treat them as text. # - Ensure no CRLF line-endings, neither on checkout nor on checkin. # - Detect whitespace errors. # - Exposed by default in `git diff --color` on the CLI. # - Validate with `git diff --check`. # - Deny applying with `git apply --whitespace=error-all`. # - Fix automatically with `git apply --whitespace=fix`. *.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html *.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 # Auto-detect text files, ensure they use LF. * text=auto eol=lf # Define binary file attributes. # - Do not treat them as text. # - Include binary diff in patches instead of "binary files differ." *.gz -text diff