Git 情况在 windows bash 和 windows 命令行中有所不同

Mah*_*alv 6 git bash windows-subsystem-for-linux

我的系统中有一个 git 存储库。
当我git status使用windows PowerShell输入时,我得到一个结果,当我在windows bash中输入它时,我得到不同的结果。

请参阅图片了解更多详情。

在此输入图像描述

git status正如您在 Windows PowerShell 中看到的那样Nothing to commit,而在 Windows bash 中同样git status表示您有未暂存的更改。

git version以下是两者的输出结果:
Windows powershell : git version 2.18.0.windows.1
Windows bash : git version 2.7.4

这是git diff .idea/gradle.xml
Powershell
Bash

diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 7ac24c7..15dda04 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="GradleSettings">
-    <option name="linkedExternalProjectsSettings">
-      <GradleProjectSettings>
-        <option name="distributionType" value="DEFAULT_WRAPPED" />
-        <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="modules">
-          <set>
-            <option value="$PROJECT_DIR$" />
-            <option value="$PROJECT_DIR$/app" />
-          </set>
-        </option>
-        <option name="resolveModulePerSourceSet" value="false" />
-      </GradleProjectSettings>
-    </option>
-  </component>
+<?xml version="1.0" encoding="UTF-8"?>^M
+<project version="4">^M
+  <component name="GradleSettings">^M
+    <option name="linkedExternalProjectsSettings">^M
+      <GradleProjectSettings>^M
+        <option name="distributionType" value="DEFAULT_WRAPPED" />^M
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />^M
+        <option name="modules">^M
+          <set>^M
+            <option value="$PROJECT_DIR$" />^M
+            <option value="$PROJECT_DIR$/app" />^M
+          </set>^M
+        </option>^M
+        <option name="resolveModulePerSourceSet" value="false" />^M
+      </GradleProjectSettings>^M
+    </option>^M
+  </component>^M
 </project>
\ No newline at end of file
:
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 7ac24c7..15dda04 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="GradleSettings">
-    <option name="linkedExternalProjectsSettings">
-      <GradleProjectSettings>
-        <option name="distributionType" value="DEFAULT_WRAPPED" />
-        <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="modules">
-          <set>
-            <option value="$PROJECT_DIR$" />
-            <option value="$PROJECT_DIR$/app" />
-          </set>
-        </option>
-        <option name="resolveModulePerSourceSet" value="false" />
-      </GradleProjectSettings>
-    </option>
-  </component>
+<?xml version="1.0" encoding="UTF-8"?>^M
+<project version="4">^M
+  <component name="GradleSettings">^M
+    <option name="linkedExternalProjectsSettings">^M
+      <GradleProjectSettings>^M
+        <option name="distributionType" value="DEFAULT_WRAPPED" />^M
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />^M
+        <option name="modules">^M
+          <set>^M
+            <option value="$PROJECT_DIR$" />^M
+            <option value="$PROJECT_DIR$/app" />^M
+          </set>^M
+        </option>^M
+        <option name="resolveModulePerSourceSet" value="false" />^M
+      </GradleProjectSettings>^M
+    </option>^M
+  </component>^M
 </project>
\ No newline at end of file
:...skipping...
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 7ac24c7..15dda04 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="GradleSettings">
-    <option name="linkedExternalProjectsSettings">
-      <GradleProjectSettings>
-        <option name="distributionType" value="DEFAULT_WRAPPED" />
-        <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="modules">
-          <set>
-            <option value="$PROJECT_DIR$" />
-            <option value="$PROJECT_DIR$/app" />
-          </set>
-        </option>
-        <option name="resolveModulePerSourceSet" value="false" />
-      </GradleProjectSettings>
-    </option>
-  </component>
+<?xml version="1.0" encoding="UTF-8"?>^M
+<project version="4">^M
+  <component name="GradleSettings">^M
+    <option name="linkedExternalProjectsSettings">^M
+      <GradleProjectSettings>^M
+        <option name="distributionType" value="DEFAULT_WRAPPED" />^M
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />^M
+        <option name="modules">^M
+          <set>^M
+            <option value="$PROJECT_DIR$" />^M
+            <option value="$PROJECT_DIR$/app" />^M
+          </set>^M
+        </option>^M
+        <option name="resolveModulePerSourceSet" value="false" />^M
+      </GradleProjectSettings>^M
+    </option>^M
+  </component>^M
 </project>
