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 が 2 つのバージョンを異なるものとして認識している理由を説明できます。

これを検出する最も簡単な方法は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 に答える