Siehe unter der durchgezogenen Linie für meine ursprüngliche Frage.
Ich habe einen Ordner in meinem lokalen Verzeichnis, der nicht verfolgt wird. Wenn ich renne git status
, bekomme ich:
Changed but not updated:
modified: vendor/plugins/open_flash_chart_2 (modified content, untracked content)
Wenn ich tippe und es git add vendor/plugins/open_flash_chart_2
dann git status
erneut versuche , wird immer noch "nicht verfolgt" angezeigt. Was ist los?
Hier ist eine einfache Zusammenfassung meiner letzten halben Stunde:
Es wurde festgestellt, dass mein Github-Repo mein
vendor/plugins/open_flash_chart_2
Plugin nicht verfolgt . Insbesondere gibt es keinen Inhalt und es wird ein grüner Pfeil auf dem Ordnersymbol angezeigt.Versucht
git submodule init
No submodule mapping found in .gitmodules for path 'vendor/plugins/open_flash_chart_2'
Versucht
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
vendor/plugins/open_flash_chart_2 already exists in the index
git status
modified: vendor/plugins/open_flash_chart_2 (untracked content)
Ich habe nach einer Datei gesucht, die
.gitmodules
in meinem Repository / lokalen Verzeichnis benannt ist, konnte aber keine finden.
Was muss ich tun, damit meine Submodule funktionieren, damit Git richtig mit dem Tracking beginnen kann?
Dies hängt möglicherweise nicht zusammen (ich füge es hinzu, falls es hilft), aber jedes Mal, wenn ich git commit -a
anstelle meiner üblichen git commit -m "my comments"
Eingabe tippe, wird ein Fehler ausgegeben:
E325: ATTENTION
Found a swap file by the name ".git\.COMMIT-EDITMSG.swp"
dated: Thu Nov 11 19:45:05 2010
file name: c:/san/project/.git/COMMIT_EDITMSG
modified: YES
user name: San host name: San-PC
process ID: 4268
While opening file ".git\COMMIT_EDITMSG"
dated: Thu Nov 11 20:56:09 2010
NEWER than swap file!
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Ich bin ein absoluter Neuling bei Github und obwohl ich versucht habe, die Dokumentation durchzugehen, bin ich ein bisschen ratlos über diese besonderen Probleme. Danke dir.
quelle
git submodule add
,git submodule update --init
.tracking
Tag scheint für die Themen "Website-Besucher-Tracking" verwendet zu werden, sodass dies auch nicht zutreffen würde.Antworten:
Sie haben den
vendor/plugins/open_flash_chart_2
Eintrag "gitlink" hinzugefügt , ihn jedoch nie als Submodul definiert. Tatsächlich verwenden Sie die interne Funktion, die das Git-Submodul verwendet (Gitlink-Einträge), aber Sie verwenden nicht die Submodul-Funktion selbst.Sie haben wahrscheinlich so etwas gemacht:
Dieser letzte Befehl ist das Problem. Das Verzeichnis
vendor/plugins/open_flash_chart_2
beginnt als unabhängiges Git-Repository. Normalerweise werden solche Unter-Repositorys ignoriert. Wenn Sie jedoch git add anweisen, es explizit hinzuzufügen, wird ein Gitlink-Eintrag erstellt, der auf das HEAD-Commit des Unter-Repositorys verweist, anstatt den Inhalt des Verzeichnisses hinzuzufügen. Es könnte schön sein, wenn git add sich weigern würde, solche „Semi-Submodule“ zu erstellen.Normale Verzeichnisse werden in Git als Baumobjekte dargestellt. Baumobjekte geben den darin enthaltenen Objekten Namen und Berechtigungen (normalerweise andere Baum- und Blob-Objekte - Verzeichnisse bzw. Dateien). Submodule werden als "Gitlink" -Einträge dargestellt. Gitlink-Einträge enthalten nur den Objektnamen (Hash) des HEAD-Commits des Submoduls. Das „Quell-Repository“ für das Commit eines Gitlinks wird in der
.gitmodules
Datei angegeben (und in der.git/config
Datei, sobald das Submodul initialisiert wurde).Was Sie haben, ist ein Eintrag, der auf ein bestimmtes Commit verweist, ohne das Quell-Repository für dieses Commit aufzuzeichnen. Sie können dies beheben, indem Sie Ihren Gitlink entweder zu einem geeigneten Submodul machen oder indem Sie den Gitlink entfernen und durch „normalen“ Inhalt (einfache Dateien und Verzeichnisse) ersetzen.
Verwandle es in ein richtiges Submodul
Das einzige Bit, das Sie vermissen, um es richtig
vendor/plugins/open_flash_chart_2
als Submodul zu definieren, ist eine.gitmodules
Datei. Normalerweise (wenn Sie es nicht bereits als nackten Gitlink-Eintrag hinzugefügt hätten) würden Sie einfach Folgendes verwendengit submodule add
:Wie Sie festgestellt haben, funktioniert dies nicht, wenn der Pfad bereits im Index vorhanden ist. Die Lösung besteht darin, den Gitlink-Eintrag vorübergehend aus dem Index zu entfernen und dann das Submodul hinzuzufügen:
Dadurch wird Ihr vorhandenes Sub-Repository verwendet (dh das Quell-Repository wird nicht neu geklont) und eine
.gitmodules
Datei bereitgestellt, die folgendermaßen aussieht:Es wird auch ein ähnlicher Eintrag in Ihrem Haupt-Repository vorgenommen
.git/config
(ohne diepath
Einstellung).Wenn Sie dies festlegen, erhalten Sie ein geeignetes Submodul. Wenn Sie das Repository klonen (oder auf GitHub pushen und von dort klonen), sollten Sie in der Lage sein, das Submodul über neu zu initialisieren
git submodule update --init
.Ersetzen Sie es durch einfachen Inhalt
Im nächsten Schritt wird davon ausgegangen, dass Ihr Sub-Repository in
vendor/plugins/open_flash_chart_2
keinen lokalen Verlauf hat, den Sie beibehalten möchten (dh alles, was Sie interessiert, ist der aktuelle Arbeitsbaum des Unter-Repositorys, nicht der Verlauf).Wenn Sie einen lokalen Verlauf im Sub-Repository haben, den Sie interessieren, sollten Sie das
.git
Verzeichnis des Sub-Repositorys sichern, bevor Sie es im zweiten Befehl unten löschen. ( Beachten Sie auch das folgende Beispiel für einen Git-Teilbaum , in dem der Verlauf des HEAD des Sub-Repositorys beibehalten wird.)Dieses Mal ist das Verzeichnis beim Hinzufügen kein Unter-Repository, daher werden die Dateien normal hinzugefügt. Da wir das
.git
Verzeichnis gelöscht haben, gibt es leider keine einfache Möglichkeit, die Dinge mit dem Quell-Repository auf dem neuesten Stand zu halten.Sie können stattdessen eine Teilbaumzusammenführung verwenden. Auf diese Weise können Sie problemlos Änderungen aus dem Quell-Repository übernehmen und gleichzeitig die Dateien in Ihrem Repository "flach" halten (keine Submodule). Der Befehl git subtree eines Drittanbieters ist ein netter Wrapper um die Funktion zum Zusammenführen von Teilbäumen.
Später:
Der Git-Teilbaum verfügt auch über eine
--squash
Option, mit der Sie vermeiden können, den Verlauf des Quell-Repositorys in Ihren Verlauf aufzunehmen, aber dennoch Upstream-Änderungen übernehmen können.quelle
rm -rf vendor/plugins/open_flash_chart_2/.git
und es heißt 'rm' wird nicht erkannt. Dann habe ich es versuchtgit rm -rf vendor/plugins/open_flash_chart_2/.git
und es standfatal: pathspec 'vendor/plugins/open_flash_chart_2/.git' did not match any files
(aber ich kann es im Windows Explorer erreichen!)..git
und die Dateien "flach" erneut hinzufügen (die erste Option "Einfacher Inhalt").subtree
nicht mit dem Zusammenführen von Teilbäumen verwechselt werden darf. Es ist kein Wrapper. Autor sagt so: Pgit readtree --prefix=path
und Zusammenführen von Teilbäumen:git merge
mit-s subtree
oder-Xsubtree=path
). Es hat auch nette Extras "oben":--squash
Modus,split
Befehl und diepush
undpull
Helfer.