2012-04-09 6 views
44

Wie kann ich einen leeren Ordner lokal entfernen und auch für andere Mitarbeiter, die sich die Fernbedienung per Pull-Push teilen? Ich weiß, dass Ordner in diesem Sinne von Git nicht "verfolgt" werden, aber die Frage bleibt.git - wie leere Ordner zu entfernen und diese Änderung zu schieben?

z.B. Ich habe eine Datei in einen anderen Ordner verschoben und die Änderung (des Umzugs) übernommen.

Aber ich kann nicht git rm name der Ordner, wie ich bekomme "stimmt nicht überein" git rmdir name nicht existiert.

Ich kann eine git clean -f folder tun, aber wie wird das hochgeschoben?

kann ich direkt rm die Datei, aber wie bekomme ich diese Verzeichnis Entfernung richtig gemacht und an das Repository und dann an andere, wenn sie ziehen, so dass ihre bestehenden Ordner gelöscht wird?

+1

was meinst du die Frage bleibt? – manojlds

Antwort

75

Die kurze Antwort: Sie können Änderungen an Verzeichnissen (hinzugefügt, entfernt, usw.) nicht pushen, da Git Verzeichnisse auf eigene nicht verfolgt.

Nach dem FAQ:

Derzeit ist die Gestaltung des git-Index (Staging-Bereich) nur Dateien erlaubt aufgeführt werden, und niemand kompetent genug, um die Änderung zu machen leere Verzeichnisse zu ermöglichen, hat genug kümmerte sich um diese Situation, um es zu beheben.

Verzeichnisse werden beim Hinzufügen von Dateien automatisch hinzugefügt. Dies bedeutet, dass Verzeichnisse nicht zum Repository hinzugefügt werden müssen und nicht eigenständig verfolgt werden.

So weit wie Git betrifft, existiert Ihr leeres Verzeichnis nicht mehr.

Ich habe festgestellt, dass die Gewohnheit, git clean -fd zu verwenden, die Notwendigkeit beseitigt, die Entfernung von Verzeichnissen zu schieben. Allerdings kann git clean Elemente entfernen, die Sie möglicherweise nicht entfernen möchten (einschließlich neuer Dateien, die Sie noch nicht festgeschrieben haben), so dass ich zuerst git clean -fdn verwende, um zu sehen, was wird entfernt werden, wenn ich den Befehl verwenden.

Es sieht so aus, als ob Sie gezwungen sein könnten, mit Ihren anderen Entwicklern zu sprechen, um das Verzeichnis aufzuräumen.

+0

Mercurial hat hier einen besseren Ansatz - das Verzeichnis ist leer, wenn es leer ist: http://Stackoverflow.com/a/3917322/913223 und http://superuser.com/questions/81204/how-to-add-an-empty -folder-in-a-mercurial-Projekt –

+0

Diese Antwort ist unvollständig. Der 'git svn fetch' verwaltet leere Ordner.Sogar 'git svn rebase' erstellt leere Ordner neu, wenn Sie einfach einen entfernen. – Andry

-6

Ein etwas hacky Weg um dies zu tun ist, eine gefälschte Datei im Verzeichnis zu erstellen, zu committen und dann zu entfernen. Durch das Entfernen wird auch das Verzeichnis entfernt. So erstellen Name/fake.txt

git add name/fake.txt 
git commit -m "message" 
git rm name/fake.txt 
git commit -m "message2" 
+0

hat nicht für mich funktioniert :( – lImbus

+1

Dieser Ansatz funktioniert zwar, aber im zweiten Schritt möchten Sie den Ordner mit der Datei 'rm -rf name' löschen und dann die Änderung festschreiben, der Ordner ist nun weg – igniteflow

3
git add --all 
git clean -f -d 
git commit -m "trying to remove folders" 
git push 
0

Sie nicht leere Ordner schieben. Wenn Sie jedoch leere Ordner in Ihrem geklonten/lokalen Repo löschen möchten, übernehmen Sie die letzten Änderungen. Löschen Sie dann einfach alle Dateien außer dem .git-Ordner in Ihrer lokalen Kopie. Setzen Sie dann alle Änderungen erneut zurück, wodurch alle Dateien zurückgelegt werden, aber die leeren Verzeichnisse, die nicht erfasst werden, nicht angezeigt werden.

Verwandte Themen