Ordner kann nicht in Git hinzugefügt werden

21

Ich füge einen neuen Ordner hinzu (eigentlich habe ich ihn aus einem anderen Repo geklont und das vergessen), dann habe ich dort einige Änderungen vorgenommen. Außerdem habe ich an anderen Stellen eine Menge Änderungen vorgenommen, als ich versucht habe, git add zu machen

# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   protected/ext/SpecificFolder (modified content)
#

Dann erinnere ich mich, dass es vielleicht einen .git Ordner gab (weil ich vorher dort git geklont habe). Ich ging zu diesem Ordner und entferne auch nicht benötigte Dateien (Ordner) und den .git-Ordner. Ich habe den Git-Status überprüft, nichts Ungewöhnliches. Dann festschreiben und auschecken zu einem anderen Zweig und plötzlich stelle ich fest, dass dieser Ordner nicht zum letzten Festschreiben hinzugefügt wurde. Tatsächlich wurde ein Ordner hinzugefügt, die darin enthaltenen Dateien wurden jedoch ignoriert. Nun, auch wenn ich versuche, git addfür diesen Ordner nichts zu tun , passiert nichts und git statuses werden keine Änderungen angezeigt :(

Was kann ich tun ?

user1016265
quelle
6
Für den Fall, dass jemand anderes auf dieser Seite das Problem hat, mit dem ich konfrontiert war: Ich konnte Git keine Dateien in einem Unterordner hinzufügen. Später stellte ich fest, dass dieser Unterordner ein eigenes .gitRepository hatte und Dateien zu diesem Repository anstelle des Repositorys im Hauptordner hinzugefügt wurden. Selbst in der Git-Benutzeroberfläche wurde dieser Unterordner als Datei und nicht als Ordner angezeigt.
Nav

Antworten:

29

Git verfolgt keine Verzeichnisse; aber nur die Dateien in ihnen.

Es hört sich so an, als hätten Sie ein Ignoriermuster, das dazu führt, dass addSie nichts tun. Sie können ignorierte Dateien mit git status --ignored; Sie können dann mit verfolgt werdengit add --force protected/ext/SpecificFolder

Bryan
quelle
1
Nein, es ist nicht vorhanden git status --ignored, irgendwie denke ich, dass es mit dem Submodul verbunden ist
user1016265
1
Dieser Befehl war ein Lebensretter. Ohne es hätte ich nie herausgefunden, welches Verzeichnis ignoriert wurde.
IgorGanapolsky
wow ..... Ich fühlte mich total dumm, diese Tatsache zu lesen, nachdem ich git seit einiger Zeit benutzt habe ^^
XandruCea
1
Aha, endlich. Das war mein Problem. Ich hatte .gitignore vom übergeordneten Modul in Submodule kopiert. Ich habe 'config /' ignoriert und später ein Verzeichnis unter dem Quellverzeichnis namens config erstellt. Konnte nicht von Cource hinzufügen. Problem jetzt gelöst danke :-)
Avec
7

Git verfolgt keine leeren Verzeichnisse. Wenn Sie ein Projekt mit mehreren Ebenen von Unterverzeichnissen haben, verfolgt git tatsächlich die Verzeichnisse mit den darin enthaltenen Dateien. Wenn nicht, dann wäre es ein einziges flaches Repository von Dateien.

Ed Mangini
quelle
Wow das ist so eine einfache Sache, aber verdammt. Ich las das und
sagte:
3

Ich habe genau das getan, was dieser Benutzer getan hat: Ein vorhandenes Git-Repository in einem anderen hinzufügen.

Das Symptom war, dass git dieses Verzeichnis als Datei erkannte und daher die Dateien des Verzeichnisses nicht hinzufügen konnte.

Um diese Frage zu lösen, habe ich den .gitOrdner im Ordner gelöscht , diesen Ordner in ein anderes Verzeichnis verschoben, den Index gelöscht, das Verzeichnis entfernt, in dem sich mein Repository befindet, und dann konnte ich das Verzeichnis ordnungsgemäß hinzufügen.

Die Moral lautet: Fügen Sie kein Repository in einem anderen hinzu.

Madmin
quelle
5
Es kann auch durch Laufen behoben werdengit rm --cached path_to_submodule
Victor Marchuk
2

Hier gibt es eine bessere Antwort: .gitkeep usage

TL; DR, fügen Sie eine .gitkeepDatei zu Ihrem leeren Verzeichnis hinzu

Yarh
quelle
0

Versuchen Sie, eine Datei in diesem Verzeichnis hinzuzufügen.

$ git add my-dir/index.html

Wenn Sie eine Ausgabe wie die folgende sehen:

The following paths are ignored by one of your .gitignore files:
my-dir/index.html
Use -f if you really want to add them.
fatal: no files added

In einem Ihrer Gitignores gibt es eine Regel, die Sie daran hindert, dieses Verzeichnis hinzuzufügen.

Gayan Weerakutti
quelle
0

Ich fand ähnliche Nebenwirkungen, nachdem ich versucht hatte, ein früheres Submodul in einen normalen Unterordner umzuwandeln.

Das erneute Hinzufügen des Ordners, den ich konvertieren wollte, schien zu funktionieren, aber es stellte sich heraus, dass die darin enthaltenen Dateien nicht wirklich hinzugefügt wurden.

Der Versuch, eine Datei spezifisch hinzuzufügen, warnte mich besser

git add sites/all/modules/contrib/transclusion/transclusion.module 
fatal: Pathspec 'sites/all/modules/contrib/transclusion/transclusion.module' is in submodule 'sites/all/modules/contrib/transclusion'
  • Es hing also damit zusammen, wie ich manuell versucht hatte, das alte Submodul zu entfernen, da es keinen gut dokumentierten Prozess gab, um es richtig zu machen. - Ich hatte es gerade von .gitmodules gelöscht. Andere Dinge waren tatsächlich notwendig, um die Schatten des Submoduls zu beseitigen.
dman
quelle