用代码分发gitconfiguration
为了使开发者的平台标准化,我的需求之一就是提交.git/config
这样每个人都可以拥有相同的CRLFconfiguration,而不会忘记手动设置。
我如何设置?
我对所有这种对autocrlf
否定性有点担心。 为什么不删除这个function,如果它不工作? 这个function的制造者或者被误解了,或者做了一个失败的实验,应该删除它,以防止更多的人浪费时间(阅读不明确的手册页,提出问题,回答这些问题的人等)。
我一直发现autocrlf
configuration属性有问题。 (如我的答案在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.autocrlf
或core.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