Windows Bash和Windows命令行中的Git情况有所不同 [英] Git situation differs in windows bash and windows command line

查看:61
本文介绍了Windows Bash和Windows命令行中的Git情况有所不同的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a git repo in my system.
When I enter git status using windows PowerShell, I get a result and when I enter it in the windows bash, I get a different result.

查看图片以获取更多详细信息.

See the image for more details.

正如您在Windows PowerShell中看到的 git status 所说的 Nothing to commit ,而在Windows bash中相同的 git status 则表明您已撤消更改

As you can see git status in windows PowerShell says Nothing to commit, while same git status in windows bash says you have unstaged changes.

以下是两个版本的 git版本的输出结果:
Windows Powershell : git版本2.18.0.windows.1
Windows bash : git版本2.7.4

Here is an output result of git version in both:
Windows powershell: git version 2.18.0.windows.1
Windows bash: git version 2.7.4

这是 git diff .idea/gradle.xml :
Powershell :
重击:

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
~

如您所见,它是完全不同的.

As you can see it's completely different.

这是 git config -l <​​/code>的输出: Powershell :

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
:

重击:

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

是什么原因导致此问题以及如何解决?

What is causing this issue and how i can fix it?

谢谢.

注意:
除了接受的答案之外,并考虑Ralf的 answer ,我发现使两个shell都使用一个git是一个好主意.
-使用 sudo apt remove git 从bash删除Git.
-在bash的 $ PATH 中添加git.exe的路径.
-为简单起见,请使用 alias git ='git.exe'像以前一样使用Git.

Note:
In addition to the accepted answer and by considering Ralf's answer, I found that making both shells use one git is a good idea.
- Remove Git from bash using sudo apt remove git.
- Add path of git.exe in $PATH of bash.
- For simplicity use alias git='git.exe' to be able to use Git like before.

您可以针对可能会遇到此问题的其他事情(例如python等)执行此操作.

You can do this for other things that might face this problem like python and so on.

推荐答案

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

Long story short: core.autocrlf is different in both environments. That explains why on powershell it's telling you that the files are completely different (removing all the content and adding it exactly the same again.... because it's changing the EOL of those lines). The way to avoid it from happening is by using this on .gitattributes: * -text. If by doing this the problem remains, it's probably because the file has already changed its EOL format on the working tree. Try switching it back to what it was on HEAD and then the file should disappear from git status.

这篇关于Windows Bash和Windows命令行中的Git情况有所不同的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