一个编码员使用Windows计算机,在我们的源代码中随处可见回车.
有没有办法写一个git钩子,将所有转换\r\n为\n?
注意我以前没有使用git hooks,所以一点点额外的手持可能会有很长的路要走:)
我一直在研究一个项目,并在一个文件夹中编辑了一堆文件.此文件夹驻留在我的本地,而不是由GIT监视.我通常会将整个文件夹复制到GIT观看的另一台计算机中,然后将其推送到回购站.现在的问题是,由于行结尾和空格被显示,一堆文件被显示为已更改,因为它正从windows复制到linux盒子.
我执行了以下命令:git diff --stat显示所有更改的行/字符更改的文件.
正如您所看到的,这些文件中的许多文件都没有进行任何更改.但是,它们仍然显示在我的git状态修改部分.
我如何删除或恢复这些恢复正常,因为我从未改变这些文件的任何内容?
刚刚开始使用git 15分钟前已经麻烦了......该死的.
好吧,正如我在标题中写的那样,我目前正在使用git-scm书籍:http://git-scm.com/book
在2.1 - 获取Git存储库中,它说:
如果您开始在Git中跟踪现有项目,则需要转到项目的目录并键入
$ git init
Run Code Online (Sandbox Code Playgroud)
这正是我在做什么,但不知何故,我在这里得到这个错误信息:
fatal: bad numeric config value 'auto' for 'core.autocrlf' in C:\Program Files
(x86)\Git(etc/gitconfig: invalid unit
Run Code Online (Sandbox Code Playgroud)
我按照书中的说法配置了所有内容...我在这里有点无助,特别是因为我完全没有使用git和google的经验似乎在这种情况下非常有帮助.._.
编辑:继承人截图,也许它可以帮助你:

我在一个仅限Windows的工作环境中工作,开发人员使用各种工具来编辑他们的文件.我们正在使用.gitatlassian堆栈来编写代码版本.我几乎都喜欢它.
我刚刚结束了一场漫长而艰苦的斗争,围绕着如何以及为什么git解释行结尾以及为什么core.autocrlf这样做.我们决定使用core.autocrlf true,一切都很好.
我很想知道如何改变这种行为git status:
CRLF行结尾的文件.我将行结尾更改为 LF
$ git status
On branch somebranch
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: Src/the_file_i_changed_to_LF.js
Run Code Online (Sandbox Code Playgroud)但是之后...
$ git commit -a
warning: LF will be replaced by CRLF in Src/the_file_i_changed_to_LF.js.
The file will have its original line endings in your working directory.
On branch …Run Code Online (Sandbox Code Playgroud)我正在搜索根据某些用例使用的正确设置,但找不到任何描述相同的来源.因此,我要求这个问题作为任何寻找git的autocrlf选项正确设置的人的解决方案.
使用案例1:我在Mac上,其他开发人员都在Windows上.他们在我加入之前管理源代码.
使用案例2:我在Windows上,其他开发人员都在Mac上.他们在我加入之前管理源代码.
用例3:我在Linux上,其他开发人员都在Windows上.他们在我加入之前管理源代码.
用例4:我在Windows上,其他开发人员都在Linux上.他们在我加入之前管理源代码.
使用案例5:我在Linux上,其他开发人员都在Mac上.他们在我加入之前管理源代码.
使用案例6:我在Mac上,其他开发人员都在Linux上.他们在我加入之前管理源代码.
我应该使用什么设置的git core.autocrlf?
编辑: 为什么这个问题不是许多类似问题的重复:
所有其他问题及其答案提供了所需的事实和知识,这使得读者需要做很多事情.这个问题旨在询问具体方案的具体答案.
有没有办法core.autocrlf=input从内部强制执行.gitattributes以便在整个同事中传播策略?
在细节我要的是转换为lf上添加并保留as is在结帐.
问题在于既没有text也eol没有我想要的东西,.gitattributes因为它eol有3个可接受的值:
lfcrlfnative理想情况下,我希望我的.gitattributes文件看起来像这样:
* text eol=asis
我正在努力正确地合并到分支机构.分支似乎有行结束问题,因为当我打开Visual Studio中的冲突窗口时,它显示0个冲突和0个不同文件之间的差异.
我在两个分支上添加了一个gitattributes文件,它在两个存储库中查找并执行了存储库刷新.
当我刷新两个存储库时,没有提交更改,即使指令指出将提交更改(实际上更改来自EOL转换).
这是我的gitattributes
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
Run Code Online (Sandbox Code Playgroud)
我也检查过,我的全局core.autocrlf等于true(因为我们所有的开发人员都在Windows上使用Visual Studio)
问题是,当我继续做以上操作以期在两个分支中修复和规范化这些分支时,我最终会遇到比以前更多的冲突 - 所有这些都是由于行结束:
.git/config文件(不包括分支引用)
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = …Run Code Online (Sandbox Code Playgroud) 我是git的新手,我之前使用的是svn,我们遇到了由行尾(CRLF和LF)引起的问题.现在我担心这也会在git中再次发生,我担心的原因是不同的开发人员使用不同的操作系统.我正在使用带有Linux VM的Windows系统作为我的开发环境.所以项目代码在linux上,我在windows上编辑它.在vm我有git我用来推拉等我应该启用autocrlf为真吗?它会阻止我的问题吗?但我看到一些商品我应该只在windows中设置autocrlf = true.我希望有人可以提供有用的建议:-)
提前致谢.
当我尝试推送到 GitHub 时,每次我都会收到这样的警告:
warning: LF will be replaced by CRLF in app/bingey-api/models/user.js.
The file will have its original line endings in your working directory
Run Code Online (Sandbox Code Playgroud)
即使我在这些地方将行结尾设置更改为“/n”:
用户 -> 文本编辑器 -> 文件 -> Eol:
另外,工作区 -> 文本编辑器 -> 文件 -> Eol:
我的 ESLint 选项文件也有默认行结尾“\n”:
Prettier 也配置为默认的“\n”结束符:
这很奇怪,也许有人知道我还应该在哪里更改设置?谢谢。
我的问题可能来自于对 Git 某些方面的误解。当我因 Windows 机器上的更改而在 Mac 上将 CRLF 更改为 LF 行结尾时,我想到了这个问题。
1) 我首先在 OSX 上初始化一个新存储库,并将所有文件放入受 CRLF 行结尾影响的文件中。
2)第一次提交,由于设置了 core.autocrlf = input ,git 自动将行结尾更改为 LF
我的本地工作树中的文件仍然具有 CRLF 行结尾,但这里也提供了解决方案(How to Normalizeworking tree lineendings in Git?):
删除Index中的文件,并根据上次commit恢复索引+工作树:
git rm --cached -r .
git reset --hard
Run Code Online (Sandbox Code Playgroud)
现在出现了混乱:我的第一个提交 1) 包含转换后的 LF 行结尾,而我的本地树和索引则不包含。因此,我的期望是 git 应该显示工作树/索引和存储库之间的差异。但
git diff HEAD
git diff --chached
Run Code Online (Sandbox Code Playgroud)
没有列出任何更改?
我正在阅读有关解决混合行结尾问题的git 文档.gitattributes,并发现有两个类似的设置。
自动CRLF:
行尾转换 虽然 Git 通常不考虑文件内容,但它可以配置为将存储库中的行尾规范化为 LF,并且可以选择在签出文件时将它们转换为 CRLF。
如果您只想在您的工作目录中使用 CRLF 行结尾而不管您使用的是哪个存储库,您可以设置配置变量“core.autocrlf”而不使用任何属性。
[core] autocrlf = true 这不会强制文本文件的规范化,但确实确保您引入存储库的文本文件在添加时将其行尾规范化为 LF,并且已在存储库中规范化的文件保留归一化。
和停产:
此属性设置要在工作目录中使用的特定行结束样式。它可以在没有任何内容检查的情况下进行行尾转换,有效地设置文本属性。
设置为字符串值“crlf” 此设置强制 Git 在签入时对此文件的行尾进行规范化,并在签出文件时将其转换为 CRLF。
设置为字符串值“lf” 此设置强制 Git 在签入时将行尾规范化为 LF,并防止在签出文件时转换为 CRLF。
与 crlf 属性的 向后兼容性 为了向后兼容, crlf 属性解释如下:
文本
-crlf -text
crlf=输入 eol=lf
似乎两者都在做同样的事情,但有一些关于compatibility. 这是否意味着,这autocrlf已被弃用,而新口味是eol什么?我目前有一个包含多个损坏文件的存储库,我想将其转换为crlf表示形式。你会看到文档让我们困惑而不是澄清事情。
在这种情况下我应该申请什么?
git ×10
eol ×2
github ×2
line-endings ×2
diff ×1
end-of-line ×1
formatting ×1
git-diff ×1
githooks ×1
gitlab ×1
newline ×1
windows ×1