2013-01-03 69 views
5

当我做 'git的状态',我得到我如何删除'变更未提交'提交'?在混帐

% 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 

但之后我做了 '混帐%结帐 - 源/ 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 
+0

您是否在Visual Studio打开时 你做这个?如果没有,请关闭VS并再次尝试checkout/status命令。我想知道VS是否正在读取,然后重新写入文件,只要它注意到它已被修改。 – cdhowie

回答

8

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

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

检测此问题的最简单方法是从终端运行git diff,该终端将显示CR字符^M

要解决这种情况,你可以只提交文件(如“规范行尾”的一些消息),或者你可以完全禁用core.autocrlf,这意味着文件将被存储在库原样和线Git不会执行结束调整。 (如果与不使用相同平台的其他人一起开发,这可能会带来非常不利的后果。)

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 ... 
+0

'git ls-files -m | xargs dos2unix'非常有用。 –