我收到了其他人的git checkout,我正在尝试将未分段的更改提交到本地存储库。但是,即使内容完全相同, lot (如果不是每个)文件也会显示为 modified 。
我已将core.fileMode
设为false,并将core.autocrlf
设为false,但未成功。
值得一提的是,我收到的Git回购是来自使用Windows的人,而我使用的是Linux。
如何提交实际更改?
编辑:git config -l
的输出:
user.name=Aron Rotteveel
user.email=<removed>
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=auto
color.ui=true
color.pager=true
color.branch.current=yellow reverse
color.branch.local=yellow
color.branch.remote=green
color.diff.meta=yellow bold
color.diff.frag=magenta bold
color.diff.old=red bold
color.diff.new=green bold
color.status.added=yellow
color.status.changed=green
color.status.untracked=cyan
core.pager=less -FRSX
core.whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol
alias.co=checkout
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
core.autocrlf=false
remote.origin.url=<removed>
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
更新:添加了一些随机示例文件。这些文件只是纯文本,因此最容易包含。
原始文件位于此处:https://gist.github.com/c3c5302430935155ef3d。 Hexdumps肯定表明文件不同,但我不知道是什么导致这种情况,以及如何修复它。
HEAD版本:
0000000: 4854 4d4c 2e53 6166 654f 626a 6563 740d HTML.SafeObject.
0000010: 0a54 5950 453a 2062 6f6f 6c0d 0a56 4552 .TYPE: bool..VER
0000020: 5349 4f4e 3a20 332e 312e 310d 0a44 4546 SION: 3.1.1..DEF
0000030: 4155 4c54 3a20 6661 6c73 650d 0a2d 2d44 AULT: false..--D
0000040: 4553 4352 4950 5449 4f4e 2d2d 0d0a 3c70 ESCRIPTION--..<p
0000050: 3e0d 0a20 2020 2057 6865 7468 6572 206f >.. Whether o
0000060: 7220 6e6f 7420 746f 2070 6572 6d69 7420 r not to permit
0000070: 6f62 6a65 6374 2074 6167 7320 696e 2064 object tags in d
0000080: 6f63 756d 656e 7473 2c20 7769 7468 2061 ocuments, with a
0000090: 206e 756d 6265 7220 6f66 2065 7874 7261 number of extra
00000a0: 0d0a 2020 2020 7365 6375 7269 7479 2066 .. security f
00000b0: 6561 7475 7265 7320 6164 6465 6420 746f eatures added to
00000c0: 2070 7265 7665 6e74 2073 6372 6970 7420 prevent script
00000d0: 6578 6563 7574 696f 6e2e 2054 6869 7320 execution. This
00000e0: 6973 2073 696d 696c 6172 2074 6f0d 0a20 is similar to..
00000f0: 2020 2077 6861 7420 7765 6273 6974 6573 what websites
0000100: 206c 696b 6520 4d79 5370 6163 6520 646f like MySpace do
0000110: 2074 6f20 6f62 6a65 6374 2074 6167 732e to object tags.
0000120: 2020 596f 7520 7368 6f75 6c64 2061 6c73 You should als
0000130: 6f20 656e 6162 6c65 0d0a 2020 2020 254f o enable.. %O
0000140: 7574 7075 742e 466c 6173 6843 6f6d 7061 utput.FlashCompa
0000150: 7420 696e 206f 7264 6572 2074 6f20 6765 t in order to ge
0000160: 6e65 7261 7465 2049 6e74 6572 6e65 7420 nerate Internet
0000170: 4578 706c 6f72 6572 0d0a 2020 2020 636f Explorer.. co
0000180: 6d70 6174 6962 696c 6974 7920 636f 6465 mpatibility code
0000190: 2066 6f72 2079 6f75 7220 6f62 6a65 6374 for your object
00001a0: 2074 6167 732e 0d0a 3c2f 703e 0d0a 2d2d tags...</p>..--
00001b0: 2320 7669 6d3a 2065 7420 7377 3d34 2073 # vim: et sw=4 s
00001c0: 7473 3d34 0d0a ts=4..
复制版本:
0000000: 4854 4d4c 2e53 6166 654f 626a 6563 740a HTML.SafeObject.
0000010: 5459 5045 3a20 626f 6f6c 0a56 4552 5349 TYPE: bool.VERSI
0000020: 4f4e 3a20 332e 312e 310a 4445 4641 554c ON: 3.1.1.DEFAUL
0000030: 543a 2066 616c 7365 0a2d 2d44 4553 4352 T: false.--DESCR
0000040: 4950 5449 4f4e 2d2d 0a3c 703e 0a20 2020 IPTION--.<p>.
0000050: 2057 6865 7468 6572 206f 7220 6e6f 7420 Whether or not
0000060: 746f 2070 6572 6d69 7420 6f62 6a65 6374 to permit object
0000070: 2074 6167 7320 696e 2064 6f63 756d 656e tags in documen
0000080: 7473 2c20 7769 7468 2061 206e 756d 6265 ts, with a numbe
0000090: 7220 6f66 2065 7874 7261 0a20 2020 2073 r of extra. s
00000a0: 6563 7572 6974 7920 6665 6174 7572 6573 ecurity features
00000b0: 2061 6464 6564 2074 6f20 7072 6576 656e added to preven
00000c0: 7420 7363 7269 7074 2065 7865 6375 7469 t script executi
00000d0: 6f6e 2e20 5468 6973 2069 7320 7369 6d69 on. This is simi
00000e0: 6c61 7220 746f 0a20 2020 2077 6861 7420 lar to. what
00000f0: 7765 6273 6974 6573 206c 696b 6520 4d79 websites like My
0000100: 5370 6163 6520 646f 2074 6f20 6f62 6a65 Space do to obje
0000110: 6374 2074 6167 732e 2020 596f 7520 7368 ct tags. You sh
0000120: 6f75 6c64 2061 6c73 6f20 656e 6162 6c65 ould also enable
0000130: 0a20 2020 2025 4f75 7470 7574 2e46 6c61 . %Output.Fla
0000140: 7368 436f 6d70 6174 2069 6e20 6f72 6465 shCompat in orde
0000150: 7220 746f 2067 656e 6572 6174 6520 496e r to generate In
0000160: 7465 726e 6574 2045 7870 6c6f 7265 720a ternet Explorer.
0000170: 2020 2020 636f 6d70 6174 6962 696c 6974 compatibilit
0000180: 7920 636f 6465 2066 6f72 2079 6f75 7220 y code for your
0000190: 6f62 6a65 6374 2074 6167 732e 0a3c 2f70 object tags..</p
00001a0: 3e0a 2d2d 2320 7669 6d3a 2065 7420 7377 >.--# vim: et sw
00001b0: 3d34 2073 7473 3d34 0a =4 sts=4.
答案 0 :(得分:84)
我使用以下stpes解决了这个问题
1)从Git的索引中删除每个文件。
git rm --cached -r .
2)重写Git索引以获取所有新行结尾。
git reset --hard
请注意,第2步可能会删除您的本地更改。 解决方案是git网站上描述的步骤的一部分 https://help.github.com/articles/dealing-with-line-endings/
答案 1 :(得分:56)
您是否更改了文件的模式?
我在我的机器上完成了它,本地开发机器有777给所有文件,而repo有755,显示每个文件都被修改。我做了git diff
,它显示旧模式和新模式不同。
如果这是问题,那么您可以轻松忽略它们
git config core.filemode false
干杯
答案 2 :(得分:48)
更新:根据此问题的评论,问题已解决:
这很简单:第一个文件有CRLF行结束(windows),第二个文件有 LF(Unix)。
之类的东西file
util(在git \ usr \ bin中可用)将显示(file a b
将回复 像a: ASCII text, with CRLF line terminators b: ASCII text
)
以下原始答案:
您展示的差异不显示单个不同的行。你可以发布.git / config(或更好git config -l
)。
您可能有一些空白忽略已激活
你应该尝试禁用core.whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol
;
也
git show HEAD:myfile|md5sum
md5sum myfile
可用于验证文件实际上是不同的。使用外部差异也可以正常工作
git show HEAD:myfile > /tmp/myfile.HEAD
diff -u myfile /tmp/myfile.HEAD
# or if you prefer an interactive tool like e.g.:
vim -d myfile /tmp/myfile.HEAD
答案 3 :(得分:37)
git add -uv
添加更改。
它添加了3个文件(不是全部),我实际修改了。之后 git status 仅显示3个修改过的文件。在 git commit 之后,git status
答案 4 :(得分:20)
但是,即使内容完全相同,很多(如果不是每个)文件也会显示为已修改。
使用git 2。8(2016年3月),您可以快速检查这些更改是否与eol相关。
commit a7630bd见Torsten Bögershausen (tboegi
)(2016年1月16日)
(Junio C Hamano -- gitster
--于2016年2月3日commit 05f1539合并)
ls-files
:添加eol diagnostics在跨平台环境中工作时,用户可能想要检查文本文件是否在存储库中标准化存储,以及是否正确设置了
.gitattributes
。让Git可以在索引和工作树中显示行结尾和有效的text / eol属性。
行尾(&#34;
eolinfo
&#34;)如下所示:
"-text" binary (or with bare CR) file
"none" text file without any EOL
"lf" text file with LF
"crlf" text file with CRLF
"mixed" text file with mixed line endings.
有效的text / eol属性是以下之一:
"", "-text", "text", "text=auto", "text eol=lf", "text eol=crlf"
git ls-files --eol
提供如下输出:
i/none w/none attr/text=auto t/t5100/empty
i/-text w/-text attr/-text t/test-binary-2.png
i/lf w/lf attr/text eol=lf t/t5100/rfc2047-info-0007
i/lf w/crlf attr/text eol=crlf doit.bat
i/mixed w/mixed attr/ locale/XX.po
显示索引中数据中使用的eol约定(&#39;
i
&#39;), 并在工作树中(&#39;w
&#39;),以及有效的属性, 对于显示的每条路径。
答案 5 :(得分:17)
我能够通过将core.autocrlf从false更改为core.autocrlf = input
来修复Windows机器上的问题git config core.autocrlf input
中的建议
答案 6 :(得分:14)
在我的情况下,文件在更改文件权限后显示为已修改。
要使git忽略权限更改,请执行以下操作:
# For the current repository
git config core.filemode false
# Globally
git config --global core.filemode false
答案 7 :(得分:5)
Git FAQ有一个可能相关的答案,虽然我以前从未遇到过这个问题:
为什么git diff有时会列出一个没有变化的文件?
git diff和其他git操作已经过优化,因此它甚至不会查看磁盘和git索引中状态(大小,修改时间等)不同的文件。这使得git diff对于小的变化非常快。如果以某种方式触摸了文件,git diff必须查看内容并比较它,这是一个慢得多的操作,即使实际上没有变化。 git diff将文件列为提醒,说明它没有得到最佳使用。运行git状态不仅会显示状态,还会更新索引,状态为未更改的文件磁盘进行后续操作,而不仅仅是差异,速度更快。导致许多文件被diff列出的典型案例是运行批量编辑命令,如perl -pi -e'...'。
git status
为您展示了什么?
答案 8 :(得分:4)
以下是我克隆在Windows上创建的项目时在Linux上修复问题的方法:
在Linux上为了让事情正常工作你必须有这个设置:core.autocrlf = input
这是如何设置它:git config --global core.autocrlf input
然后从github再次克隆项目。
答案 9 :(得分:3)
我只是在.git / config中将filemode设置为false,对我有用。
filemode = false
答案 10 :(得分:2)
所以,我在这里尝试了一切,并希望提供一个解决我所有问题的解决方案。我的问题不在于行结尾或实际权限或类似的东西。这是因为我已经安装了Cygwin和随附的所有东西,我不知道还安装了自己的git版本。我从来没有注意到这一点,只是我遇到了奇怪的问题,用户和文件被标记为已更改(因为更改了烫发)。
事实证明,我认为这是因为我认为我应该将Git更新为最新版本,我做了,但运行git --version
返回旧版本号。在随后寻找原因之后,我在我的环境路径中找到了cygwin bin目录root,其中包含一个以旧版本号运行的git可执行文件。去图。
这也很难找到因为我安装了TortoiseGit。由于路径回退,我的命令行工具将使用cygwin版本,并且TortoiseGit配置为使用Windows版本,使其更加混乱。
希望这有助于某人。
答案 11 :(得分:2)
将我的本地存储库和工作副本复制到另一个文件夹(顺便在Windows上)后,我有四个文件一直显示为已更改,并尝试了其他答案中列出的每个建议。最后修复它的是删除本地分支并从远程再次下载。在我的情况下,我想这与复制本地存储库而不是克隆有关。
答案 12 :(得分:1)
我最近将本地存储库从一个Windows x64系统移到了另一个。第一次使用它时,一半文件似乎已更改。感谢Jacek Szybisz将我发送到Configuring Git to handle line endings,在这里我找到了以下一线从Gitkraken的更改队列中删除了所有未更改的文件:
git config --global core.autocrlf true
答案 13 :(得分:1)
就我而言,文件完全相同(内容,行尾,文件模式,md5校验和,所有内容),但仍在git status
中可见。
有帮助的是
# Garbage collect stuffs from .git
git gc
# commit stuff
git add .
git commit -m "temporary"
# this doesn't change contents
git reset HEAD^1 --soft
此后,git status
仅显示我编辑的一个编辑文件。
答案 14 :(得分:0)
对我来说,这是因为2个Linux VM都映射到了相同的主文件系统。 一个虚拟机正在运行git-1.7.1,另一个正在运行git-2.14
运行git-1.7.1的VM始终会显示4个文件的更改(即使内容和行尾都相同)。
一旦在运行g-2.14的VM上运行了“ git status”,则两个VM都将开始报告存储库为干净。 'git status'具有副作用。这不是一成不变的操作。 git-1.7.1不能像git-2 +那样理解世界。
答案 15 :(得分:0)
配置中唯一可疑的条目是我core.ignorecase
。您可以尝试使用以下方法取消设置:
git config --unset core.ignorecase
...并查看git status
或git diff
的输出是否不同。
答案 16 :(得分:0)
对我来说,问题在于文件的大小写不同。
我重命名了文件并提交了删除操作,它显示了要删除文件的大小写版本。
提交删除操作后,我将文件重命名为其原始名称并推送。
答案 17 :(得分:0)
就我而言,git 克隆速度很慢,所以我只是将克隆的存储库从我的 Mac 复制到 Windows,但这些都没有帮助。有什么帮助是克隆复制的 repo 并使用它来代替,这似乎已经修复了它。我假设默认设置了一些不同的跨平台选项,可能会导致问题。