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?

17voto

DevonDahon Punkte 5636

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

16voto

user2334883 Punkte 401

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.

15voto

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

13voto

Michael Johnson Punkte 2227

Wenn Sie eine .gitignore Wenn Sie eine beliebige Menge an Inhalt in die Datei einfügen wollen (der von Git ignoriert werden soll), sollten Sie eine einzelne Zeile mit einem Sternchen hinzufügen * um sicherzustellen, dass Sie den ignorierten Inhalt nicht versehentlich hinzufügen.

13voto

ntninja Punkte 996

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

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