在尝试为开发人员标准化平台时,我的一个需求是提交.git/config
,以便每个人都拥有相同的CRLF配置,而不会忘记手动设置。
如何设置?
我对所有这些对autocrlf
的否定性感到担忧。如果不起作用,为什么不删除此功能?这个功能的制作者要么被误解,要么他们用它做了一个失败的实验,它应该被删除以阻止更多的人浪费他们的时间(阅读模糊的手册页,提问,回答这些问题的人等等。)
答案 0 :(得分:73)
我一直发现autocrlf
配置属性有问题。
(如我的回答Git 1.6.4 beta on Windows (msysgit) - Unix or DOS line termination所述)
注意:msysgit issue 538将其设置为true(这是msysgit安装程序设置的默认值),但我不相信。
我希望以下三个解决方案中的一个:
1。使用新的config setting core.eol
(1.7.2 +)
设置要在工作目录中为具有text属性集的文件使用的行结束类型 替代方案为“
lf
”,“crlf
”和“native
”,它们使用平台的本机行结尾。
默认值为native。
2。一个checkout/checking .gitattribute
。
请参阅gitattributes手册页:
crlf
或core.autocrlf
是在.gitattributes
文件中记录以前是本地配置属性的方法。
3。一个git attribute filter driver可以:
.gitattributes
)。答案 1 :(得分:5)
如果您使用的是Unix系列操作系统,我建议您只创建一个符号链接。
ln -s .git/config git-config
git add git-config
git commit -m "Now tracking git config file"
答案 2 :(得分:2)
.git/config
可以在本地覆盖~/.gitconfig
。
因此,作为构建,Makefile或配置脚本的一部分,您可以将用户的更改提交到~/.gitconfig
,或通过.gitconfig
加载本地脚本git config
。
例如,使用某些设置创建新的.gitconfig
,并按以下方式加载:
git config --local include.path "/path/to/.gitconfig"
或要求用户使用~/.gitconfig
这些行:
[include]
path = .gitconfig
如果您在代码分发中使用Vagrant,则可以通过以下方式从Vagrantfile
加载git config:
system('GIT_TRACE=1 git config --local include.path "$(git rev-parse --show-toplevel)/git/gitconfig"');
然后在git/gitconfig
中提交您的git配置,因此每次用户运行其VM的配置时,此文件将自动加载到主机上的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 (not recommended).
#* 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
答案 3 :(得分:0)
使用hardlink:
可能是更好的方法在* nix或OS X系统中:
ln .git/config git-config
git add git-config
git commit -m "Now tracking git config file"
在NTFS文件系统上的Windows中:
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
在NTFS文件系统上的Windows中:
git clone FROM_PROJ_URL
del .git\config
mklink /H .git\config git-config