我在Windows机器上使用git,nuget和Visual Studio 2015。
我有一个项目,我已经内置到一个仅限内容的nuget包中。包的内容是两个文件:
File1.ttinclude File2.ttinclude
这些文件必须有CRLF行结尾。我认为这是Windows的默认设置。我尝试了各种git设置,并在我的全局git设置中确定了以下内容:
autocrlf = false
我可以将文件推送到远程仓库并克隆远程遥控器,文件看起来仍然有CRLF行结尾。
我的问题是当我尝试将nuget包包含到另一个项目中时。 每当我运行install-package(或从包管理器执行)时,文件就会被添加到带有LF行结尾的项目中,并且所有地狱都会松动。
我已经尝试了autocrl=true
,我尝试将*.ttinclude text eol=crlf
添加到nuget包的.gitattributes以及需要包含该包的项目。似乎什么都没有用,我不知所措。
如何让nuget安装仅限内容的软件包并保持正确的行结尾?
我在将nuget包添加到项目时创建了以下我目前使用的git别名。它修复了行结束问题,直到nuget包更新为止。
alias.fixeol=!git add . -u && git commit -m "start eol fix" && git rm --cache -r . && git reset --hard && git add . && git commit -m "end eol fix"
更新1: 我只想到了这个,因为它也可能是个问题。我们使用TeamCity作为构建服务器,这就是从我的源代码构建nuget包的原因。我没有设置它,所以我不是100%如何设置。构建服务器上的git是否也需要以某种方式设置? TeamCity设置怎么样?
更新2: 所以我只是检查了.nupkg的nuget包内容,行结尾是LF,所以它必须是构建服务器。现在我只需要弄清楚构建服务器上需要设置什么git,并且会改变它搞砸了其他项目?
更新3 - 已解决: 这是一个TeamCity问题。 https://confluence.jetbrains.com/pages/viewpage.action?pageId=48105844
将'将行结尾转换为CRLF'选项设置为true可修复此问题。当然,我不确定为什么这是一个问题。我在本地有autocrlf = false。文件是CRLF。如果没有设置该功能相当于具有autocrlf = false的TC,那么它不应该只是工作吗?目前我只在这个特定项目中将该选项设置为true,因为它只是一个只需要CRLF的内容包。我不确定它会如何影响其他项目。
答案 0 :(得分:2)
我已尝试将
*.ttinclude text eol=crlf
添加到.gitattributes
以获取nuget包
这是正确的解决方案:始终将core.autocrlf
设置为false,并依赖eol指令。虽然看到“Why isn’t eol=crlf
honored in .gitattributes
?”:
在使用
text
属性标记文件时,我误解了git实际上做了什么。它始终在内部存储具有LF行结尾的文件,并且仅在结帐时转换为CRLF
另一种方法是,如果您不需要比较版本,如果这些.ttinclude
文件没有太大变化,那么就是:
*.ttinclude -text
请注意,对于TeamCity(使用JGit),.gitattributes
were not supported(直到最近?):