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.

260voto

blj Points 151

De plus, vous êtes probablement dans le sous-dossier .git, remontez d'un dossier jusqu'à la racine de votre projet.

62voto

Jefromi Points 127932

La raison directe de l'erreur est que, oui, il est impossible d'utiliser la fonction git-add avec un dépôt nu. Un référentiel nu, par définition, n'a pas d'arbre de travail. git-add prend des fichiers dans l'arborescence et les ajoute à l'index, en préparation de la livraison.

Cependant, il vous faudra peut-être réfléchir un peu à votre configuration. GIT_DIR est le répertoire du dépôt utilisé pour toutes les commandes git. Essayez-vous vraiment de créer un seul dépôt pour tout ce que vous suivez, peut-être des choses réparties sur tout votre système ? Par nature, un dépôt git suit le contenu d'un seul répertoire. Vous devrez définir GIT_WORK_TREE à un chemin contenant tout ce que vous voulez suivre, puis vous aurez besoin d'un fichier .gitignore pour bloquer tout ce qui ne vous intéresse pas.

Vous essayez peut-être de créer un référentiel qui suivra uniquement les données de la rubrique c:\www ? Dans ce cas, vous devriez le mettre dans c:\www (ne pas mettre GIT_DIR). C'est l'utilisation normale de git, avec le dépôt dans le répertoire .git du répertoire de premier niveau de votre "module".

A moins que vous n'ayez une très bonne raison, je vous recommande de vous en tenir à la façon dont git aime travailler. Si vous avez plusieurs choses à suivre, vous voudrez probablement plusieurs dépôts !

35voto

Babajide M. Moibi Points 361

Ceci devrait résoudre le problème :

git config --unset core.bare

EDIT : Cela s'est produit parce que votre dépôt est vide/nouveau, donc bare . Comme vous pouvez le constater dans votre configuration, bare est fixé à true (par défaut pour un dépôt vide/nouveau). Votre git-add tente d'ajouter tous les fichiers dans un référentiel vide, ce qui n'est pas possible. Un message d'erreur est donc généré. En définissant cette valeur de configuration à false, vous annulez ce comportement.

32voto

Jacob Zimmerman Points 36

Au cas où ce qui m'est arrivé arriverait à quelqu'un d'autre, je dois dire ceci :
J'étais dans mon .git dans mon projet lorsque j'ai obtenu cette erreur.
J'ai cherché des réponses, mais rien n'a fonctionné.
Tout ce que j'avais à faire, c'était de retourner dans le bon répertoire ( cd .. ) .
J'en ai eu le souffle coupé.
Au cas où il y aurait d'autres personnes aussi stupides que moi, j'espère que cette réponse vous sera utile.

12voto

Festus Tamakloe Points 4181

Juste clone le même projet dans un autre dossier et copie el .git/ à votre projet.

Exemple

Créer un dossier temporaire :

mkdir temp

commutateur à temp dossier

cd temp/

cloner le même projet dans le temp dossier :

git clone [-b branchName] git@path_to_your_git_repository

copier le dossier .git dans votre projet :

cp -R .git/ path/to/your/project/

passez à votre projet et exécutez git status

supprimer el temp si vous avez terminé.

J'espère que cela aidera quelqu'un

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