5353 Stimmen

Wie kann ich ein leeres Verzeichnis zu einem Git-Repository hinzufügen?

Wie kann ich ein leeres Verzeichnis (das keine Dateien enthält) zu einem Git-Repository hinzufügen?

11voto

Zaz Punkte 42583

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.

10voto

Hainan Zhao Punkte 1683

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}

9voto

Roman Punkte 2440

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.

9voto

Peter Hoeg Punkte 893

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.

8voto

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X