使用代码分发git配置

时间:2010-02-25 10:59:51

标签: git

在尝试为开发人员标准化平台时,我的一个需求是提交.git/config,以便每个人都拥有相同的CRLF配置,而不会忘记手动设置。

如何设置?

我对所有这些对autocrlf的否定性感到担忧。如果不起作用,为什么不删除此功能?这个功能的制作者要么被误解,要么他们用它做了一个失败的实验,它应该被删除以阻止更多的人浪费他们的时间(阅读模糊的手册页,提问,回答这些问题的人等等。)

4 个答案:

答案 0 :(得分:73)

我一直发现autocrlf配置属性有问题。 (如我的回答Git 1.6.4 beta on Windows (msysgit) - Unix or DOS line termination所述)

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

我希望以下三个解决方案中的一个:

  • 配置一种行尾样式
  • 使该配置通过不同的Git repos传播

1。使用新的config setting core.eol(1.7.2 +)

  

设置要在工作目录中为具有text属性集的文件使用的行结束类型   替代方案为“lf”,“crlf”和“native”,它们使用平台的本机行结尾。
  默认值为native。

2。一个checkout/checking .gitattribute。 请参阅gitattributes手册页: crlfcore.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