J'ai un dépôt git dans mon système.
Lorsque j'entre git status
à l'aide de Windows PowerShell , j'obtiens un résultat et lorsque je le saisis dans windows bash , j'obtiens un résultat différent.
Voir l'image pour plus de détails.
Comme vous pouvez le voir git status
dans Windows PowerShell indique Rien à valider
, tandis que le même état git
dans Windows bash indique que vous avez des modifications non organisées.
Voici un résultat de sortie de git version
dans les deux:
PowerShell Windows :
git version 2.18.0.windows.1
Windows bash :
git version 2.7.4
Et voici un git diff .idea / gradle.xml
:
Powershell :
Bash
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
Comme vous pouvez le voir, c'est complètement différent.
Voici la sortie de git config -l
:
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 :
Bash final:
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 ~
Qu'est-ce que à l'origine de ce problème et comment puis-je le résoudre?
Merci d'avance.
Remarque:
En plus de la réponse acceptée et en considérant la réponse de Ralf, j'ai trouvé que faire en sorte que les deux shells utilisent un git est une bonne idée.
- Supprimer Git de bash en utilisant sudo apt remove git
.
- Ajouter chemin de git.exe
dans $ PATH de bash.
- Pour plus de simplicité, utilisez alias git = 'git.exe'
pour pouvoir utiliser Git comme avant.
Vous pouvez le faire pour d'autres choses qui pourraient rencontrer ce problème comme python et ainsi de suite.
3 Réponses :
En plus d'avoir deux versions différentes de Git, vous devriez vérifier les configurations dans les deux sessions, avec:
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%
Cela peut afficher non seulement différentes configurations, mais différents fichiers de configuration (comme lorsque HOME
diffère entre les deux, ou lorsque la configuration du système diffère entre les installations Git séparées)
Dans votre configuration, la présence de core.autocrlf = true
dans les deuxièmes paramètres explique la sortie de git diff
.
Assurez-vous de taper: git config --global core.autocrlf false
dans les deux shell.
Dans tous les cas, essayez d'utiliser un PATH simplifié (avec un PortableGit-2.20.1-64-bit.7z.exe
Git décompressé où que vous soyez want), puis appelez git bash
dans ce CMD avec ledit PATH simplifié: le résultat devrait alors être le même.
git config -l --show-origin
Les fichiers sont déjà suivis, il ne s'agit donc pas de les ignorer par git.
En bref: core.autocrlf est différent dans les deux environnements. Cela explique pourquoi sur PowerShell, il vous dit que les fichiers sont complètement différents (en supprimant tout le contenu et en l'ajoutant exactement de nouveau ... car cela change la fin de vie de ces lignes). Le moyen d'éviter que cela ne se produise est d'utiliser ceci sur .gitattributes: * -text
. Si le problème persiste, c'est probablement parce que le fichier a déjà changé son format EOL dans l'arborescence de travail. Essayez de le remettre à ce qu'il était sur HEAD, puis le fichier devrait disparaître de l'état git.
En comparant la sortie de l'existant et celle modifiée dans la commande git diff
, vous verrez que seul ^ M
est la différence entre. Ainsi, en l'ignorant en utilisant .gitattributes
et * -text
, il a résolu le problème.
Et cela n'a pas fonctionné au début, car il était déjà modifié. Donc, revenir à HEAD l'a aidé. Merci pour l'aide.
Bien que la réponse acceptée montre comment résoudre ce problème, je donnerais un autre conseil:
Utilisez git sur Powershell ou git sur Bash . Ne mélangez pas lorsque vous gérez la même copie de travail.
Mise à jour:
Il est (très probablement) correct d'utiliser git sur Powershell et d'autres outils git basés sur Windows (vous avez mentionné gitKraken et Android Studio dans le commentaire).
Je crois comprendre que bash et git on Bash proviennent du sous-système Windows pour Linux. Ils prendront donc un style EOL différent.
J'utilise gitKraken
et parfois git du studio Android
. Je suppose qu'ils utilisent git de windows. Donc, si j'utilise git
dans le bash, ce serait un mélange. La mise à jour des deux gits ou l'utilisation d'un git portable devrait résoudre le problème, non?
@Malv je ne sais pas.
J'ai vu ce problème apparaître lors de l'utilisation de git de «git for windows», puis de «git through cygwin». Je suppose que le problème est de savoir comment les deux binaires peuvent voir l'indicateur d'exécution des fichiers. Quelle est la sortie de
git diff .idea / gradle.xml
? De plus, quelle est la sortie de laversion de git
pour les deux environnements ? Pouvez-vous ajouter la sortie des deux à la question d'origine?@TimBiegeleisen quoi ???
git version
etgit diff .idea / gradle.xml
? Où?Oh ... je n'ai pas vu
diff
là-dedans, oui, ce serait bien à voir aussi.@ eftshift0 Intéressant. Pour Windows,
git version
renvoie:git version 2.18.0.windows.1
. Et pourwindows bash
ce seragit version 2.7.4
git diff
pourgradle.xml
est vide pourwindows powershell
, alors qu'il a toutes les différences dansbash
Et les diff? Je parie que le problème est lié au drapeau + x des fichiers (bien que cela puisse être lié aux configurations, comme un git utilise auto.crlf et l'autre pas? Toutes sortes de choses folles peuvent arriver). Peut-être que vérifier également
git config -l
pour les deux pourrait aider un peu,Que voulez-vous dire par
toutes les différences
? Comme le fichier est complètement supprimé et remplacé par le même contenu?Premièrement: lequel a raison? Le fichier
.idea / gradle.xml
ressemble à un fichier qui devrait normalement être ignoré. Se pourrait-il que.gitignore
utilise des fins de ligne CRLF et que le git dans bash est incapable de le comprendre?À propos, toutes ces sorties devraient être ajoutées à la question initiale.
@Ralf: Cela n'a pas d'importance. Les résultats ne devraient pas différer, n'est-ce pas?
Non, les sorties ne peuvent pas différer.
@Malv .... Ils pourraient différer. Nous essayons de comprendre pourquoi ils le font pour que cela puisse être évité.
Pouvez-vous essayer ça? Ajoutez ceci à .gitattributes:
* -text
, puis réessayezgit status
sur les deux. Ensuite, vous pouvez le retirer.Si cela résout le problème, c'est parce que la configuration de auto.crlf (ou quelque chose comme ça) est différente entre les deux gits. En utilisant
* -text
sur .gitattributes, vous dites à git d'éviter toute conversion EOL et de gérer les fichiers "tels quels".Et puis je l'écrirai comme une réponse et @Malv la votera et la vérifiera comme la réponse , non?
@ eftshift0 Non. l'ajout de
* -text
n'a pas fait de différence, sauf que les deux disent que.gitattributes
est créé:( Quelle est la sortie de
git config -l
sur les deux? Cela devrait être ajouté à la question d'origine.La valeur de auto.crlf est différente entre les deux. Je suppose que c'est défini à l'échelle mondiale. Pouvez-vous le définir sur le repo?
Mais c'est exactement ce que nous avons essayé de faire (remplacer cette valeur) en utilisant .gitattributes. Peut-être que les fichiers ont déjà été modifiés sur l'arbre de travail par l'un des deux gits? Pouvez-vous vérifier cela également?
file .idea / gradle.xml
sur les deux environnements, ainsi quegit show HEAD: .idea / gradle.xml | fichier -
. Nous pourrions découvrir que le fichier a déjà changé son format EOL déjà dans l'arborescence de travail.