122 votes

Pourquoi est-ce que j'obtiens le message "fatal : This operation must be run in a work tree" (fatal : cette opération doit être exécutée dans un arbre de travail) ?

Je viens d'installer git sur Windows. J'ai défini la variable GIT_DIR comme étant c : \git\ et vérifié que cette variable d'environnement est maintenue par cygwin (c'est-à-dire que echo $GIT_DIR est ce qu'il devrait être). Je suis allé dans le dossier pour lequel je voulais créer le dépôt git, disons c : \www et a ensuite couru :

git init
git add .

J'obtiens alors l'erreur suivante :

fatal: This operation must be run in a work tree

Je ne sais pas exactement ce qui s'est passé, mais le c : \git contient un fichier de configuration qui dit :

[core]
    repositoryformatversion = 0
    filemode = false
    bare = true
    symlinks = false
    ignorecase = true

Je suis presque sûr que cela ne devrait pas être nu et c'est notre problème.

10voto

koppor Points 2066

J'ai rencontré ce problème, car .git/config contenu worktree = D:/git-repositories/OldName . Je l'ai juste changé en worktree = D:/git-repositories/NewName

J'ai découvert que, parce que j'ai utilisé git gui qui affiche un message d'erreur plus détaillé :

git gui error

8voto

Charles Bailey Points 244082

La définition explicite de la GIT_DIR oblige git à utiliser le répertoire donné comme dépôt git. Elle n'est jamais nécessaire dans le cadre d'une utilisation normale.

Dans votre exemple, parce que vous avez spécifié un GIT_DIR et il n'est pas nommé .git (le point initial est important) et vous n'avez pas fourni de --work-tree ou définir l'option GIT_WORK_TREE que vous voulez un référentiel nu lorsque vous avez dit git init .

Parce qu'un dépôt nu n'a pas d'arbre de travail, une grande sélection de commandes n'a pas de sens avec un dépôt nu. git add n'en est qu'une.

Y a-t-il une raison particulière pour laquelle vous devez utiliser un emplacement non standard pour votre dépôt git, plutôt qu'un emplacement de type .git dans le sous-dossier de l'arbre de travail Root ? Bien qu'il soit possible d'arranger cela, cela représente plus de travail et plus de risques d'erreurs de la part de l'utilisateur.

8voto

user1329261 Points 11

Créer un dépôt GIT nu

Un petit coup de gueule : git est incapable de créer un dépôt normal tout seul. Stupide git en effet.

Pour être précis, il n'est pas possible de cloner des dépôts vides. Un dépôt vide est donc un dépôt inutile. En effet, on crée normalement un référentiel vide et on le remplit immédiatement :

git init
git add .

Cependant, git add n'est pas possible lorsque vous créez un dépôt nu :

git --bare init
git add .

donne une erreur "fatal : This operation must be run in a work tree" (fatal : cette opération doit être exécutée dans un arbre de travail).

Vous ne pouvez pas non plus vérifier :

Initialized empty Git repository in /home/user/myrepos/.git/
fatal: http://repository.example.org/projects/myrepos.git/info/refs not found: did you run git update-server-info on the server?

git --bare init
git update-server-info # this creates the info/refs file
chown -R <user>:<group> . # make sure others can update the repository

La solution consiste à créer un autre dépôt ailleurs, à ajouter un fichier dans ce dépôt et à le pousser vers le dépôt nu.

mkdir temp; cd temp
git init
touch .gitignore
git add .gitignore
git commit -m "Initial commit"
git push (url or path of bare repository) master
cd ..; rm -rf temp

J'espère que cela pourra vous aider

5voto

chethan jain Points 91

Dans mon cas, j'étais dans le même dossier que le fichier ".git" de mon repo. J'ai dû remonter d'un niveau de répertoire, cela a résolu le problème.

3voto

Soren Bjornstad Points 907

Si rien d'autre ne semble fonctionner, vérifiez à nouveau le chemin d'accès dans le fichier git config core.worktree . Si ce chemin ne pointe pas vers votre répertoire de travail, vous devrez peut-être le mettre à jour.

J'ai obtenu cette erreur en créant un dépôt Git sur un lecteur réseau. Il a fonctionné correctement sur un ordinateur mais a renvoyé cette erreur sur un autre. Il s'est avéré que le lecteur était mappé à une lettre de lecteur Windows sur l'ordinateur où je l'ai créé, mais pas sur l'autre ordinateur, et Git a enregistré le chemin vers l'arborescence de travail comme étant le chemin mappé et non le chemin UNC.

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