使用bash在Windows XP计算机上运行git.我从SVN导出了我的项目,然后克隆了一个裸存储库.
然后我将导出粘贴到裸存储库目录中,并执行了:
git add -A
Run Code Online (Sandbox Code Playgroud)
然后我得到一条消息列表:
LF将由CRLF取代
这种转变的后果是什么?这是Visual Studio中的.NET解决方案.
我想删除对我的工作副本的所有更改.
运行git status显示修改的文件.
我没做什么似乎删除了这些修改.
例如:
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git checkout -- Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
rbellamy@PROMETHEUS …Run Code Online (Sandbox Code Playgroud) 我在Stack Overflow上阅读了很多不同的问题和答案,以及关于core.autocrlf设置如何工作的git文档.
这是我对以下内容的理解:
Unix和Mac OSX(OSX之前使用CR)客户端使用LF行结尾.
Windows客户端使用CRLF行结尾.
当在客户端上将core.autocrlf设置为true时,git存储库始终以LF行结束格式存储文件,并且客户端(即Windows)在签出/提交时来回转换客户端文件中的行结尾-LF行结尾,无论行结尾文件在客户端上的格式是什么(这与Tim Clem的定义不一致 - 请参阅下面的更新).
这是一个矩阵,试图为带有问号的core.autocrlf的'input'和'false'设置记录相同的内容,我不确定行结束转换行为.
我的问题是:
我将从答案中更新问号,因为似乎已形成共识.
core.autocrlf value
true input false
----------------------------------------------------------
commit | convert ? ?
new | to LF (convert to LF?) (no conversion?)
commit | convert to ? no
existing | LF (convert to LF?) conversion
checkout | convert to ? no
existing | CRLF (no conversion?) conversion
我并不是真的在寻找各种设置的利弊意见.我只是在寻找数据,这清楚地说明了如何期望git能够在三种设置中运行.
-
2012年4月17日更新:阅读了由JJD在评论中链接的Tim Clem的文章后,我修改了上表中"未知"值中的一些值,并更改了"checkout existing | true to conversion"到CRLF而不是转换为客户".以下是他给出的定义,这些定义比我在其他地方看到的更清楚:
core.autocrlf …
我不了解有关的git的CRLF设置的复杂性:core.autocrlf,core.safecrlf
我正在团队中开发一个跨平台的项目,并希望Windows和Linux开发人员能够在没有git标记文件的情况下一起工作,因为行结束样式.
各种设置意味着什么?选择任何选项会产生什么后果?对我的案子来说,最好的解决方案是什么?
是的,我知道这个问题,那里的答案没有洞察力,因此没有帮助.
正如人们可以从 其他 帖子中收集的那样,Git的终端规范化有其优点和缺点.我有一个特定的Windows项目,我认为最好的办法是完全禁用行尾规范化.也就是说,我希望保留所有换行符(大部分都是CRLF完整的),而不是让git将它们规范化为 - LF仅在幕后,我希望该更改能够影响所有计算机上存储库的所有克隆.问题是最有效的方法.
大多数关于Git行尾规范化的讨论都是根据core.autocrlf,我可以通过设置来实现我的目标core.autocrlf=false.但是,这是一个git-config设置,我相信必须在每台机器上分别设置它.如果为true,那似乎容易出错,特别是因为msysgit安装程序会将其引导到设置中core.autocrlf=true.
我的许多应用程序用户配置文件都保存在git存储库中,以便在多台计算机和多个平台之间轻松共享.这些配置文件.gitconfig中包含以下用于处理回车换行符的设置
[core]
autocrlf = true
safecrlf = false
Run Code Online (Sandbox Code Playgroud)
这些设置也应用于GNU/Linux平台,这会导致模糊的错误.
在配置文件中处理这些特定于平台的差异有哪些最佳实践?
我意识到这个问题可以通过为每个平台建立一个分支并将主要内容保持在主服务器并在主服务器向前移动时与平台分支合并来解决.我想知道这个问题是否有更简单的解决方案?
我每天都使用Windows,Mac OS X和Linux.我在所有这些环境中使用git,从具有不同选择的人们使用的repos中提取行结尾.
在我的情况下是否有建立core.autocrlf的明确建议?
我正在使用Windows.暂存文件时,我收到此错误.
Updating the Git index failed. A rescan will be automatically started to resynchronize git-gui.
后跟一个已从LF转换为CRLF的文件列表
在用Git使用跨平台阅读CRLF/LF问题之后,我或多或少地了解了发生了什么,我正在尝试确定哪种autocrlf设置最适合我,但我不明白为什么Git说更新索引失败.我的理解是它已经转换了EOF,所以它的问题是什么,为什么它告诉我更新索引失败了.我是否需要修复某些内容(除了选择适当的autocrlf设置)或者我可以继续
然后,我有两个选项继续和解锁索引,这些是什么意思,什么是最好的行动方案.
在尝试为开发人员标准化平台时,我的一个需求是提交,.git/config以便每个人都有相同的CRLF配置,而不会忘记手动设置它.
我该如何设置?
我对所有这些消极情绪感到担忧autocrlf.如果不起作用,为什么不删除此功能?要么这个功能的制作者被误解,要么他们用它做了一个失败的实验,它应该被删除,以阻止更多的人浪费他们的时间(阅读模糊的手册页,提问,回答这些问题的人等).
在Windows中使用Git Shell创建diff补丁(当使用GitHub for Windows时),根据Notepad ++ ,补丁的字符编码将是UCS-2 Little Endian(参见下面的屏幕截图).
如何更改此行为,并强制git使用ANSI或UTF-8创建没有BOM字符编码的补丁?
它会导致问题,因为无法应用UCS-2 Little Endian编码补丁,我必须手动将其转换为ANSI.如果我不这样做,我会收到"致命:无法识别的输入"错误.
从那时起,我也意识到我必须在Notepad ++(编辑> EOL转换> UNIX)中手动将EOL从Windows格式(\r\n)转换为UNIX(\n).如果我不这样做,我会得到"尾随空格"错误(即使修剪了所有空格:"TextFX">"TextFX Edit">"Trim Trailing Spaces").
那么,我需要为要应用的补丁执行以下步骤:
请看一下这个截图:
git ×10
newline ×4
windows ×2
encoding ×1
git-config ×1
git-status ×1
github ×1
line-endings ×1
linux ×1
powershell ×1
revert ×1
working-copy ×1