git update-index --assume-unverändert gibt "fatal kann Datei nicht markieren" zurück

133

Ich habe das gleiche Problem wie das OP in diesem Beitrag, aber ich verstehe die als richtig gekennzeichnete Antwort nicht (ich sehe nicht, dass sie erklärt, wie die Situation behoben werden kann).

Ich mache das und bekomme diesen Fehler:

$ git update-index --assume-unchanged web.config
fatal: Unable to mark file web.config
  1. Die Datei wird dem Repository hinzugefügt

  2. Es ist NICHT in .git/info/exclude

  3. Es ist NICHT in .gitignore(es war, aber ich habe es herausgenommen und dann gezwungen, web.config mit hinzuzufügen git add -f web.config, festzuschreiben und diese Änderungen in das Repo zu übertragen)

  4. Wenn ich Git ls-files -o mache, ist es NICHT da

Was kann ich also tun, um das Problem zu beheben?

Karen
quelle
1
Lesen Sie die akzeptierte Antwort in der angegebenen Frage erneut: Sie darf NICHT in der Ausgabe von erscheinen git ls-files -o. Wenn ja, ist es nicht im Repo.
eckes
Mein Tippfehler, es ist NICHT in der Liste, und es ist definitiv im Repo
Karen

Antworten:

108

Ich hatte das gleiche Problem wie Sie und hatte die gleichen vier Schritte ausgeführt, die Sie oben angegeben haben, und hatte die gleichen Ergebnisse. Dies beinhaltete die Tatsache, dass meine Datei bei der Ausführung aufgelistet wurde git ls-files -o. In meinem Fall habe ich jedoch auch versucht, git update-index --assume-unchangedeine Datei auszuführen ls-files -o, die bei der Ausführung nicht aufgeführt war , und trotzdem den gleichen Fehler " fatal: Unable to mark file" erhalten.

Ich dachte, dass es vielleicht ein Fehler war, und lud die neueste Version von git herunter, aber das half nicht.

Was mir schließlich klar wurde, ist, dass bei diesem Befehl zwischen Groß- und Kleinschreibung unterschieden wird! Dies beinhaltet den vollständigen Pfad und den Dateinamen. Nachdem der Pfad zum Verzeichnis so aktualisiert wurde, dass der vollständige Pfad mit der richtigen Schreibweise angegeben wurde, wurde der Befehl ordnungsgemäß ausgeführt.

Beachten Sie, dass dies bei Git für Windows der Fall war, sodass Ihre Ergebnisse bei anderen Plattformen variieren können.

David Marchelya
quelle
4
Vielen Dank! Das hat funktioniert! Ich glaube, ich habe vorher alle Kleinbuchstaben oder CDs in den Ordner verwendet und dann versucht, diesen Befehl zu verwenden.
Karen
Wenn sich die Datei ändert, ist dies falsch. Der Befehl ist ein Versprechen des Benutzers an Git, dass er keine Zyklen mit der Angabe der Datei verschwenden muss, um festzustellen, ob sie sich geändert hat (für langsame Dateisysteme ;-). Irgendwann wird einer der Git-Befehle es bemerken und Sie werden überrascht sein. Die Dokumentation wird aktualisiert, um dies zu verdeutlichen.
Philip Oakley
1
Vielen Dank, dies hat mir indirekt geholfen, ein schlechtes Shell-Skript in einem Projekt zu entdecken. Wenn kein Pfad vorhanden ist, schlägt dies fehl! :)
Uchuugaka
Beachten Sie auch, dass dieser Befehl für nicht versionierte Dateien nicht funktioniert. Wenn Sie eine Datei haben, die nicht im Repository vorhanden ist, kann sie in .gitignore ignoriert werden, und Junge, finde ich das albern, wenn ich das schreibe, aber ich denke, es könnte jemandem helfen, der so dumm ist wie ich. :)
Jesse Ivy
Nur um zu verdeutlichen, worauf einige der Kommentare hingewiesen haben, wird dieser Fehler angezeigt, wenn Sie eine Windows-Shell verwenden, die es Ihnen ermöglicht, mit nicht übereinstimmenden Groß- und Kleinschreibung in Ihren CDs umzugehen. Geben Sie git entweder den vollständigen Pfad zur Datei (mit der richtigen Groß- und Kleinschreibung) oder die CD wieder hoch und dann wieder runter (wieder mit der richtigen Groß- und Kleinschreibung in jeder Phase).
dlf
54

Ich hatte das gleiche Problem auf einem Mac. Groß- und Kleinschreibung war für mich kein Problem - das Problem war, dass ich zuerst meinen Git zurücksetzen musste:

Problem:

 git update-index --assume-unchanged index.php
 fatal: Unable to mark file index.php

Lösung:

