使用bash在Windows XP计算机上运行git。 我从SVN导出了我的项目,然后克隆了一个裸存储库。
然后我将导出粘贴到裸存储库目录中,并执行了:
然后我得到一条消息列表:
LF will be replaced by CRLF
这种转变的后果是什么? 这是Visual Studio中的.NET解决方案。
-
@apphacker因为标准化行结尾比在分析两个文件时自己更改它们更不烦人。 (当然,如果你不同意,那么你可以关闭core.autocrlf功能)。
-
为什么线路末端会有所不同,除非触及整条线路
-
我经常触及许多行,因为我正在尝试不同的想法,添加跟踪语句以查看它们是如何工作的等等。然后我可能只想将更改提交到两行或三行并让git完全忽略其他行,因为我他们把它们放回原处我发现它们(或者我认为)。
-
关于同一问题的上游讨论:kerneltrap.org/mailarchive/git/2008/4/16/1450834/thread
-
@MatrixFrog:你的编辑器似乎坏了,无法自动检测行结尾。这是什么?我在混合项目上工作,必须在同一个仓库中有一些LF文件和一些其他CRLF文件。任何现代编辑都不是问题。让版本控制(或文件传输)混乱使用行结尾来解决编辑器限制是最糟糕的想法 - 从下面的解释仅仅是显而易见的。
-
我所知道的唯一现代编辑器是错误的东西是Visual Studio。 Visual Studio将很乐意打开一个带有LF行结尾的文件。如果然后插入新行,它将插入CRLF,并保存混合行结尾。微软拒绝解决这个问题,这对于一个非常好的IDE来说是一个非常大的缺陷: - (
-
类似的问题stackoverflow.com/questions/9976986/…有关如何在保留文件的同时重置工作副本上的git索引和换行符处理的详细信息。
这些消息是由于Windows上core.autocrlf的默认值不正确造成的。
autocrlf的概念是透明地处理行结尾转换。它确实如此!
坏消息:需要手动配置值。
好消息:每个git安装应该只进行一次(每个项目设置也可以)。
autocrlf的工作原理:
1 2 3 4 5 6 7
| core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repo repo repo
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \ |
这里crlf = win-style end-of-line marker,lf = unix-style(和mac osx)。
(pre-osx cr未受上述三个选项中的任何一个影响)
该警告何时显示(在Windows下)
     - autocrlf = true如果您的某个文件中包含unix样式lf(= RARELY),
     - autocrlf = input如果您的某个文件中有win-style crlf(=几乎总是如此),
     - autocrlf = false - 绝对不会!
这个警告意味着什么
警告"LF将被CRLF替换"表示你(具有autocrlf = true)将在提交 - 结账周期后丢失你的unix风格的LF(它将被windows风格的CRLF取代)。 Git不希望你在windows下使用unix风格的LF。
警告"CRLF将被LF替换"表示您(具有autocrlf = input)将在提交结帐周期后丢失您的Windows样式的CRLF(它将被unix样式的LF替换)。不要在Windows下使用input。
另一种显示autocrlf如何工作的方法
1 2 3
| 1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x |
其中x是CRLF(windows风格)或LF(unix风格),箭头代表
1
| file to commit -> repository -> checked out file |
怎么修
在git安装期间选择core.autocrlf的默认值并存储在系统范围的gitconfig(%ProgramFiles(x86)%\git\etc\gitconfig)中。还有(按以下顺序级联):
   - 位于~/.gitconfig的"global"(每用户)gitconfig,另一个
   - 位于$XDG_CONFIG_HOME/git/config或$HOME/.config/git/config的"全局"(每用户)gitconfig和
   - 工作目录中.git/config的"本地"(per-repo)gitconfig。
因此,在工作目录中写git config core.autocrlf以检查当前使用的值和
   - 将autocrlf=false添加到系统范围的gitconfig        #per-system解决方案
   - git config --global core.autocrlf false           #per-user解决方案
   - git config --local core.autocrlf false             #per-project解决方案
警告
- git config设置可以覆盖git config设置。
- 只有在添加新文件时才会发生crlf -> lf转换,回购中已存在的crlf文件不受影响。
道德(适用于Windows):
     - 如果您计划在Unix下使用此项目(并且不愿意将编辑器/ IDE配置为使用unix行结尾),请使用core.autocrlf = true,
     - 如果您打算仅在Windows下使用此项目(或者您已将编辑器/ IDE配置为使用unix行结尾),请使用core.autocrlf = false,
     - 永远不要使用core.autocrlf = input,除非您有充分的理由(例如,如果您在Windows下使用unix实用程序或遇到makefile问题),
PS安装适用于Windows的git时要选择什么?
如果您不打算在Unix下使用任何项目,请不要同意默认的第一个选项。选择第三个(Checkout as-is,commit as-is)。你不会看到这条消息。永远。
PPS我的个人偏好是将编辑器/ IDE配置为使用Unix样式的结尾,并将core.autocrlf设置为false。
-
因为我花了这么多时间,我希望有一个core.crlf = rackoff ;-)
-
我重新构建了内容,也许这样会更容易阅读
-
对不起,我希望我的评论不会被视为对你答案的批评。在找到这个答案之前,我的意思是"达到这个目标"。
-
哦,没关系:)无论如何,你的评论促使我改进我的答案。
-
为什么不选择将换行符转换为正在检出的平台?
-
这太令人困惑了。我在编辑器中设置了LF。所有的repo代码都使用LF。 global autocrlf设置为false,我的home dir中的核心gitconfig设置为false。但我仍然将消息LF替换为CRLF
-
你检查了本地(每个项目)autocrlf吗?
-
git config core.autocrlf = false给出错误。它应该是:git config core.autocrlf false(空格而不是'=')
-
确实如此!固定,谢谢。
-
如果您已将编辑器配置为使用Unix样式结尾,为什么不将core.autocrlf设置为输入?根据我从您的答案中收集的内容,将其设置为输入可确保存储库和工作目录始终具有unix样式的行结尾。你为什么不想在Windows中使用它?
-
这是因为我可能获得的bizzare错误(例如无法删除worktree更改)和不可能在一个项目中使用两种类型的行结尾(例如.bat和.sh文件)超过了我无法得到的明显警告的存在我正常的工作流程
-
core.autocrlf = true似乎是要走的路。无论如何转向警告信息:LF将被......中的CRLF取代?
-
作为一种解决方法,我建议克隆存储库。这将取代CRLF的所有LF,除非编辑再次添加警告,否则警告不会显示。
-
虽然有点奇怪。我在全局和本地配置中将core.autocrlf设置为false,但在尝试提交时仍然会收到警告。 git版本是2.7.0
-
弄清楚:.gitattributes可以覆盖配置设置。
-
@digory doo谢谢,更新了答案
-
我同意Hubro:很好的解释,但是我不明白为什么当IDE配置为使用LF时,正确的结果不会"设置为input,永远不会使用false"。我不明白,在你概述的所有内容之后,你可以得出结论,永远不要使用input。
-
@hheimbuerger LF是unix行结尾。 input仅将CRLF转换为LF,但不是相反。如果您的行结尾已经是LF,那么使用input是没有利益的。
-
@AntonyHatchkins利润是input将转换我的行结尾,如果我偶然在某处有一个CRLF(也许你曾经在记事本中快速编辑而不是你配置得很好的IDE!),同时不会影响所有有意的LF。使用false的缺点是,如果我有意外的CRLF,我可能会意外地将其提交给回购。 input会阻止这种情况!那么input> false,不是吗?
-
@hheimbuerger我?记事本?从来没有:)我只使用记事本来删除剪贴板中的非文本内容(例如超链接),方法是粘贴然后从记事本中复制。
-
@hheimbuerger实际上错误的行结尾很少是麻烦。因此,对于我个人而言,在大多数情况下,此消息的烦恼超过了使用它的利润。但是在一个不太可能发生故障的情况下(例如linux makefile),在这个问题上依赖vcs是一个坏习惯。更好的方法是在生命周期中配置编辑器(您可能使用的所有编辑器)一次,以使用您需要的线端。
-
@AntonyHatchkins这并没有解释为什么false优于input。两者都是你的VCS的配置,所以说"依赖VCS是一个坏习惯"是一个奇怪的论据,使得讨论完全与VCS配置有关。即使你认为你不应该依赖它,你仍然需要选择其中之一。
-
@hheimbuerger看起来好像你不愿意听我说的话。"假"更好,因为它没有显示烦人的消息。仅依靠vcs来解决这个问题。这是您个人选择使用的选项。我说明了我的理由。你可以自由拥有你的。
-
这是一个例子。在我正在使用的项目中有很多html文件(除了我的python文件)。负责这些文件的人正在使用Windows,我通常在Linux上工作,但有时也在Windows上工作。即使它们与那些html文件无关,input选项也会在每次提交更改时将其crlf转换为lf。并且它会将所有文件标记为历史记录中的更改以及打破其正常工作流程。将更改自动注入您不负责的文件是一种不好的做法。
-
感谢@AntonyHatchkins的解释!
-
如果我将本地版本存储在基于云的文件夹(如DropBox)中并在早上从Linux编辑它们并在下午从Windows编辑它会怎么样? autocrlf在晚上提交和推送代码的最佳价值是什么?
-
@bruno最好设置你的编辑器在windows中使用linux行结尾并设置autocrlf=false
-
@AntonyHatchkins我可以告诉你,你从未尝试过在记事本中打开和LF文件。阅读是不可能的,更不用说进行编辑了。但是,如果您的编辑感到困惑,可能会错误地发生。顺便提一下,使用false的另一个原因是你的团队在Windows环境中使用subversion,但你想使用Git。在这种情况下,您需要在CRLF中提交,因此Subversion(和团队成员)会看到正确的行结尾。
-
@jpaugh是的,我在记事本中打了几次LF文件 - 这是错误的。我无法使用记事本对任何有用的东西进行成像。我只用它来从剪贴板中剥离格式:)是的,这是使用false的一个很好的例子
-
这是我到目前为止所读到的最佳答案。
Git有三种处理行结尾的模式:
1 2
| $ git config core.autocrlf
# that command will print"true" or"false" or"input" |
您可以通过在上面的命令行中添加true或false的附加参数来设置要使用的模式。
如果将core.autocrlf设置为true,则意味着每次将文件添加到git repo中git认为是文本文件时,它都会将所有CRLF行结尾转换为LF,然后再将其存储在提交中。每当你git checkout某事时,所有文本文件都会自动将其LF行结尾转换为CRLF结尾。这允许跨平台开发项目,这些平台使用不同的行结束样式而不提交非常嘈杂,因为每个编辑器都会更改行结束样式,因为行结束样式始终是LF。
这个方便转换的副作用,这就是你所看到的警告,就是如果你最初创作的文本文件有LF结尾而不是CRLF,它将像往常一样用LF存储,但是当检查时以后它会有CRLF结局。对于普通文本文件,这通常很好。在这种情况下,警告是"为了您的信息",但是如果git错误地将二进制文件评估为文本文件,则这是一个重要的警告,因为git会破坏您的二进制文件。
如果core.autocrlf设置为false,则不会执行行结束转换,因此将按原样检入文本文件。这通常可以正常工作,只要所有开发人员都在Linux上或在Windows上都是如此。但根据我的经验,我仍然倾向于获得具有混合行结尾的文本文件,最终导致问题。
我个人的偏好是作为Windows开发人员打开设置。
有关包含"输入"值的更新信息,请参阅http://kernel.org/pub/software/scm/git/docs/git-config.html。
-
如上所述(stackoverflow.com/questions/1249932/…),我会恭敬地不同意并将该设置保留为OFF(并使用Notepad ++或任何其他能够处理的编辑器 - 并保持原样 - 无论结束线如何它找到的角色)
-
我喜欢这个答案,并且更喜欢将autocrlf设置为true。作为替代方案,有没有办法自动终止警告消息?
-
通过与core.eol设置的比较来增加这个写得很好的答案,或许与.gitattributes配置一致,这将是很好的。我一直试图通过实验找出差异和重叠,这非常令人困惑。
-
正如seh指出的那样,core.autocrlf不是唯一可以导致git改变行结尾的东西。除此之外,运行"git help attributes"并搜索"行尾规范化";该文档非常详尽,但您可能需要补充谷歌搜索才能理解这一切。
-
@seh,我不熟悉core.eol和.gitattributes,但您可以选择编辑答案并等待主持人批准。如果这是社区wiki会更合适
-
要获得更持久的解决方案,请将.gitconfig更改为:[core] autocrlf = false
-
git man"这个变量可以设置为输入,在这种情况下不执行输出转换。"
-
Linux开发人员希望将其设置为false或input。最好由Windows开发人员设置,因为现代IDE可以处理Unix行结尾。
-
我认为,如果您是PHP开发人员并希望您的代码符合PSR-2,则必须使用LF行结尾。我在Windows上处理PHP并在我了解它之后立即设置该功能,因为我的编辑器能够处理LF行结尾。
-
所以基本上,根据接受的答案,消息"LF将被CRLF取代"意味着"下次这个文件将被结账,LF将被CRLF取代",对吧?
-
是否有任何简单的方法来压制警告?我希望它是真实的,并知道我已将其设置为true。我不需要一直看到所有警告......没关系,真的......:p
-
要在系统范围内更改设置:git config --global core.autocrlf true/false/input
-
这对我不起作用,但是这个可以:stackoverflow.com/a/18724554/1071486
-
为什么消息会说LF - > CRLF转换?由于在windows环境下工作,在将文件添加到repo时是不是转换CRLF - > LF?
-
要打印autocrlf的值,请执行:git config --list
-
Linux用户可以通过使用Kate来遵循VonC的建议。 Tools->End Of Line->Unix
-
@Krisc迟到的答案,但是仅仅抑制警告的方法是将core.safecrlf设置为false:stackoverflow.com/a/14640908/567000
-
一个重要的说明是即使autocrlf=true,在添加/提交期间,只有新文件从CRLF转换为LF。即使修改和提交,现有CRLF文件也将保留CRLF。
-
@wisbucky我认为这与我的经历不符。但是最近我已经痴迷地确保我的所有回购中都有.gitattributes的.gitattributes文件,所以我猜我没有一个行为有点模糊。
如果您已经签出了代码,则文件已经编入索引。更改您的git设置后,您应该刷新索引
并重写git索引
https://help.github.com/articles/dealing-with-line-endings/#refreshing-a-repository-after-changing-line-endings
-
感谢您使用一种简单,跨平台,清晰的FIX方式,而不是关于配置含义的大量讨论。
-
如果git reset - hard我的本地更改可能会丢失吗?我只是按照上面的所有评论
-
是的,您的本地更改将丢失。 --hard参数重置索引和工作树,因此将丢弃对跟踪文件的任何更改。 git-scm.com/docs/git-reset
-
@FreddySidauruk只要在Git中使用--hard或--force标志,就应该仔细检查。
-
git rm --cached -r .的含义是什么?为什么git reset --hard还不够?
-
@gavenkoa rm以递归方式删除所有跟踪的文件。你是对的,可能不需要它
-
@gavenkoa @max您需要git rm --cached -r .如果在更改core.autocrlf设置后执行git reset --hard,它将不会重新转换行结尾。你需要清理git索引。
-
@ user2630328 - 感谢您 - 所有人都应该注意到所提供的链接已经改变了方向;新方向没有任何意义,也不一致。如果您的目标是使现有的本地存储库刷新索引和工作副本,则此答案很有效。您希望这样,以便所有本地文件和缓存都反映新的行结束策略。
-
这个! (在你设置core.autocrlf之后)。如果您使用的是SourceTree,您可能还需要确保告诉它使用System Git而不是Embedded Git
1
| git config core.autocrlf false |
-
喜欢上面复杂的解释,但这可以完成工作。
-
确保在存储库根目录中运行此命令
-
这种轻浮对堆栈流不利
-
我不明白这是如何有用的。一半的人要求autocrlf才能使其正常工作,另一半需要它是假的/输入。那么,他们应该把这些一次性的答案随机地扔到他们的控制台墙上,直到有什么东西坚持并且有点"有效"?这没有效果。
-
我收到一个错误"致命:不在git目录中"。我试图cd到C: Program Files Git和C: Program Files Git bin
-
@mbb设置autcrlf到false只是将问题解决给项目的每个用户。
-
@pixelwiz:此命令仅为项目设置属性(因此您需要在git存储库下运行它)。如果要全局设置,请改用git config --global core.autocrlf false。
unix2dos和dos2unix都可以在带有gitbash的窗口中使用。您可以使用以下命令执行UNIX(LF) - > DOS(CRLF)转换。因此,你不会收到警告。
要么
但是,不要在任何现有的CRLF文件上运行此命令,那么每隔一行就会得到空的换行符。
dos2unix -D filename不适用于所有操作系统。请检查此链接是否兼容。
如果由于某种原因需要强制执行命令,请使用--force。如果它表示无效,则使用-f。
-
它有什么作用?
-
以下是帮助选项所说的内容:` - udd,-D执行UNIX - > DOS转换
-
@LarryBattle u2d和d2u与我相信的不一样。
-
@Rifat我很困惑。您的评论说dos2unix -D会将Windows行结尾转换为linux行结尾。是不是与DOS(CRLF) - > UNIX(LF)转换相同。但是dos2unix -h表示-D将执行UNIX(LF) - > DOS(CRLF)转换。 dos2unix更多信息:gopherproxy.meulie.net/sdf.org/0/users/pmyshkin/dos2unix
-
@LarryBattle是的,你是对的-D。实际上,当我是Windows用户时,我发布了答案。而且,一年多以后,当我是一名Mac用户时,我发表了评论:D BTW,感谢您的澄清。
-
@LarryBattle我删除了我的评论,因为它可能会误导人们。
-
这对我有用。我正在使用Cygwin,它似乎不支持-D开关 - 但是有"unix2dos"命令,它执行相同的操作。我希望我知道导致问题的原因 - 我有core.autocrlf = false,它是一个仅限Windows的存储库。
-
使用评论中的信息可以显着改善这个答案
-
在我的Git Bash控制台中,dos2unix -D filename仅适用于ASCII文件。如果文件是UTF-8并且已经是DOS格式(CRLF),那么它将被转换为... CRCRLF(!),它将在每隔一行看起来像空的换行符。截至Msysgit 1.7.11。因人而异。
我认为@ Basiloungas的答案很接近但过时了(至少在Mac上)。
打开?/ .gitconfig文件并将safecrlf设置为false
1 2 3
| [core]
autocrlf = input
safecrlf = false |
那个*会让它忽略行char的结尾(无论如何都为我工作)。
-
它应该是safecrlf(带'f')
-
只有我尝试使用Mac的解决方案。谢谢 !
-
谢谢!这是唯一对我有用的解决方案! (Linux mint 18.1)
在谈论这个主题时,通常会提到GitHub关于行结尾的文章。
我使用经常推荐的core.autocrlf配置设置的个人经验非常复杂。
我正在使用Windows与Cygwin,在不同时间处理Windows和UNIX项目。甚至我的Windows项目有时也使用bash shell脚本,这需要UNIX(LF)行结尾。
使用GitHub推荐的Windows core.autocrlf设置,如果我查看一个UNIX项目(它在Cygwin上完美运行 - 或者我可能参与我在Linux服务器上使用的项目),则会检查文本文件Windows(CRLF)行结尾,造成问题。
基本上,对于像我这样的混合环境,将global core.autocrlf设置为任何选项在某些情况下将无法正常工作。此选项可能在本地(存储库)git配置上设置,但即使这对于包含Windows和UNIX相关内容的项目也不够好(例如,我有一个带有一些bash实用程序脚本的Windows项目)。
我发现的最佳选择是创建per-repository .gitattributes文件。 GitHub文章提到了它。
该文章的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary |
在我项目的一个存储库中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| * text=auto
*.txt text eol=lf
*.xml text eol=lf
*.json text eol=lf
*.properties text eol=lf
*.conf text eol=lf
*.awk text eol=lf
*.sed text eol=lf
*.sh text eol=lf
*.png binary
*.jpg binary
*.p12 binary |
这需要设置一些东西,但是每个项目都要做一次,任何操作系统上的任何贡献者在使用这个项目时应该没有线路结尾的麻烦。
-
现在运行到此,尝试使用Cygwin脚本和其他基本文本文件管理repo。你如何处理没有扩展名的文件(例如"fstab","sshd_config")?链接的文章不包括该场景。
-
@MikeLoux试试这个方法:stackoverflow.com/a/44806034/4377192
-
当我回到办公室时(本周度假),我会试一试。谢谢你的帮助!
-
这个答案应该更高,并且是一个很好的一般指导如何设置,特别是如果处理具有Windows和Linux部分的代码库。谢谢!
-
我发现text=false eol=false与binary的工作方式有些相似。听起来不错吗?指出"我知道这些是文本文件,但我不希望它们被标准化"可能是有用的
在vim中打开文件(例如::e YOURFILE ENTER),然后
1 2
| :set noendofline binary
:wq |
-
只需使用vim进行编辑,就可以保持所有行的完整性。
-
我一直在使用一些Cocoapods文件。以上固定了大部分;其余的,s / {control-v} {control-m} //做了伎俩。这两个控制代码一起构成OS X中我们这些人经常在Windows文件中看到的^ M.
我也有这个问题。
SVN不进行任何行结束转换,因此提交的文件的CRLF行结尾不变。如果你然后使用git-svn将项目放入git中,那么CRLF结尾会持续存在于git存储库中,这不是git期望找到的状态 - 默认情况下只有unix / linux(LF)行结束入住。
当您检查Windows上的文件时,autocrlf转换使文件保持不变(因为它们已经具有当前平台的正确结尾),但是决定是否与已签入文件存在差异的过程执行反向转换在比较之前,导致将其认为是已检出文件中的LF与存储库中的意外CRLF进行比较。
据我所知,您的选择是:
在不使用git-svn的情况下将代码重新导入新的git存储库,这意味着在最终的git commit中转换行结尾--all
将autocrlf设置为false,并忽略行结尾不是git首选样式的事实
使用autocrlf关闭文件,修复所有行结尾,重新检查所有内容,然后重新打开。
重写存储库的历史记录,以便原始提交不再包含git不期望的CRLF。 (关于历史改写的常见警告适用)
脚注:如果你选择#2选项,那么我的经验是一些辅助工具(rebase,patch等)不能处理CRLF文件,你迟早会遇到混合了CRLF和LF的文件(不一致的行)结局)。我知道无法充分发挥两者的优势。
-
我认为有一个第四个选项可以添加到您的列表中,假设有人能够重写历史记录:您可以使用git-svn最初创建的git repo,并将其历史记录重写为不再具有CRLF换行符。这将使您在整个svn历史中向后延伸的标准化换行符。用户keo在stackoverflow.com/a/1060828/64257上提供了一个解决方案。
-
添加。很多
-
关于你的脚注:rebase对CRLF没有任何问题。我所知道的唯一问题是标准的git合并工具将仅使用LF插入其冲突标记("<<<<<<",">>>>>>"等),因此具有冲突标记的文件将有混合的行结尾。但是,一旦你删除标记,一切都很好。
-
git的处理可能在过去的3年里发生了变化,这是我当时对它的直接体验,因此我没有必要重新审视这一特定问题。因人而异。
-
@sleske首发git 2.8,合并标记将不再引入混合行结尾。请参阅stackoverflow.com/a/35474954/6309
-
@VonC:太酷了。很高兴知道我需要在Windows上工作的时间。
从?/ .gitattributes文件中删除以下内容
* text=auto
将阻止git在第一位检查行结尾。
-
不正确。该行(如果存在)将覆盖core.autocrlf的配置。如果将其设置为"true",则不,删除该行不会阻止git检查行结尾。
-
尽管如此,如果core.autocrlf设置为false,如果没有删除这个,将autocrlf设置为false将无济于事,所以这个帮助了我(但是它本身还不够)。
-
提升这个!!虽然"将阻止git检查"部分在技术上并不正确,但这是唯一一个特别提及.gitattributes中text=设置的答案(如果存在,将成为阻止程序)。所以其他答案都不完整。我疯狂地试图找出为什么我的文件继续显示为"已修改",无论我多少次更改autocrlf和safecrlf设置&amp;签出&amp;清除了git缓存&amp;硬复位。
它应该是:
warning: (If you check it out/or clone to another folder with your current core.autocrlf being true,)LF will be replaced by CRLF
The file will have its original line endings in your (current) working directory.
这张照片应该解释它的含义。
-
它还意味着发送到Subversion的内容(如果你这样做)将进行转换。
How to make Git ignore different line endings
1
| echo"* -crlf"> .gitattributes |
在单独的提交中执行此操作,或者当您进行单个更改时,git可能仍会将整个文件视为已修改(取决于您是否更改了autocrlf选项)
这个确实有效。 Git将尊重混合行结束项目中的行结尾,而不是警告你。
-
当您想要在CRLF和LF之间进行转换时,这尤其有用,但是您有一些必须保持不变的.sh文件。我一直使用*.sh -crlf ......
我对Windows上的git知之甚少,但......
在我看来,git正在转换返回格式以匹配正在运行的平台(Windows)。 CRLF是Windows中的默认返回格式,而LF是大多数其他操作系统的默认返回格式。
有可能,当代码移动到另一个系统时,返回格式将被正确调整。我还认为git足够聪明,可以保持二进制文件的完整性,而不是试图将LF转换为CRLF,例如JPEG。
总之,您可能不需要为此转换烦恼太多。但是,如果你将项目归档为tarball,那么编码人员可能会喜欢使用LF线路终结器而不是CRLF。根据您的关注程度(并且取决于您不使用记事本),如果可以,您可能需要设置git以使用LF返回:)
附录:CR是ASCII码13,LF是ASCII码10.因此,CRLF是两个字节,而LF是一个。
-
由于似乎没有人说过,CR代表"回车"而LF代表"换行"。作为第二个注释,许多Windows编辑器将默默地更改文本文件,其中LF字符表示换行符,而不是CRLF字符对。编辑的用户甚至不会收到警告,但Git会看到更改。
-
@ user2548343:谢谢你的加入!
OP的问题是与Windows相关的,如果没有进入目录,甚至在Notepad ++中运行文件,我无法使用其他人,因为管理员无法正常工作。
所以不得不走这条路:
1
| C:\Program Files (x86)\Git\etc>git config --global core.autocrlf false |
确保您已安装最新的git。
我使用git(版本2.7.1),如上所述git config core.autocrlf false,但它没有用。
然后它在升级git时从现在起作用(从2.7.1到2.20.1)。
-
我想你的意思是你有git 2.17.1。我遇到了同样的问题并进行了更新,这也解决了这个问题。很高兴我看到了你的答案!
在Notepad ++中打开文件。
转到编辑/ EOL转换。
单击"Windows格式"。
保存文件。
-
还可以尝试使用git config --global core.autocrlf false来防止Git在提交时将行结尾设置为Unix。跟进git config core.autocrlf检查它确实设置为false。
许多文本编辑器允许您更改为LF,请参阅下面的Atom说明。简单明了。
点击右下角的CRLF:
在顶部的下拉列表中选择LF:
在GNU / Linux shell提示符下,dos2unix&amp; unix2dos命令允许您轻松转换/格式化来自MS Windows的文件
在两个不同的操作系统(Linux和Windows)中使用"代码"时,CRLF可能会导致一些问题。我的python脚本是用Linux docker容器编写的,然后使用Windows git-bash推送。它给了我一个警告,LF将被CRLF取代。我没有多想,但是当我稍后开始编写脚本时,它说/usr/bin/env: 'python
': No such file or directory。现在你的分支是
。 Windows使用"CR" - 回车 - 在' n'之上作为换行符 -
。这是你可能需要考虑的事情。