gitattributes在结帐时被忽略

时间:2019-01-08 15:08:35

标签: git

我们最近在公司中从svn切换到git,因此总体知识仍然很低。

我们决定在每台计算机上都设置core.autocrlf = true,并使用“ .gitattributes”文件进行“微调”。

我的主要重点是一个带有apache-camel的Integration-Project,用于将文件从“ a”转换为“ b”。由于许多端点不同,因此我需要确保编码,行尾等。在我的apache骆驼测试中,我从测试资源中提取了一个静态文件,对其进行了转换,并将输出与另一个静态文件(基本上是预期的输出)进行比较在我的测试资源中。

在我们引入“ core.autocrlf = true”之前,它曾经可以完美地工作。从那时起,在jenkins上的测试似乎已成功完成,但是当我在本地运行它们时,许多测试都失败了。 (在“ core.autocrlf = true”介绍之后,我刚刚克隆了存储库)。 我搜索了预期输出文件中的1个。如果我检查机器上的行尾(赢得10),它们就是“ crlf”。如果我从存储库中检查文件的行尾,它们是“ lf”。可以通过core.autocrlf = true来实现这种转换。

但是,我尝试添加“ .gitattributes”文件。具有以下两个规格:

* text=auto
*.xml binary

我只是使用“ * .xml”以便于测试是否更容易。基本上,我需要的是应该忽略测试资源下的所有文件。但是使用上面的“ .gitattributes”文件,即使我新近克隆了整个存储库并执行“ git checkout branchname”,我仍然在计算机上获得了带有crlf的测试文件。如果我这样做

*.xml text eol=lf 

*.xml -text" etc.

据我到目前为止的理解,如果我将路径或文件类型指定为“二进制”,则git在执行git checkout,git commit或git等操作时根本不进行任何转换。

我是否误解了某件事,或者我只是做错了什么,还是git没有按照应有的方式做?

1 个答案:

答案 0 :(得分:0)

我能够解决此问题,但我可能首先需要写下设置的方式以及最初的操作方式。

因此,我们有一个master分支作为默认分支(基本上是一个分支,其中包含“实时代码”或即将上线的代码)和develop分支。我们从开发人员创建功能和错误修正分支,并在错误修正或功能完成后将它们合并回去。

所以我最初做的是:在bitbucket上,我从development创建了一个分支(我们称其为branchX)。我在本地打开了git-bash控制台:

git pull
git checkout branchX

然后我在第一篇文章中创建了带有Specification的gitattributes文件。之后,我提交并推送到远程仓库。我完全删除了本地存储库,然后执行了以下操作:

git clone remoteRepoUrl
cd repoName
git checkout branchX

之后,文件仍然显示为crlf而不是lf。

在回答之后,我又尝试了一次,直到最后一部分。 而不是克隆并签入我的分支

git clone --branch branchX remoteRepoUrl

这将克隆存储库,但直接签出所需分支。我的gitattributes规范现在可以正常工作。

但是,奇怪的是,如果我这样做

git checkout master

现在我仍然可以得到lf行尾,这很好,但实际上不行,因为master分支没有.gitattributes文件,因此应该只使用autocrlf配置。