代码之家  ›  专栏  ›  技术社区  ›  Mahdi-Malv

Git在Windows bash和Windows命令行中的情况不同

  •  3
  • Mahdi-Malv  · 技术社区  · 6 年前

    我的系统中有一个git repo。
    当我进入 git status 使用 Windows PowerShell ,我得到一个结果,当我在 Windows BASH 我得到了不同的结果。

    有关详细信息,请参见图。

    enter image description here

    正如你所看到的 GIT状态 在Windows PowerShell中 Nothing to commit 同时 GIT状态 在Windows中,bash说您有未分页的更改。

    以下是的输出结果 git version 两者都有:
    Windows PowerShell : git version 2.18.0.windows.1
    Windows BASH : git version 2.7.4

    这是一个 git diff .idea/gradle.xml :
    动力壳 :
    猛击 :

    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
    ~
    
    

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

    这是的输出 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
    :
    

    猛击 :

    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
    

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

    事先谢谢。

    注:
    除了可接受的答案和考虑拉尔夫的 answer 我发现让两个shell都使用一个git是个好主意。
    -使用从bash中移除git sudo apt remove git .
    -添加 path of git.exe 在里面 $路径 抨击。
    -为了简单使用 alias git='git.exe' 能够像以前一样使用Git。

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

    3 回复  |  直到 6 年前
        1
  •  1
  •   eftshift0    6 年前

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

        2
  •  1
  •   torek    6 年前

    除了拥有两个不同版本的Git之外,您还应该在两个会话中检查配置,方法是:

    git config -l --show-origin
    

    它不仅可以显示不同的配置,还可以显示不同的配置 文件夹 (就像当 HOME 两者不同,或者系统配置在不同的Git安装之间不同)

    在您的设置中,存在 core.autocrlf=true 在第二个设置中解释了 git diff 输出。
    确保键入: git config --global core.autocrlf false 在两个壳中。

    无论如何,尝试使用 simplified PATH (用) PortableGit-2.20.1-64-bit.7z.exe Git在任何地方都不压缩),然后调用 git bash 在该命令中,使用所说的简化路径:结果应该是相同的。

    set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\
    set GH=C:\path\to\git
    set PATH=%GH%\bin;%GH%\usr\bin;%GH%\mingw64\bin;%PATH%
    
        3
  •  1
  •   Ralf    6 年前

    虽然接受的答案显示了如何解决该问题,但我会给出另一个建议:

    要么使用 PowerShell上的Git 狂欢狂欢 . 管理同一工作副本时不要混合。

    更新:

    可以(很可能)使用 PowerShell上的Git 以及其他基于Windows的Git工具(您在评论中提到了Gitkraken和Android Studio)。

    我的理解是 狂欢狂欢 来自Windows Linux子系统。因此他们将采用不同的EOL样式。