相关疑难解决方法(0)

尝试使用git filter-branch修复行结尾,但没有运气

我被git用Windows/Linux行结束问题所困扰.看来,通过GitHub,MSysGit和其他来源,最好的解决方案是让你的本地存储库设置为使用linux风格的行结尾,但设置core.autocrlftrue.不幸的是,我没有及早做到这一点,所以现在每次我进行更改时,行结尾都会被剔除.

我以为我在这里找到了答案,但我无法让它为我工作.我的Linux命令行知识充其量是有限的,所以我甚至不确定"xargs fromdos"行在他的脚本中做了什么.我不断收到关于没有这样的文件或目录的消息,当我设法将它指向现有目录时,它告诉我我没有权限.

我在Windows上通过Mac OS X终端尝试使用MSysGit.

git newline line-endings msysgit

266
推荐指数
3
解决办法
6万
查看次数

为什么git认为未更改的文件的每一行都已更改

我不认为这是一个行结束差异问题 - p4merge认为文件中没有任何变化,即使设置为识别行结束和空白差异.

我的问题是有时会发生以下情况:

  • 首先git status显示没有未提交的更改.
  • 然后我结帐另一个分支
  • 现在git status列出一些已更改的文件.
  • git diff在任何这些"已更改的文件"上显示文件的每一行都已更改.更改后的版本与原始版本相同.

为什么会这样?为什么git认为文件已经改变,当它们似乎没有这样做?为什么只检查另一个分支导致这个?

我的第一个想法是行结尾,但我不知道为什么p4merge不会检测到那些.第二个想法是文件模式的改变.我不知道如何找出是否是这种情况.git config --list显示core.filemode设置为false.git config --global --list并且git config --system --list不显示core.filemode的任何设置(我在这里告诉我,因为我不确定不同的配置级别如何互相覆盖).core.autocrlf设置为true.

多个开发人员提交到同一个存储库,我在Windows机器上提取所有更改.我猜某个某个地方有某个设置导致了这个问题,但我不知道这是我本地人还是其他人,或者它可能是什么设置.

列为已更改的文件似乎不是随机的 - 如果我删除我的本地存储库,再次从远程克隆(默认为要检出的主分支)克隆它,并再次检出相同的分支,git status列出完全相同的文件每次都改变了.这些文件有时是最近编辑过的,有时是多年未触及过的文件.它们不仅是二进制文件(core.autocrlf=true已知有时会损坏),也是文本文件.

git rm --cached -r .接下来执行的命令git reset --hard可以消除这些变化,但它经常会发生变得令人烦恼.我也很好奇是什么导致了这一点.

相同的存储库也导致行结束问题.我认为这是一个单独的问题,所以我可能会最终提出另一个问题,但我在这里简要地提到它,以防它毕竟是相关的.检出另一个分支或从远程存储库中提取更改有时会导致文件显示为已更改,并且git diff这些文件仅显示输出warning: LF will be replaced by CRLF in [file]. The file will have its original line endings in your working directory.

编辑:存储库的.gitattributes文件只有行,* text=auto而没有其他内容. …

git

5
推荐指数
1
解决办法
1869
查看次数

标签 统计

git ×2

line-endings ×1

msysgit ×1

newline ×1