Gerade Git unter Windows installiert. Ich habe die Variable GIT_DIR auf c: \ git \ gesetzt und überprüft, ob diese Umgebungsvariable von cygwin verwaltet wird (dh echo $ GIT_DIR ist das, was es sein sollte). Ich ging zu dem Ordner, für den ich das Git-Repository erstellen wollte, sagen wir c: \ www, und führte dann Folgendes aus:
git init
git add .
Dann bekomme ich den Fehler:
fatal: This operation must be run in a work tree
Ich bin nicht sicher, was schief gelaufen ist, aber das Verzeichnis c: \ git enthält eine Konfigurationsdatei mit der Aufschrift:
[core]
repositoryformatversion = 0
filemode = false
bare = true
symlinks = false
ignorecase = true
Ich bin mir ziemlich sicher, dass dies nicht kahl sein sollte und das ist unser Problem.
Antworten:
Der direkte Grund für den Fehler ist, dass die Verwendung
git-add
mit einem nackten Repository nicht möglich ist. Ein nacktes Repository hat per Definition keinen Arbeitsbaum.git-add
Nimmt Dateien aus dem Arbeitsbaum und fügt sie dem Index hinzu, um das Festschreiben vorzubereiten.Möglicherweise müssen Sie hier jedoch ein wenig über Ihr Setup nachdenken. GIT_DIR ist das Repository-Verzeichnis, das für alle Git-Befehle verwendet wird. Versuchen Sie wirklich, ein einziges Repository für alles zu erstellen, was Sie verfolgen, vielleicht für Dinge auf Ihrem gesamten System? Ein Git-Repository verfolgt von Natur aus den Inhalt eines einzelnen Verzeichnisses. Sie müssen
GIT_WORK_TREE
einen Pfad festlegen , der alles enthält, was Sie verfolgen möchten, und dann müssen Sie einen Pfad.gitignore
blockieren, der alles blockiert, was Sie nicht verfolgen möchten .Vielleicht versuchen Sie, ein Repository zu erstellen, das nur
c:\www
nachverfolgt? Dann sollten Siec:\www
es einfügen (setzen Sie nicht GIT_DIR). Dies ist die normale Verwendung von git, wobei sich das Repository im Verzeichnis .git des Verzeichnisses der obersten Ebene Ihres "Moduls" befindet.Wenn Sie keinen guten Grund haben, würde ich empfehlen, bei der Art und Weise zu bleiben, wie Git gerne arbeitet. Wenn Sie mehrere Dinge verfolgen müssen, möchten Sie wahrscheinlich mehrere Repositories!
quelle
git config --unset core.bare
.git branch
ich mithilfe des Befehls Zweige auflisten, was ich jedoch nicht konntegit checkout -b feature22
. Bedeutet das, dass zum Auflisten der Zweige kein funktionierender Baum benötigt wird, zum Auschecken jedoch?Außerdem befinden Sie sich wahrscheinlich im Unterordner .git. Verschieben Sie einen Ordner nach oben in Ihr Projektstammverzeichnis.
quelle
Nur für den Fall, dass das, was mir passiert ist, jemand anderem passiert, muss ich Folgendes sagen: Ich befand mich in meinem .git-Verzeichnis in meinem Projekt, als ich diesen Fehler erhielt. Ich suchte und suchte nach Antworten, aber nichts funktionierte. Ich musste nur zum richtigen Verzeichnis zurückkehren. Für mich war es eine Art Gesichtspalmenmoment. Falls da draußen noch jemand so dumm ist wie ich, hoffe ich, dass Sie diese Antwort hilfreich fanden.
quelle
Klonen Sie einfach dasselbe Projekt in einen anderen Ordner und kopieren Sie den Ordner .git / in Ihr Projekt.
Beispiel
Temporären Ordner erstellen:
Wechseln Sie in den temporären Ordner
Klonen Sie dasselbe Projekt in den temporären Ordner:
Kopieren Sie den .git-Ordner in Ihr Projekt:
cp -R .git/ path/to/your/project/
Wechseln Sie zu Ihrem Projekt und führen Sie es aus
git status
Löschen Sie den temporären Ordner, wenn Sie fertig sind.
hoffe, das wird jemandem helfen
quelle
Dies sollte es lösen:
quelle
Das explizite Festlegen der
GIT_DIR
Umgebungsvariablen zwingt git, das angegebene Verzeichnis als Git-Repository zu verwenden. Es wird während des normalen Gebrauchs nie benötigt.In Ihrem Beispiel möchten Sie ein nacktes Repository, da Sie a angegeben haben
GIT_DIR
und es nicht benannt ist.git
(der führende Punkt ist wichtig) und Sie keine--work-tree
Option angegeben oder dieGIT_WORK_TREE
Umgebungsvariable festgelegt habengit init
.Da ein nacktes Repository keinen Arbeitsbaum hat, ist eine große Auswahl an Befehlen mit einem nackten Repository nicht sinnvoll.
git add
ist nur einer.Gibt es einen bestimmten Grund, warum Sie einen nicht standardmäßigen Speicherort für Ihr Git-Repository verwenden müssen und nicht in einem
.git
Unterordner unter dem Arbeitsbaumstamm? Während es möglich ist, dies zu arrangieren, ist es tendenziell mehr Arbeit und anfälliger für Benutzerfehler.quelle
Erstellen Sie ein nacktes GIT-Repository
Ein kleiner Rant: Git ist nicht in der Lage, ein normales nacktes Repository selbst zu erstellen. Dummer Idiot in der Tat.
Um genau zu sein, ist es nicht möglich, leere Repositorys zu klonen. Ein leeres Repository ist also ein nutzloses Repository. Normalerweise erstellen Sie ein leeres Repository und füllen es sofort:
Git Add ist jedoch nicht möglich, wenn Sie ein nacktes Repository erstellen:
gibt einen Fehler "fatal: Dieser Vorgang muss in einem Arbeitsbaum ausgeführt werden".
Sie können es auch nicht überprüfen:
Die Lösung besteht darin, ein anderes Repository an einer anderen Stelle zu erstellen, eine Datei in dieses Repository einzufügen und sie in das nackte Repository zu verschieben.
hoffe das kann dir helfen
quelle
$ git --bare init bare.git
Initialized empty Git repository in /home18/cbailey/gittest8/bare.git/
$ git clone bare.git non-bare
Cloning into 'non-bare'... \\ done. \\ warning: You appear to have cloned an empty repository.
Ich hatte dieses Problem, weil
.git/config
enthaltenworktree = D:/git-repositories/OldName
. Ich habe es einfach geändertworktree = D:/git-repositories/NewName
Ich habe das entdeckt, weil ich Git Gui verwendet habe , das eine detailliertere Fehlermeldung zeigte:
quelle
fatal: this operation must be run in a work tree
. Das Ändern der Konfigurationsdatei hat das Problem für mich behoben.In meinem Fall befand ich mich für mein Repo im selben Ordner wie die ".git" -Datei. Ich musste ein Verzeichnis höher gehen, es löste es.
quelle
Wenn nichts anderes zu funktionieren scheint, überprüfen Sie den Pfad
git config core.worktree
. Wenn dieser Pfad nicht auf Ihr Arbeitsverzeichnis verweist, müssen Sie ihn möglicherweise aktualisieren.Die Art und Weise, wie ich diesen Fehler bekam, war, dass ich ein Git-Repository auf einem Netzwerklaufwerk erstellt habe. Es funktionierte gut auf einem Computer, gab diesen Fehler jedoch auf einem anderen zurück. Es stellte sich heraus, dass ich das Laufwerk einem Windows-Laufwerksbuchstaben auf dem Computer zugeordnet hatte, auf dem ich es erstellt hatte, aber nicht auf dem anderen Computer, und Git speicherte den Pfad zum Arbeitsbaum als zugeordneten Pfad und nicht als UNC-Pfad.
quelle
Wenn eine vorhandene (nicht nackte) Kasse diesen Fehler ausgibt, überprüfen Sie Ihre .git / config-Datei. Wenn dies der
core.bare
Fall ist, entfernen Sie diese Konfigurationszeilequelle
Wenn Ihnen keine der oben genannten Möglichkeiten hilft, überprüfen Sie die Anrufverfolgung unter dieser Fehlermeldung (
"fatal: This operation . . ."
) und suchen Sie das Skript und die Zeile, die den tatsächlichen Fehler auslösen. Sobald Sie diesen Aufruf von error () gefunden haben, deaktivieren Sie ihn und prüfen Sie, ob der von Ihnen versuchte Vorgang auch mit einigen Warnungen / Meldungen abgeschlossen ist. Ignorieren Sie sie vorerst. Wenn ja, wird nach Abschluss möglicherweise der Teil des Vorgangs erwähnt, der nicht erfolgreich abgeschlossen wurde. Behandeln Sie diesen Teil nun separat.In Bezug auf die obige Logik zu meinem Fall wurde diese Fehlermeldung angezeigt,
"fatal: This operation . . ."
als ich versuchte, den Android-x86-Code mit zu erhaltenrepo sync . . .
. und die Anrufverfolgung wurderaise GitError("cannot initialize work tree")
als error () -Aufruf angezeigt, der die obige Fehlermeldung ("fatal: . . ."
) verursacht. Also, danach zu kommentierenGitError()
in.repo/repo/project.py
,repo sync . . .
fortgesetzt und schließlich angezeigten Fehler für drei Projekte , die nicht richtig synchronisiert wurden. Ich habe gerade ihre*.git
Ordner aus ihren relevanten Pfaden im Android-x86-Quellbaum lokal gelöscht und binrepo sync . . .
erneut gelaufen und habe Erfolg gehabt!quelle
Das gleiche Problem, das ich bekam, habe ich folgende Schritte gemacht:
dann fängt es an zu arbeiten.
quelle
Die Konfigurationsdatei wurde bearbeitet und bare = true in bare = false geändert
quelle
Außerdem tritt dieser Fehler anscheinend auf, wenn Sie in NTFS Ram Drive klonen.
quelle