2 votes

Git-Windows-git-pull ne peut pas être utilisé sans un arbre de travail

Je suis confronté à un problème lié à Git sur Windows, je suis incapable de tirer les changements du repo sur git. Je suis capable d'ajouter, de commiter et de pousser mes modifications, mais pas de les tirer.

Il me donne une erreur : fatal : C:** \Git /libexec/git-core/git-pull ne peut pas être utilisé sans un fichier arbre de travail.

En cherchant cette erreur, j'ai trouvé quelques liens sur SO, qui demandaient de supprimer les variables d'environnement de l'arbre de travail ou du répertoire de travail. Ces liens semblaient expliquer le fonctionnement de Git plutôt que de citer la façon de résoudre le problème et aucun ne semblait spécifique à Windows. Je poste donc cette question

Le mien n'est pas un dépôt nu, voici le contenu du fichier de configuration git :

 [core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = https://username@github.com/Project/projectname.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

J'utilise git pour la première fois sur Windows et j'utilise mysgit pour cela. Dois-je configurer d'autres paramètres ou des variables d'environnement spécifiques à Windows, car j'utilise git sur ubuntu également sans aucune étape particulière.

J'ai également consulté ce lien mais il ne semble pas être le plus récent car aucune des choses spécifiées dans ce post n'existe. Lien

Tout conseil ou aide est apprécié.

Merci, faites-moi savoir si cette question est appropriée dans ce forum ou si je dois la poster à SuperUser.

Edita:

Après le post d'Eckes, cela m'a aidé à trouver l'erreur pour l'arbre de travail manquant.

La station de travail sur laquelle je travaille avait une version supplémentaire de git installée et lorsque j'ai vérifié les variables d'environnement, elle était définie sur celle-ci. Une fois que je l'ai nettoyée, je n'ai plus l'erreur précédente, mais pull ne fonctionne toujours pas, je reçois une erreur :


EDIT

 remote: Counting objects: 132, done.
 remote: Compressing objects: 100% (64/64), done.
 remote: Total 104 (delta 74), reused 70 (delta 40)
 Receiving objects: 100% (104/104), 33.05 KiB, done.
 Resolving deltas: 100% (74/74), completed with 24 local objects.
 fatal: write failure on 'stdout': Bad file descriptor
 error: https://github.com/Project/projectname.git did not send all necessary objects

2voto

eckes Points 17277

C'est étrange. En regardant Git/libexec/git-core/git-pull (à partir de git version 1.7.11.msysgit.0 ), il y a la commande

require_work_tree_exists

La commande est mise en œuvre dans Git/libexec/git-core/git-sh-setup :

require_work_tree_exists () {
  if test "z$(git rev-parse --is-bare-repository)" != zfalse
  then
    die "fatal: $0 cannot be used without a working tree."
  fi
}

Donc, si vous êtes vraiment pas dans un repo nu (c'est à dire que votre .git/config est bien celui de votre repo), cela n'imprimera pas le message.

Mais il y a une autre commande dans Git/libexec/git-core/git-sh-setup en imprimant cette chaîne :

require_work_tree () {
  test "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = true ||
  die "fatal: $0 cannot be used without a working tree."
}

Je recommanderais de changer un des deux messages pour pouvoir identifier celui qui vous concerne vraiment. Le second est émis si vous émettez git sur des répertoires qui ne sont pas des répertoires git repo. Juste pour être sûr : git pull doit être exécuté à l'intérieur d'un dépôt git...


Edita:
afin de vérifier ce qui ne va pas, essayez le code de require_work_tree_exists sur votre git bash. Il ne devrait pas entrer dans le then partie du code.

1voto

fantaxy025025 Points 369

Voir ici Dépannage de git pull

Un dépôt nu n'a pas d'arbre de travail. git pull est fonctionnellement le même qu'un git fetch suivi d'un git merge, et pour faire un merge vous devez avoir un arbre de travail (au cas où il y aurait des conflits à régler).

Vous devez pousser vers un repo nu. Le Pull ne fonctionnera pas car il nécessite un répertoire de travail vers lequel fusionner, ce qui est ce que dit le message d'erreur que vous voyez. Il faut donc créer un répertoire distant vers le repo nu à partir du repo sur lequel vous allez travailler et pousser depuis ce répertoire. PS : La façon idéale de créer un repo nu est de faire git init --bare

Merci.

1voto

VonC Points 414372

Cette erreur (" cannot be used without a working tree. ") est visible sous Windows lorsque l'icône cas du chemin dans GIT_WORK_TREE est incorrecte.
Ce sera corrigé avec git 2.7 (Q4 2015)

Véase commettre 63ec5e1 (28 Sep 2015) par Johannes Schindelin ( dscho ) .
(fusionné par Junio C Hamano -- gitster -- en commettre 6652939 , 15 Oct 2015)

Sur un système de fichiers insensible à la casse, la définition de GIT_WORK_TREE variable l'utilisation d'un cas aléatoire qui ne correspond pas à ce que le système de fichiers pense a confondu Git qu'il n'était pas dans l'arbre de travail.

Plus précisément :

setup : correction de la détection "inside work tree" sur les systèmes de fichiers insensibles à la casse

Git possède une variable de configuration pour indiquer qu'il fonctionne sur un système de fichiers qui n'est pas sensible à la casse : core.ignoreCase .
Mais le dir_inside_of() fonction n'a pas respecté cela.
Par conséquent, si l'idée que se fait Git du répertoire de travail actuel n'est pas en accord, en ce qui concerne les majuscules et les minuscules, avec le paramètre GIT_WORK_TREE variable (par exemple C:\test vs c:\test ), l'utilisateur sera accueilli par le message d'erreur :

fatal: git-am cannot be used without a working tree.

lors de l'exécution d'un rebasement.

Cela corrige git-for-Windows#402 (rapporté par Daniel Harding [vivant180] ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X