git reset HEAD
Unstaged changes after reset:
M   index.php
git update-index --assume-unchanged index.php
Toby Beresford
quelle
2
Ich habe das gleiche Problem auf dem Mac und keine der vorgeschlagenen Problemumgehungen hat bei mir funktioniert. Irgendeine Idee? Ich versuche, die Verfolgung eines Verzeichnisses nur vorübergehend auf meinem Computer zu beenden. Der Name des Verzeichnisses lautet Intellij_idea_project_files /. Anscheinend wurden alle Dateien in diesem Verzeichnis bis auf eine ordnungsgemäß markiert, und das ist my_project_name.iml.
Javad Sadeqzadeh
1
hatte das gleiche Problem und dies ist die Lösung, die für mich funktioniert hat, nicht die über Groß- und Kleinschreibung
CesarPim
Ich bin auch auf Mac und für mich war die "Lösung", die Datei zu löschen. (Ich würde dies als Antwort posten, bin mir aber nicht sicher, was passiert ist, vielleicht später.) Etwas Seltsames ist passiert. Git sagte, die Datei wurde geändert (ich wollte --skip-worktree). Ich habe lokale Änderungen durch Ausführen entfernt, git restore .aber das Überspringen gab immer noch den Fehler. Schließlich habe ich versucht, die Datei zu löschen. Erstaunlicherweise sagte Git nicht, dass es eine Veränderung gab. Es ist also klar, dass etwas Funky passiert ist, seit Git es definitiv verfolgt hat und ich es definitiv gelöscht habe und es definitiv nicht gesagt hat, dass das eine Änderung war.
Captain Man
25

In meinem Fall war der Baum, den ich markierte, ein Verzeichnis und keine Datei wie in Ihrem Fall, und mir fehlte der Schrägstrich nach seinem Namen.

Falsch -

git update-index --assume-unchanged directory-name

Richtig -

git update-index --assume-unchanged directory-name/

Beachten Sie den Schrägstrich (/) am Ende.

Sahil Singh
quelle
1
Danke, aber wenn ich das mache, bekomme ich "Pfadverzeichnisname ignorieren /"
damian
@damian Geben Sie den vollständigen Dateipfad anstelle des übergeordneten Verzeichnisses an.
Nahid
6

fatal: Datei Localization / el-GR.js kann nicht markiert werden

Was Sie tun können, ist:

  1. Gehen Sie zum richtigen Pfad, in dem sich die Datei in Ihrem lokalen Verzeichnis befindet (in GITBASH).
  2. Aktualisieren Sie den Index $git update-index --assume-unchanged <file name>

Das hat mir geholfen! :) :)

Grace Aloysius
quelle
2
$ git update-index --assume-unchanged ./.idea/vcs.xml fatal: Unable to mark file .idea/vcs.xml $ cd .idea git update-index --assume-unchanged .Hat funktioniert, danke!
AVProgrammer
4

Wenn Ihr Pfad Leerzeichen enthält, wird dieser Fehler möglicherweise auch dann angezeigt, wenn Sie das richtige Gehäuse haben.

Dies führt zu dem "schwerwiegenden" Fehler:

git update-index --assume-unchanged code/Solution Files/WebEssentials-Settings-json

Um dies zu beheben, fügen Sie einfach Anführungszeichen um den Pfad hinzu.

git update-index --assume-unchanged "code/Solution Files/WebEssentials-Settings-json"
Jon Crowell
quelle
In meinem Fall hatte ich das / rückwärts.
Erik Bergstedt
4

Mein Problem war, dass ich den Befehl mit einem * Platzhalter ausprobiert habe, vorausgesetzt, er wäre rekursiv, aber das war nicht der Fall.

Also habe ich getan

$ git reset HEAD
Unstaged changes after reset: 
M   .gradle/1.9/taskArtifacts/cache.properties.lock
M   .gradle/1.9/taskArtifacts/fileHashes.bin
M   .gradle/1.9/taskArtifacts/fileSnapshots.bin
M   .gradle/1.9/taskArtifacts/outputFileStates.bin
M   .gradle/1.9/taskArtifacts/taskArtifacts.bin

ausführen

