Wie kann ich ein leeres Verzeichnis (das keine Dateien enthält) zu einem Git-Repository hinzufügen?
Antworten
Zu viele Anzeigen?Es gibt keine Möglichkeit, Git dazu zu bringen, Verzeichnisse zu verfolgen, daher besteht die einzige Lösung darin, eine Platzhalterdatei in das Verzeichnis einzufügen, das Git verfolgen soll.
Die Datei kann einen beliebigen Namen und Inhalt haben, aber die meisten Leute verwenden eine leere Datei mit dem Namen .gitkeep
(obwohl einige Leute das VCS-agnostische .keep
).
Der vorangestellte .
markiert sie als versteckte Datei.
Eine andere Idee wäre es, eine README
Datei, die erklärt, wofür das Verzeichnis verwendet werden soll.
Viele haben diese Frage bereits beantwortet. Ich füge hier nur eine PowerShell-Version hinzu.
Suche nach allen leeren Ordnern im Verzeichnis
Fügen Sie dort eine leere .gitkeep-Datei hinzu
Get-ChildItem 'Path to your Folder' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object { New-Item ($_.FullName + "\.gitkeep") -ItemType file}
Die Lösung von Jamie Flournoy funktioniert hervorragend. Hier ist eine etwas verbesserte Version, um die .htaccess
:
# Ignore everything in this directory
*
# Except this file
!.gitignore
!.htaccess
Mit dieser Lösung können Sie einen leeren Ordner übertragen, zum Beispiel /log
, /tmp
o /cache
und der Ordner bleibt leer.
Wie bereits erwähnt, ist es nicht möglich, leere Verzeichnisse hinzuzufügen, aber hier ist ein One-Liner, der leere .gitignore-Dateien zu allen Verzeichnissen hinzufügt.
ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'
Ich habe dies in ein Rakefile eingefügt, um den Zugriff zu erleichtern.
Hier ist ein Hack, aber es ist komisch, dass es funktioniert (Git 2.2.1). Ähnlich wie der Vorschlag von @Teka, aber leichter zu merken:
- Hinzufügen eines Submoduls zu einem beliebigen Repository (
git submodule add path_to_repo
) - Dadurch werden ein Ordner und eine Datei hinzugefügt
.submodules
. Begehen Sie eine Änderung. - Löschen
.submodules
und bestätigen Sie die Änderung.
Jetzt haben Sie ein Verzeichnis, das erstellt wird, wenn eine Übertragung ausgecheckt wird. Interessant ist, dass man den Inhalt des Tree-Objekts dieser Datei sehen kann:
fatal: Kein gültiger Objektname b64338b90b4209263b50244d18278c0999867193
Ich würde jedoch nicht dazu raten, es zu verwenden, da es in zukünftigen Versionen von Git nicht mehr funktionieren könnte. Dadurch kann Ihr Repository beschädigt werden.