Ich habe ein Git-Repository, das nur zum Speichern von Grafiken und Sounddateien verwendet wird, die in mehreren Projekten verwendet werden. Sie befinden sich alle in einem Verzeichnis ohne Unterverzeichnisse. Jetzt habe ich gerade ein Skript erstellt, um diese Assets aus einem anderen strukturierten Verzeichnis mit mehreren Ebenen von Unterverzeichnissen zu kopieren.
Jetzt möchte ich nur, dass die (Quell-) hierarchische Dateistruktur von git verfolgt wird und das (Ziel-) flache Verzeichnis (mit allen Dateien auf einem Stapel) ignoriert wird.
Ich habe das Zielverzeichnis zu .gitignore hinzugefügt, aber git verfolgt immer noch Änderungen daran. Ich dachte, wenn ich das Löschen der alten Datei im Zielverzeichnis festschreibe, hört git möglicherweise auf, den neuen Inhalt zu verfolgen (vom Skript kopiert), aber das tut es nicht.
Wie lasse ich git das Zielverzeichnis vergessen?
quelle
Antworten:
Dieser Befehl bewirkt, dass git Ihr Verzeichnis und alle Dateien darunter aufzeichnet, ohne sie tatsächlich zu löschen:
git rm -r --cached <your directory>
Die
-r
Option bewirkt das Entfernen aller Dateien in Ihrem Verzeichnis.Die
--cached
Option bewirkt, dass die Dateien nur aus dem Git-Index entfernt werden, nicht aus Ihrer Arbeitskopie. Standardmäßiggit rm <file>
würde löschen<file>
.quelle
add -f
oder in Ihrer Situation erfolgen. Wie Gordon sagte, verhindert dies, dass Sie versehentlich eine Reihe von Dateien löschen - das Repository ist die Hauptliste, nicht der Gitignore. Auf diese Weise können Sie auch einige Dinge manuell verfolgen, die sonst von einer Platzhalterregel ignoriert würden, was ich als nützlich empfunden habe.-r
Option besteht nicht darin, "alle Dateien in Ihrem Verzeichnis zu entfernen", sondern die Unterverzeichnisse zu durchlaufen.Wenn Sie eine nachverfolgte Datei benötigen (eingecheckt), aber keine weiteren Änderungen einer Datei nachverfolgen möchten, während Sie sie in Ihrem lokalen Repository sowie im Remote-Repository aufbewahren, können Sie Folgendes tun:
Danach werden alle Änderungen an dieser Datei nicht mehr in angezeigt
git status
.quelle
git update-index --no-assume-unchanged dirname/**/*
Bei einem Unterverzeichnis mit dem Namen
blah/
add to git scheinen beide der folgenden Funktionen zu funktionieren, um neue Dateien in zu ignorierenblah/
. Zu .gitignore hinzugefügt:quelle
TL; DR, um Ihr Git-Repository zu bereinigen und sicherzustellen, dass ALLE Ihre ignorierten Elemente tatsächlich ignoriert werden:
Hinweis: Sie müssen kein Verzeichnis angeben. Auf diese Weise bereinigen Sie das gesamte Remote-Repo .
Um weiter zu gehen, lesen Sie dies
quelle
Ich bin mir nicht sicher, ob das zählt oder mich zu einem schlechten Menschen macht, aber hier ist es.
*Generated*
zur Root-.gitignore-Datei hinzugefügtdir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}
Ich fühle mich ein bisschen schlecht mit mir selbst ... aber es funktioniert tatsächlich.
quelle
Ok, es scheint, dass Sie zuerst einchecken müssen, wobei das Verzeichnis vollständig leer ist (weder alte noch neue Dateien), und alle danach hinzugefügten Dateien werden ignoriert. Wenn Sie die alten und neuen Dateien entfernen, bevor Sie sie festschreiben, werden die neuen Dateien dem Repo hinzugefügt, obwohl sie ignoriert werden sollten.
Zumindest hat das in dieser Situation bei mir funktioniert. Wäre immer noch großartig, wenn jemand mehr Einblick in die Vorgänge geben könnte.
quelle