当我做'git status'时,我得到了
% git status
# Not currently on any branch.
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
# modified: Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops
但是在我做了'%git checkout - Source / WebKit / win / WebKit.vcproj / WebKitApple.vsprops'后,我看到了同样的结果:
% git checkout -- Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
% git status
# Not currently on any branch.
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
# modified: Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops
#
如何删除那些“未提交提交的更改”?
我甚至尝试过'git stash',还有一些是如何改变的。
我做了'git diff'。这是结果,我没看到^ M: 我看过'.gitconfig',我没有'autoctrl
% git diff
diff --git a/Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops b/Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
index 2ea7a51..9643739 100644
--- a/Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
+++ b/Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="WebKitApple"
- >
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="CFNetwork$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib QTMovieWin$(WebKitConfigSuffix).lib WebKitSystemInterface$(WebKitConfigSuffix).lib"
- DelayLoadDLLs="QTMovieWin$(WebKitConfigSuffix).dll"
- />
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="WebKitApple"
+ >
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="CFNetwork$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib QTMovieWin$(WebKitConfigSuffix).lib WebKitSystemInterface$(WebKitConfigSuffix).lib"
+ DelayLoadDLLs="QTMovieWin$(WebKitConfigSuffix).dll"
+ />
</VisualStudioPropertySheet>
\ No newline at end of file
diff --git a/Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops b/Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops
index 797b4cb..c95c87d 100644
--- a/Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops
+++ b/Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="WebKitDirectX"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""$(DXSDK_DIR)\Include""
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalLibraryDirectories="$(DXSDK_DIR)\Lib\x86"
- />
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="WebKitDirectX"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""$(DXSDK_DIR)\Include""
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\Lib\x86"
+ />
</VisualStudioPropertySheet>
\ No newline at end of file
答案 0 :(得分:9)
听起来您正在使用core.autocrlf
选项。可能发生的事情是存储库中的文件具有CRLF行结尾,但由于设置了此选项,Git认为该文件应该在存储库中具有LF行结尾。当您签出文件时,您将获得具有平台本机行结尾的工作目录中的文件(如果在Windows上为CRLF,在Unix上为LF等)。
作为git status
操作的一部分,Git将这些转换回LF。如果HEAD修订版中的文件存储在Git中,因为它具有CRLF结尾,这就可以解释为什么即使在您从索引中检出修订版之后,Git仍然认为这两个版本是不同的。
检测此问题最直接的方法是从终端运行git diff
,这会将CR字符显示为^M
。
要解决这种情况,您只需提交文件(使用“标准化行结束”等消息),或者可以完全禁用core.autocrlf
,这意味着文件将存储在存储库中-is 并且Git不会执行行结束调整。 (如果您与不使用相同平台的其他人一起开发,这可能会产生非常不利的后果。)
答案 1 :(得分:2)
我只想添加 @cdhowie 的答案。
我遇到了与OP相同的问题。
验证Windows行结尾的最佳方法不是通过vim,而是通过od
:
od -xcb foo.txt | tail
Windows行结尾应如下所示:
\r \n
要轻松获取所有受影响的文件并转换为unix(在我的情况下),请执行以下操作:
git ls-files -m | xargs dos2unix
dos2unix: converting file foo.txt to Unix format ...
dos2unix: converting file moo.txt to Unix format ...