Ich habe mein Repo @ Github. Ich habe zu Hause gearbeitet und es auf Github geschoben. Dabei wurden Dateien und Verzeichnisse gelöscht. Jetzt bin ich auf meiner Arbeitsbox, die eine Kopie des Codes hatte, bevor die Dateien und Verzeichnisse gelöscht wurden.
Ich habe folgendes ausgegeben:
git remote update
git checkout HEAD
git pull origin HEAD
Es löschte alle Dateien, die es haben sollte, aber nicht die Verzeichnisse, in denen sich die Dateien befanden.
Zwei Fragen:
- Warum wurden die Verzeichnisse nicht entfernt?
- Gibt es einen Git-Befehl, den ich im aktuellen Status ausgeben kann, um sie zu entfernen?
Antworten:
Git verfolgt keine Verzeichnisse und entfernt daher keine Verzeichnisse, die aufgrund einer Zusammenführung oder einer anderen Änderung leer werden. Sie können jedoch verwenden
git clean -fd
untracked Verzeichnisse (die entfernen , um-fd
Markierungsmittel f orce Entfernung von untracked Dateien und d irectories).quelle
git clean
wird natürlich.-n
(Trockenlauf) aus-f
, damit Sie sehen können, was gelöscht werden soll. Zumalgit clean -d
nicht nur diese problematischen Verzeichnisse, sondern auch nicht verfolgte Dateien entfernt werden.git clean
keine in .gitignore aufgelisteten Dateien, es sei denn, Sie übergeben die-x
Option.Als Teil der meisten Operationen, die den Arbeitsbaum ändern (ziehen, zusammenführen, auschecken usw.), entfernt git alle Verzeichnisse, die durch diese Operation leer gemacht werden (dh git hat die letzte Datei entfernt).
git entfernt keine Verzeichnisse, die nicht vollständig leer sind. Wenn Sie also Dateien ausgeblendet oder ignoriert haben , bedeutet dies nicht unbedingt, dass git dieses Verzeichnis entfernen kann, nur weil git die zuletzt verfolgte Datei aus diesem Verzeichnis entfernt. git betrachtet dies nicht als Fehlerbedingung und beschwert sich daher nicht darüber.
quelle
git checkout master
", aber die meisten Leute würden einfach sagen "Ich habe auf Master umgeschaltet / ausgecheckt". Wie auch immer, als Git sagte: "Schon auf dem neuesten Stand." es bedeutet, dass es nichts getan hat. git entfernt nur Verzeichnisse, die es leer macht .git checkout
hat kein vollständig leeres Verzeichnis entfernt.Git verfolgt keine Verzeichnisse, Dateien (mit ihrem Pfad). Git erstellt alle Verzeichnisse für diese Pfade, wenn sie noch nicht vorhanden sind (cool!), Löscht sie jedoch nicht , wenn alle in einem Pfad enthaltenen Dateien verschoben oder gelöscht werden (nicht cool ☹ ... aber es gibt Gründe).
Lösung (sobald Sie gezogen / vorgespult / zusammengeführt haben):
Wenn Sie dies nicht
stash
vorher tunclean
, verlieren Sie alle Ihre nicht verfolgten Dateien (irreversibel).Hinweis: Da hierdurch auch alle ignorierten Dateien bereinigt werden, müssen Sie möglicherweise einige Ihrer Build-Skripte erneut ausführen, um Projektmetadaten neu zu erstellen (z
./gradlew eclipse
. B. :) . Dadurch werden auch leere Verzeichnisse gelöscht, die niemals Teil der Pfade von Git-Dateien waren.quelle
Ich hatte das gleiche Problem, in meinem Fall beim Build Service (CI). Da GIT alle Dateien ohne Bereinigungsordner abruft, sind alle Bin / Obj, die zuvor vom CI erstellt wurden, verschmutzt. Wenn ich also ein Testprojekt entferne, wird der Bin enthält weiterhin die DLL und erwähnt Tests, die nicht vorhanden sind.
Um dieses Problem zu lösen; Dieser Befehl scheint den Trick zu tun (zumindest für mich)
Dabei entfernt X alle nicht verfolgten Dateien:
quelle
Git verfolgt derzeit keine Verzeichnisse (siehe Git-Wiki ), dh
Sie können weder leere Verzeichnisse hinzufügen, noch wird Git Verzeichnisse entfernen, die leer enden.(EDIT: Danke, Manni, ich habe mich geirrt! Sie können keine leeren Verzeichnisse hinzufügen , aber git entfernt Verzeichnisse, die leer werden, weil ihr verfolgter Inhalt gelöscht wurde. )Der Befehl zum Entfernen der leeren Verzeichnisse hängt von Ihrem Betriebssystem ab.
Für Linux könnten Sie zB verwenden
Dadurch werden jedoch alle leeren Verzeichnisse entfernt!
quelle