使用bash在Windows XP计算机上运行git.我从SVN导出了我的项目,然后克隆了一个裸存储库.
然后我将导出粘贴到裸存储库目录中,并执行了:
git add -A
Run Code Online (Sandbox Code Playgroud)
然后我得到一条消息列表:
LF将由CRLF取代
这种转变的后果是什么?这是Visual Studio中的.NET解决方案.
我想强制git在Windows下检出文件LF而不是CR+LF.我检查了两个配置选项,但我无法找到正确的设置组合.
我希望它将所有文件转换为LF并保留LF文件.
备注:我使用autocrlf = input但是这只是在你提交时修复文件.我想强制它让他们使用LF.
可能我不是那么清楚:存储库已经在使用LF但是使用msysgit检出的文件正在使用CR+LF,我想强制msysgit使用它们LF:强制Unix行结束.
>git config --list | grep crlf
core.autocrlf=input
Run Code Online (Sandbox Code Playgroud) 标题说明了一切.
之后git reset --hard,git status给我Changes not staged for commit:部分内的文件.
我也尝试了git reset .,git checkout -- .并且git checkout-index -f -a无济于事.
那么,我怎样才能摆脱那些未分阶段的变化呢?
这似乎只打击Visual Studio项目文件.奇怪的.请参阅此粘贴:http://pastebin.com/eFZwPn9Z.这些文件的特殊之处在于.gitattributes我有:
*.sln eol=crlf
*.vcproj eol=crlf
*.vcxproj* eol=crlf
Run Code Online (Sandbox Code Playgroud)
此外,autocrlf在我的全局中设置为false .gitconfig.这可能是某种相关的吗?
我试图让git不改变任何操作的任何行结尾.不幸的是,似乎这样做并不重要.我已将其缩减为以下测试用例,该测试用例具有尽可能多的不同机制来禁用此行为.
git config --global core.autocrlf falsegit config --global core.eol crlf以防万一)git init --shared(然后取消隐藏创建的.git目录).gitignore在存储库中创建一个新文件.gitattributes使用单行在存储库中创建一个新文件:* -textgit add .,然后git commit -m "initial commit"解决,例如这个.git branch master_recvdocument.txt在包含CRLF的存储库中创建一个新文件git add -A那么git commit -m "<something>"document.txt仍然包含CRLF(并删除它并重置并--hard返回仍然使用CRLF的版本)new file包含CRLF 的新文件git add -A那么git commit -m "<something>"document.txt和B …在Windows XP中运行批处理文件时,我发现了随机出现的错误消息:
系统找不到指定name_of_label的批处理标签
当然标签存在.是什么导致这个错误?
我有一个回购我添加了gitattributes它并正在努力它.我通过Dropbox将它同步到另一台机器.当我把它打开到另一台机器时,一堆文件突然出现在未分区的区域作为总差异(所有文件都是一个巨大的差异,这意味着行结束差异) - 我的crlf结局基本上是.* text=auto我在Windows上工作.我试图隐藏更改,重置分支等.最后我决定提交文件然后做了一些其他提交我想在行结束提交之前重新排序(和压缩).当我尝试变基时,我得到一个:
error: Your local changes to the following files would be overwritten by merge
# those same files
Please, commit your changes or stash them before you can merge.
Aborting
Could not apply 89b25b81fff1a1e7893319e123aaaca9c4162a95... <commit message>
Run Code Online (Sandbox Code Playgroud)
当然藏匿不起作用
这是一个错误吗?
有关:
编辑与机器无关 - 在同一台机器上,一些(......)操作只是使这些文件(它们在.gitattributes文本中)出现在"已更改"部分.似乎存在的唯一解决方法是:
git rm --cached -r .
git reset --hard
Run Code Online (Sandbox Code Playgroud)
小心使用
编辑:hack上面转移到别名状态:
[alias]
crlf = !git rm -r . …Run Code Online (Sandbox Code Playgroud) 我们正在使用第三方PHP引擎来定期更新.这些版本保存在git中的一个单独的分支上,而我们的fork是主分支.
这样我们就可以从新版本的引擎中将补丁应用到我们的fork中.
我的问题是,经过对我们分支的许多提交后,我意识到引擎的初始导入是通过CRLF行结尾完成的.
我将每个文件转换为LF,但这做了一个巨大的提交,删除了100k行并添加了100k行,这显然打破了我们打算做的事情:从第三方引擎的工厂版本中轻松合并补丁.
我知道什么?我怎样才能解决这个问题?我的fork上已经有数百个提交.
最好的方法是在初始导入之后以及在分支我们自己的fork之前以某种方式执行行结束修复提交,并在历史记录中删除那个巨大的行结束提交.
但是我不知道如何在Git中这样做.
谢谢!
我决定通过.gitattributes文件详细设置我的行结束正确的方式- 例如这里 - 所以我将core.autocrlf设置为false并创建并提交了一个.gitattributes文件:
*.java text eol=native
*.jsp text eol=native
*.css text eol=native
*.html text eol=native
*.js text eol=native
*.xml text eol=native
*.sql text eol=native
*.MF text eol=native
# git files
*.gitignore text eol=native
*.gitattributes text eol=native
#eclipse files
*.classpath text eol=native
*.project text eol=native
*.prefs text eol=native
*.properties text eol=native
Run Code Online (Sandbox Code Playgroud)
然后我按照这里的建议发布git rm --cached -r .然后git reset --hard(也尝试过git checkout HEAD).现在所有文件都有LF行结尾.不应该是CRLF?我错过了什么?我在Windows 7上.git version 1.8.0.msysgit.0
谢谢
我正在开发一个涉及多个开发人员的Android项目,其中一些开发人员在Windows上,另一些开发人员在Linux/MacOS上.由于我在Windows上,我已被指示配置Git如下以避免问题:
autocrlf = true
safecrlf = true
Run Code Online (Sandbox Code Playgroud)
这很好用.我在Android Studio中创建的任何.java/XML/etc文件都是CRLF,当我将它们推入repo时转换为LF,然后当我将更改提取到本地副本时返回CRLF.问题是,由于某种原因,某些类型的文件(如矢量可绘制资源)会在LF中生成.因此,当我尝试将它们添加到Git时,我得到了"不可逆转换"错误:
我知道我可以设置safecrlf = warn,但据我所知,如果Git错误地将它们用于文本文件,则存在破坏二进制文件的风险,因此我正在寻找更安全的解决方案.现在我在将它们添加到Git之前手动将矢量资源编辑到CRLF中,这避免了上述错误消息,但是为每个文件重复该过程变得乏味.有什么方法可以强制Android Studio在CRLF中生成所有本地文件?
我已经阅读了有关如何使用 git 命令从存储库中删除忽略文件中的文件的信息:将目录添加到 .gitignore 后从远程存储库中删除。
我将 Visual Studio 2019 与 Azure DevOps 中的存储库一起使用。我使用了以下步骤:
git rm -r --cached .
这告诉 git 停止跟踪所有内容,现在我的所有文件在“暂存更改”中显示为已删除,而在“更改”中显示为添加的文件数量较少。这看起来不错。我假设被忽略的文件不会再次添加回来,所以当我提交这些添加时,所有原本应该被忽略的文件都将在服务器上被删除。我猜这与行尾有关,但几乎不可能查看更改。有没有办法阻止我使用这个过程时发生的空白变化?或者扭转空白变化?或者告诉 git 只检查删除?
TLDR 答案(来自 VonC):
git rm -r --cached .
git config --global core.autocrlf false
git add --renormalize .
git add .
git commit
Run Code Online (Sandbox Code Playgroud) git ×9
line-endings ×2
android ×1
azure-devops ×1
batch-file ×1
branch ×1
git-reset ×1
history ×1
label ×1
msysgit ×1
newline ×1
rewrite ×1
windows ×1