Wie kann ich ein leeres Verzeichnis (das keine Dateien enthält) zu einem Git-Repository hinzufügen?
Antworten
Zu viele Anzeigen?Diese Lösung hat bei mir funktioniert.
1. Hinzufügen einer .gitignore
Datei in Ihr leeres Verzeichnis:
*
*/
!.gitignore
*
alle Dateien im Ordner ignorieren*/
Unterverzeichnisse ignorieren!.gitignore
die Datei .gitignore einbinden
2. Dann entfernen Sie Ihren Cache, stellen Ihre Dateien bereit, übertragen und pushen:
git rm -r --cached .
git add . // or git stage .
git commit -m ".gitignore fix"
git push
Sie können es nicht und werden es leider auch nie können. Das ist eine Entscheidung, die Linus Torvald selbst getroffen hat. Er weiß, was gut für uns ist.
Irgendwo da draußen habe ich einmal einen Aufschrei gelesen.
Ich fand Re: Leere Verzeichnisse.. aber vielleicht gibt es noch eine andere.
Sie müssen mit den Umgehungslösungen leben... leider.
Das Problem mit den leeren Verzeichnissen hatte ich auch schon. Das Problem bei der Verwendung von Platzhalterdateien ist, dass man sie erstellen und löschen muss, wenn sie nicht mehr benötigt werden (weil später Unterverzeichnisse oder Dateien hinzugefügt wurden). Bei großen Quellbäumen kann die Verwaltung dieser Platzhalterdateien mühsam und fehleranfällig sein.
Aus diesem Grund habe ich mich entschlossen, ein Open-Source-Tool zu schreiben, das die Erstellung/Löschung solcher Platzhalterdateien automatisch verwalten kann. Es ist für die .NET-Plattform geschrieben und läuft unter Mono (.NET für Linux) und Windows.
Schauen Sie einfach mal rein: http://code.google.com/p/markemptydirs
Lesen @ofavre und @stanislav-bashkyrtsev Ich bin überrascht, dass noch niemand diese einfache Änderung der Idee vorgeschlagen hat, um die ganze Sache vernünftig und sicher zu machen:
Anstatt ein gefälschtes Submodul in GIT einhacken , nur eine leere echte hinzufügen .
Eintreten: https://gitlab.com/empty-repo/empty.git
Ein GIT-Repository mit genau einem Commit:
commit e84d7b81f0033399e325b8037ed2b801a5c994e0
Author: Nobody <none>
Date: Thu Jan 1 00:00:00 1970 +0000
Keine Nachricht, keine übertragenen Dateien.
Uso
So fügen Sie ein leeres Verzeichnis zu Ihrem GIT-Repository hinzu:
git submodule add https://gitlab.com/empty-repo/empty.git path/to/dir
Um alle vorhandenen leeren Verzeichnisse in Submodule umzuwandeln:
find . -type d -empty -delete -exec git submodule add -f https://gitlab.com/empty-repo/empty.git \{\} \;
Git speichert den letzten Commit-Hash beim Erstellen der Submodul-Referenz, so dass Sie sich keine Sorgen machen müssen, dass ich (oder GitLab) dies zum Einschleusen bösartiger Dateien verwenden könnte. Leider habe ich keine Möglichkeit gefunden, die Verwendung der Commit-ID beim Auschecken zu erzwingen, so dass du manuell überprüfen musst, ob die Referenz-Commit-ID e84d7b81f0033399e325b8037ed2b801a5c994e0
mit git submodule status
nach dem Hinzufügen des Projektarchivs.
Immer noch keine native Lösung, aber die beste, die wir wahrscheinlich haben können, ohne dass jemand seine Hände realmente , realmente schmutzig in der GIT-Codebasis.
Anhang: Wiederherstellen dieser Übertragung
Sie sollten in der Lage sein, genau diese Übergabe mit (in einem leeren Verzeichnis) wiederherzustellen:
# Initialize new GIT repository
git init
# Set author data (don't set it as part of the `git commit` command or your default data will be stored as “commit author”)
git config --local user.name "Nobody"
git config --local user.email "none"
# Set both the commit and the author date to the start of the Unix epoch (this cannot be done using `git commit` directly)
export GIT_AUTHOR_DATE="Thu Jan 1 00:00:00 1970 +0000"
export GIT_COMMITTER_DATE="Thu Jan 1 00:00:00 1970 +0000"
# Add root commit
git commit --allow-empty --allow-empty-message --no-edit
Reproduzierbare GIT-Commits zu erstellen ist überraschend schwer