$ git update-index --assume-unchanged .gradle/1.9/taskArtifacts/*

arbeitete damals für mich und führte nicht zu OPs und meinem Problem.

methisch
quelle
4

Ich hatte dieses Problem, als ich versuchte, * .orig-Dateien zu entfernen.

Folgendes habe ich getan, um sie zu entfernen:

$git reset -- *.orig

wenn das nicht funktioniert:

$git clean -fd
EdC
quelle
5
Es ist gefährlich, Leute zu bitten, einen Befehl auszuführen, ohne ihnen mitzuteilen, dass dieser Befehl Dateien löscht. $ Git sauber -fd
HS Rathore
4

Stellen Sie sicher, dass die Datei zu Git Repo hinzugefügt wurde. Wenn nicht, fügen Sie die Datei zu Git Repo hinzu, und versuchen Sie dann, dass sie funktioniert.

bisw
quelle
3

--assume-unchangedEs geht um langsame Dateisysteme, und ein Benutzer verspricht, dass Git diese Datei nicht überprüfen muss, da Git davon ausgehen kann, dass sie unverändert ist. Aber einige Befehle überprüfen und produzieren immer noch "Überraschung"!

Nicht für Dateien verwenden, die sich ändern.

Es tut mir leid, der Überbringer dieser Neuigkeiten zu sein (ich habe einen Patch in Bearbeitung, um diese Dokumentation zu ändern).

Philip Oakley
quelle
1
Wie soll man dann eine Datei aktualisieren, um sie als "Verfolge mich nicht" zu markieren?
Javadba
@javadba siehe stackoverflow.com/a/6964492/717355 'git rm --cached filename'
Philip Oakley
thx - upvoted dazu: ich hatte es tatsächlich benutzt, kurz nachdem ich hier gepostet hatte. funktioniert.
Javadba
Beachten Sie, dass git rm --cached filenamedie Datei gelöscht wird, wenn andere ziehen
Ryan Taylor
@RyanTaylor Ja, es ist wichtig, dass Benutzer erkennen, was ihr Befehl sagt. "Hören Sie auf, dies zu verfolgen, entfernen Sie es aus meinen Revisionen". Lesen Sie die neueste Ansicht des Betreuers und meinen neuen Patch. Public-inbox.org/git/[email protected]/…
Philip Oakley
3

In meinem Fall habe ich versucht, eine der oben genannten Methoden anzuwenden, aber kein Glück.

Nach vielen Versuchen dachte ich nur daran, meine Datei zum Indizieren hinzuzufügen.

git add myfile.php

Git lehnte diese Aktion ab, aber er riet mir, sie gewaltsam zu machen.

git add myfile.php -f

Und das hat bei mir funktioniert.

Stepanov max
quelle
2

Stellen Sie sicher, dass Sie "web.config" eingecheckt haben.

Ist dies nicht der Fall, wird diese Fehlermeldung angezeigt.

OneSolitaryNoob
quelle
1

Vielleicht nützlich für jemanden. Ich hatte das gleiche Problem und war kein Syntaxproblem, kein Name mit Leerzeichen, kein Pfadproblem und der Befehl git reset funktionierte nicht. Ich habe aus einem Ordner in Apache www festgeschrieben und der Apache-Dienst wurde gestoppt. Der Apache-Dienst wurde erneut gestartet und der Fehler ist behoben

Hernancortes
quelle
1

Ein häufiger Fehler bei der Verwendung dieses Befehls besteht darin, anzunehmen, dass die Datei entweder nicht verfolgt oder von git bereits ignoriert wurde.

Stellen Sie zunächst sicher, dass die Datei durch Ausführen verfolgt wird

git ls-files | grep relative_path/to/file

Wenn Ihre Datei nicht angezeigt wird, müssen Sie sie zuerst hinzufügen:

git add relative_path/to/file

Wenn dies Ihre Datei anzeigt oder Sie diese Datei bereits zu git hinzugefügt haben, sollten Sie in der Lage sein, git-Annahmebefehle normal auszuführen:

git update-index --skip-worktree relative_path/to/file

oder für Ordner

git update-index --skip-worktree relative_path/to/folder/

Sie können durch Ausführen überprüfen, ob angenommen wird, dass Ihre Datei ignoriert wird

git ls-files -v | grep ^S

Das S-Zeichen steht für übersprungene Dateien.

Ahmed Amr
quelle
0

Für alle zukünftigen Besucher. Keiner der oben genannten Punkte hat mein Problem gelöst. Mir wurde klar, dass die .gitignoreDatei im richtigen Verzeichnis abgelegt werden muss. In meinem Fall wurde .gitignoredas Problem behoben , nachdem ich in das Stammverzeichnis der Anwendung gewechselt war.

Amir
quelle
0

Überprüfen Sie, ob die zu markierende Datei vorhanden ist und richtig geschrieben wurde, insbesondere der Dateipfad und das Dateitrennzeichen. Die Dateitrennzeichen von Windows-System und Linux-System sind in verschiedene Richtungen.

Chengwengao
quelle
1
Diese Antwort ist zwar nicht falsch, fügt der Frage jedoch nichts hinzu. Alle Ihre Vorschläge wurden bereits in vorhandenen Antworten erwähnt.
Matt
0

Ich habe festgestellt, dass dies manchmal nicht funktioniert, weil Sie die Datei bereits an Ihren .gitignore übergeben und einen Push oder Pull ausgeführt haben. Sie müssen nur den Push ausführen und Ihre Datei sollte bei nachfolgenden Commits ignoriert werden, auch wenn Sie die Datei lokal ändern.

larrytech
quelle
0

Ich hatte das gleiche Problem mit Cygwin in Windows. Geben Sie den vollständigen Dateipfad an

Sudeep
quelle