5

当我做'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="&quot;$(DXSDK_DIR)\Include&quot;"
- />
-  <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="&quot;$(DXSDK_DIR)\Include&quot;"
+       />
+  <Tool
+               Name="VCLinkerTool"
+               AdditionalLibraryDirectories="$(DXSDK_DIR)\Lib\x86"
+       />
 </VisualStudioPropertySheet>
\ No newline at end of file
4

2 回答 2

9

听起来您正在使用该core.autocrlf选项。可能发生的情况是存储库中的文件具有 CRLF 行结尾,但是由于设置了此选项,Git 认为该文件在存储库中应该具有 LF 行结尾。当您签出文件时,您将在工作目录中获取带有平台本地行结尾的文件(如果在 Windows 上为 CRLF,在 Unix 上为 LF 等)。

作为git status操作的一部分,Git 正在将它们转换回 LF。如果 HEAD 修订中的文件以 CRLF 结尾存储在 Git 中,这可以解释为什么 Git 仍然认为这两个版本不同,即使您从索引中检查了修订。

最直接的检测方法是git diff从终端运行,它会将 CR 字符显示为^M.

要解决这种情况,您可以只提交文件(带有“标准化行尾”之类的消息)或者您可以core.autocrlf完全禁用,这意味着文件将按原样存储在存储库中,并且不会执行行尾调整吉特。(如果您与不使用同一平台的其他人一起开发,这可能会产生非常负面的后果。)

于 2013-01-04T00:01:50.783 回答
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 ...
于 2016-09-13T03:01:09.163 回答