\ No newline at end of file
~

Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它完全不同。

这是Powershell的输出git config -l

core.symlinks=true
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=D:/Apps/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
credential.helper=manager
user.name=Mahdi
user.email=mahdi.malvandi@pushe.co
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.origin.url=git@github.com:mahdi-malv/shahpari_market.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.setMainActivity.remote=origin
branch.setMainActivity.merge=refs/heads/setMainActivity
branch.networkSetup.remote=origin
branch.networkSetup.merge=refs/heads/networkSetup
branch.compNav.remote=origin
branch.compNav.merge=refs/heads/compNav
branch.presenter.remote=origin
branch.presenter.merge=refs/heads/presenter
branch.mainUi.remote=origin
branch.mainUi.merge=refs/heads/mainUi
branch.downloadManager.remote=origin
branch.downloadManager.merge=refs/heads/downloadManager
branch.category.remote=origin
branch.category.merge=refs/heads/category
:
Run Code Online (Sandbox Code Playgroud)

重击

core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.origin.url=git@github.com:mahdi-malv/shahpari_market.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.setMainActivity.remote=origin
branch.setMainActivity.merge=refs/heads/setMainActivity
branch.networkSetup.remote=origin
branch.networkSetup.merge=refs/heads/networkSetup
branch.compNav.remote=origin
branch.compNav.merge=refs/heads/compNav
branch.presenter.remote=origin
branch.presenter.merge=refs/heads/presenter
branch.mainUi.remote=origin
branch.mainUi.merge=refs/heads/mainUi
branch.downloadManager.remote=origin
branch.downloadManager.merge=refs/heads/downloadManager
branch.category.remote=origin
branch.category.merge=refs/heads/category
branch.setCategory.remote=origin
branch.setCategory.merge=refs/heads/setCategory
branch.searchFix.remote=origin
branch.searchFix.merge=refs/heads/searchFix
branch.homeMoreAPI.remote=origin
branch.homeMoreAPI.merge=refs/heads/homeMoreAPI
branch.userApp.remote=origin
branch.userApp.merge=refs/heads/userApp
branch.allApps.remote=origin
branch.allApps.merge=refs/heads/allApps
branch.settings.remote=origin
branch.settings.merge=refs/heads/settings
branch.autoUpdate.remote=origin
branch.autoUpdate.merge=refs/heads/autoUpdate
branch.tempStore.remote=origin
branch.tempStore.merge=refs/heads/tempStore
branch.fixIcon.remote=origin
branch.fixIcon.merge=refs/heads/fixIcon
branch.changeAd.remote=origin
branch.changeAd.merge=refs/heads/changeAd
branch.updateAndAnal.remote=origin
branch.updateAndAnal.merge=refs/heads/updateAndAnal
branch.merge1.remote=origin
branch.merge1.merge=refs/heads/merge1
branch.fixV1beta.remote=origin
branch.fixV1beta.merge=refs/heads/fixV1beta
branch.sendDevice.remote=origin
branch.sendDevice.merge=refs/heads/sendDevice
branch.newIcon.remote=origin
branch.newIcon.merge=refs/heads/newIcon
Run Code Online (Sandbox Code Playgroud)

是什么导致了这个问题以及如何解决它?

提前致谢。

注意:
除了已接受的答案之外,通过考虑 Ralf 的答案,我发现让两个 shell 使用一个 git 是一个好主意。
- 使用 .bashrc 从 bash 中删除sudo apt remove gitGit
- 添加path of git.exebash的$PATH 。
- 为了简单起见,alias git='git.exe'可以像以前一样使用 Git。

您可以对可能面临此问题的其他事物(例如 python 等)执行此操作。

eft*_*ft0 2

长话短说:core.autocrlf在两种环境中都是不同的。这解释了为什么在 powershell 上它告诉您文件完全不同(删除所有内容并再次添加完全相同的内容......因为它正在更改这些行的 EOL)。避免这种情况发生的方法是在 .gitattributes: 上使用它* -text。如果这样做问题仍然存在,可能是因为文件已经更改了工作树上的 EOL 格式。尝试将其切换回 HEAD 上的状态,然后该文件应该从 git 状态中消失。