29 Pytanie: Jak mogę dodać pusty katalog do repozytorium Git?

pytanie utworzone w Sat, Dec 20, 2014 12:00 AM

Jak mogę dodać pusty katalog (nie zawierający żadnych plików) do repozytorium Git?

    
3842
  1. Chociaż nie jest to przydatne, istnieje sposób na włamanie pustego (naprawdę pustego) katalogu do repo . Nie będzie jednak checkout z aktualnymi wersjami Gita.
    2012-07-22 14: 18: 24Z
  2. @ tiwo Ja nie zgadzam się, że nie jest to przydatne. Twoja hierarchia katalogów jest częścią twojego projektu, więc powinna być kontrolowana wersji.
    2013-01-29 20: 19: 57Z
  3. W moim przypadku chciałbym dodać strukturę katalogów dla plików tmp, ale nie same pliki tmp. Robiąc to, mój tester ma poprawną strukturę (w przeciwnym razie są błędy), ale nie blokuję zatwierdzeń danymi tmp. Tak, to jest dla mnie przydatne!
    2013-03-13 03: 32: 56Z
  4. @ AdamMarshall Myślę, że tiwo mówiło, że hack nie jest użyteczny, ponieważ jest ignorowany przez kasę. Tmp dirs brzmią jak użyteczna funkcja dla VCS.
    2013-04-22 21: 33: 14Z
  5. Dlaczego nie ma procedury tworzenia plików tmp również tworzy katalog tmp?
    2013-07-09 03: 11: 19Z
29 odpowiedzi                              29                         

Innym sposobem na pozostawienie katalogu (prawie) pustego (w repozytorium) jest utworzenie pliku .gitignore wewnątrz tego katalogu, który zawiera te cztery linie:

 
# Ignore everything in this directory
*
# Except this file
!.gitignore

Wtedy nie musisz prawidłowo zamawiać zamówienia w rozwiązaniu m104.

Daje to również korzyść, że pliki w tym katalogu nie będą wyświetlane jako „nieśledzone”, gdy wykonasz status git.

Utrzymywanie trwałego komentarza @GreenAsJade :

  

Myślę, że warto zauważyć, że to rozwiązanie robi dokładnie to, o co prosiło pytanie, ale może nie jest tym, czego wielu ludzi szukających tego pytania szukało. To rozwiązanie gwarantuje, że katalog pozostanie pusty. Mówi: „Naprawdę nigdy nie chcę, aby pliki były sprawdzane tutaj”. W przeciwieństwie do „Nie mam jeszcze żadnych plików do sprawdzenia, ale potrzebuję katalogu tutaj, pliki mogą pochodzić później”.

    
3740
2018-11-20 11: 59: 59Z
  1. Myślę, że rozwiązanie README zaproponowane przez @JohnMee powinno być używane razem z tym; plik .gitignore zawiera wyjaśnienie tego, co chcemy zachować poza kontrolą wersji, podczas gdy plik README wyjaśnia, jaki jest cel katalogu, które są bardzo ważnymi informacjami.
    2013-01-17 11: 11: 58Z
  2. @ pedromanoel Piszę dokumentację, którą umieściłbyś w README wewnątrz pliku .gitignore (jako komentarze).
    2013-07-19 08: 20: 21Z
  3. zauważ 1 różnicę: 1.) pusty folder, 2.) folder z plikiem .gitignore. ;-)
    2014-02-11 14: 31: 06Z
  4. Technicznie nie jest to pusty katalog ...
    2014-06-12 16: 16: 42Z
  5. Niestety, powoduje to niepusty katalog, ma pojedynczy ukryty plik.
    2014-12-15 20: 09: 24Z

Nie możesz. Zobacz FAQ Git .

  

Obecnie projekt indeksu git   (obszar przemieszczania) zezwala tylko na pliki   być na liście i nikt nie jest wystarczająco kompetentny   aby zmiana była pusta   katalogi zadbały o to   ta sytuacja, aby temu zaradzić.

     

Katalogi są dodawane automatycznie   podczas dodawania do nich plików. Że   jest tak, że katalogi nigdy nie muszą być dodawane   do repozytorium i nie są śledzone   na własną rękę.

     

Możesz powiedzieć „git add <dir>” i to   doda tam pliki.

     

Jeśli naprawdę potrzebujesz katalogu do   istnieje w kasach, które powinieneś utworzyć   plik w nim. .gitignore działa dobrze dla   w tym celu; możesz zostawić to puste,   lub wpisz nazwy plików, które masz   spodziewaj się, że pojawi się w katalogu.

    
1034
2012-05-04 13: 12: 24Z
  1. Poniżej odpowiedź jest DUŻO lepsza. Fakt, że oprogramowanie niskiego poziomu nie pozwala na to, nie ma dla mnie większego znaczenia niż JAK rzeczywiście używać Git, gdy potrzebuję pustego katalogu. Dodanie 2-liniowej linii .gitignore wydaje mi się do przyjęcia.
    2011-04-26 15: 21: 50Z
  2. Cóż, jeśli ktoś chce przenieść pliki do nowego katalogu, nie może tego zrobić za pomocą git mv, ponieważ git narzeka, że ​​nowy katalog nie jest pod kontrolą wersji
    2011-11-02 02: 58: 25Z
  3. Możesz przeczytać „ to niemożliwe, nie możesz, itp. ” w całym Internecie dla tego częstego pytania. Sztuczka .gitignore jest częstą odpowiedzią i zaspokaja wiele potrzeb. Jednak jest możliwe sprawić, by git śledził naprawdę pusty katalog, zobacz moją odpowiedź
    2012-01-21 15: 44: 30Z
  4. Chociaż im więcej o tym myślę, tym bardziej wydaje mi się, że „skrót SHA pustego łańcucha”, jeśli istnieje, faktycznie będzie być dobrze zdefiniowanym identyfikatorem pustego drzewa, chyba że niemożliwe byłoby określenie, czy ten obiekt jest drzewem czy kropelką.
    2013-07-09 09: 47: 51Z
  5. Widziałem wiele repozytoriów, które używają w tym celu pustego pliku o nazwie .gitkeep.
    2013-11-13 01: 38: 54Z

Utwórz pusty plik o nazwie .gitkeep w katalogu i dodaj go.

    
654
2013-10-09 22: 21: 16Z
  1. Dodałem odpowiedź zachęcającą do utworzenia .keep zamiast tego.
    2014-01-29 04: 31: 15Z
  2. .gitkeep nie został przepisany przez Gita i sprawi, że ludzie będą odgadnąć jego znaczenie, co doprowadzi ich do wyszukiwania google, które doprowadzi ich tutaj. Konwencja przedrostków .git powinna być zarezerwowana dla plików i katalogów, których używa Git.
    2014-02-10 01: 44: 13Z
  3. @ t-mart "Konwencja .git powinna być zarezerwowana ..." Dlaczego? Czy git żąda tej rezerwacji?
    2014-08-28 18: 13: 05Z
  4. Nie. Chodzi o to, że może to być mylące.
    2014-08-28 23: 22: 16Z
  5. W tym przypadku plik README lub ABOUT byłby tak samo dobry lub lepszy. Pozostawienie notatki dla następnego faceta, tak jak my wszyscy robiliśmy to przed adresami URL.
    2014-11-15 00: 59: 30Z

Zawsze możesz umieścić plik README w katalogu z wyjaśnieniem, dlaczego tego potrzebujesz, w przeciwnym razie pusty, katalog w repozytorium.

    
398
2012-04-26 02: 51: 40Z
  1. + 1, Dobra sugestia, pusty katalog nie ma sensu, jeśli nie będzie używany w przyszłości. Stwórz w nim plik README i napisz, do czego służy ten katalog i jakie pliki zostaną tam umieszczone w przyszłości. To rozwiązuje oba dwa problemy.
    2011-04-04 12: 08: 16Z
  2. Zgadzam się. Puste foldery są denerwujące i powinny być wyjaśnione we wszystkich właściwie obsługiwanych repozytoriach dowolnego rodzaju.
    2011-08-25 03: 37: 36Z
  3. @ ilius Nonsense. Struktura katalogów zawierająca puste katalogi może być bardzo pożądana w wielu sytuacjach (np. Aplikacja MVC, w której chcesz katalog modeli, ale nie udało Ci się jeszcze utworzyć żadnych modeli, lub katalog udostępnionych widoków, do którego zamierzasz dodać udostępnione widoki, później ). Co więcej, umieszczenie README w każdym z nich jest przesadą, ponieważ jest oczywiste, po co one są, i łatwo jest zapomnieć umieścić README w każdym z nich. ORAZ musisz pamiętać, aby usunąć README, gdy dodasz do nich kilka innych plików. Zasadniczo git powinien zdecydowanie zezwalać na puste katalogi.
    2012-11-21 11: 35: 31Z
  4. @ Jez: Nie zgadzam się. Chodzi o to, że git jest zaprojektowany do kontrolowania (i indeksowania) kodu źródłowego. Co ważne, id zatwierdzenia jest hashem zawartości. Oznacza to, że musi mieć zawartość. Nie potrzebujesz README w każdej części drzewa, tylko w węzłach liści. Jeśli masz miejsca, w których zamierzasz umieścić kod, ale nie ma kodu, nie będziesz nawet tracić czasu na echo „miejsce dla modeli” > > README, wtedy masz pomysł, który nie jest zatwierdzeniem. Nie ma sensu gitować. Mówienie „Chcę, aby uruchomiona aplikacja posiadała puste katalogi XYZ” jest problemem runtime , a nie problemem źródłowym. Obsługuj go z instalatorem.
    2013-05-23 00: 36: 55Z
  5. @ jbo5112 Tak, „specjalny kod”, o którym mówisz, to „instalator”, o którym wspomniałem. Twoja instalacja aplikacji internetowej musi już obsługiwać tworzenie bazy danych, lokalnej konfiguracji, wyciąganie zależności lub 100 innych operacji, ale kilka pustych katalogów jest poza tym? Wypróbuj gradle, pasażera, szefa kuchni, prymitywny plik Makefile itp. Nie ma żadnej różnicy między tworzeniem katalogów a inną (potencjalnie o wiele bardziej skomplikowaną /niebezpieczną) pracą instalacji aplikacji. A jeśli naprawdę nie masz deps, config, DB, itp. I nie masz instalatora, po prostu użyj README. Żaden przypadek nie wymaga obu.
    2013-06-19 22: 46: 08Z
 
touch .keep

W systemie Linux tworzy to pusty plik o nazwie .keep. Ta nazwa jest preferowana ponad .gitkeep, ponieważ pierwsza jest agnostyczna dla Gita, podczas gdy druga jest specyficzna dla Git. Po drugie, jak zauważył inny użytkownik, konwencja prefiksu .git powinna być zarezerwowana dla plików i katalogów, z których korzysta sam Git.

Alternatywnie, jak zauważono w innej odpowiedzi , katalog może zawierać opisowy README lub plik README.md zamiast tego.

Oczywiście wymaga to, aby obecność pliku nie spowodowała złamania aplikacji.

    
299
2015-01-30 05: 39: 57Z
  1. To jest dobre dla początkowego katalogu bare, ale co jeśli zacznie wypełniać się plikami? Następnie Git zauważy je i zażąda ich jako nieśledzonych plików. Wybrana odpowiedź tutaj działa znacznie bardziej elegancko, aby umożliwić zachowanie katalogu, ale następnie bezpiecznie zignorować zawartość.
    2014-09-01 16: 20: 26Z
  2. Pytanie i główny problem dotyczy dodawania pustego katalogu. Jeśli później ma plik rezydentny, oczywiście usuń plik .keep lub po prostu go zignoruj. Jeśli zamiast tego pliki w katalogu mają być ignorowane, to zupełnie inne pytanie.
    2014-09-01 21: 30: 24Z
  3. Zasugerowano, że git clean -nd | sed s/'^Would remove '// | xargs -I{} touch "{}.keep" zrobi to we wszystkich nieśledzonych pustych katalogach.
    2014-10-07 17: 16: 31Z
  4. Nie podoba mi się to rozwiązanie, trudno zgadnąć, co robi ten plik. Ponadto, jeśli generujesz pliki w swoim środowisku dev (jak dzienniki lub obrazy, itp.), Nie jest to zachowanie wersji pliku i przejście do produkcji, co nie jest miłe.
    2016-05-19 16: 04: 22Z
  5. Windows nie lubi plików bez nazw i wymaga specjalnej magii, aby tego dokonać (aka jest to podobna do basha aplikacja terminalowa lub odpowiednik).
    2016-08-03 19: 46: 04Z

Dlaczego potrzebowalibyśmy pustych wersjonowanych folderów

Najpierw pierwsze rzeczy:

  

Pusty katalog nie może być częścią drzewa w systemie wersjonowania Git .

To po prostu nie będzie śledzone. Istnieją jednak scenariusze, w których „wersjonowanie” pustych katalogów może mieć znaczenie, na przykład:

  • rusztowanie predefiniowanej struktury folderów , dzięki czemu jest dostępne dla każdego użytkownika /współtwórcy repozytorium; lub, jako wyspecjalizowany przypadek powyższego, utworzenie folderu dla plików tymczasowych , takich jak katalogi cache/ lub logs/, w których chcemy udostępnić folder, ale .gitignore jego zawartość
  • w związku z powyższym, niektóre projekty nie będą działać bez niektórych folderów (co jest często wskazówką słabo zaprojektowanego projektu, ale jest to częsty scenariusz ze świata rzeczywistego i może być, powiedzmy, problemy z uprawnieniami, które należy rozwiązać).

Niektóre sugerowane obejścia

Wielu użytkowników sugeruje:

  1. Umieszczanie pliku README lub innego pliku z pewną zawartością w celu uczynienia katalogu niepustym lub
  2. Tworzenie pliku .gitignore z pewnego rodzaju „logiką odwrotną” (tj. włączenie wszystkich plików), który na koniec służy temu samemu celowi podejścia # 1.

Chociaż oba rozwiązania z pewnością działają , uważam je za niespójne z sensownym podejściem do wersjonowania Git.

  • Dlaczego powinieneś umieszczać fałszywe pliki lub README, których być może nie chcesz w swoim projekcie?
  • Po co używać .gitignore do zrobienia czegoś ( przechowywanie plików), co jest przeciwieństwem tego, do czego jest przeznaczone ( wyłączenie plików), nawet jeśli jest to możliwe? /li>

podejście .gitkeep

Użyj pliku pusty o nazwie .gitkeep, aby wymusić obecność folderu w systemie kontroli wersji.

Chociaż może się wydawać, że nie jest to duża różnica:

  • Używasz pliku, który ma pojedynczy cel przechowywania folderu. Nie umieszczasz tam żadnych informacji, których nie chcesz umieścić.

    Na przykład powinieneś używać README jako, cóż, README z użytecznymi informacjami, a nie jako pretekst do przechowywania folderu.

    Oddzielenie obaw jest zawsze dobrą rzeczą i nadal możesz dodać .gitignore, aby zignorować niechciane pliki.

  • Nazywanie go .gitkeep sprawia, że ​​sama nazwa pliku (a także dla innych programistów , co jest dobrym rozwiązaniem dla wspólnego projektu i jednym z głównych celów repozytorium Git) jest bardzo jasne i proste. plik jest

    • FilNiezwiązany z kodem (ze względu na wiodącą kropkę i nazwę)
    • Plik wyraźnie powiązany z Gitem
    • Jego cel ( keep ) jest jasno określony, spójny i semantycznie sprzeczny w znaczeniu ignorowania

Przyjęcie

Widziałem podejście .gitkeep przyjęte przez bardzo ważne struktury, takie jak Laravel , Angular-CLI .

    
263
2019-06-09 09: 53: 44Z
  1. Przegapiłeś jedną myśl - jaki jest powód przechowywania i pustego folderu (np. /logs, /tmp, /uploads)? Tak - aby zachować folder pusty. :) Jeśli więc chcesz zachować folder pusty, musisz zignorować znajdujące się w nim pliki.
    2014-10-03 00: 08: 17Z
  2. @ RomanAllenstein: niekoniecznie. Możliwe, że utworzysz repo z daną strukturą, która może zostać wypełniona później. Pliki te zostaną dodane do repo zaraz po ich utworzeniu i denerwujące będzie rozpoczęcie usuwania lub edycji plików .gitignore (i niebezpieczne, ponieważ prawdopodobnie nawet nie zdajesz sobie sprawy, że nie są śledzone: git je ignoruje )
    2015-02-17 16: 06: 18Z
  3. downvote: gadatliwa odpowiedź.
    2016-10-02 04: 48: 16Z
  4. @ Behnam: Wezmę downvote, ale moje badania na S.O. meta nie zwraca uwagi na gadatliwe odpowiedzi, o ile zapewniają wystarczająco dużo szczegółów i jasności, aby były użyteczne dla każdego czytelnika (i każdego poziomu umiejętności). Nadal jestem bardzo otwarty na wszelką krytykę i dziękuję, że publicznie ogłosiłeś powód, przyjmuję to bardzo pozytywnie.
    2016-10-10 13: 22: 59Z
  5. Jeśli edytujesz swoją odpowiedź, aby zastąpić .gitkeep inną nazwą pliku bez prefiksu, otrzymasz mój głos, myślę, że ta jest najlepszą i najbardziej pouczającą odpowiedzią. Powód: myślę, że „.git *” powinien być zarezerwowany dla plików zapisanych w git, podczas gdy jest to tylko zwykły symbol zastępczy. Moje pierwsze przypuszczenie, kiedy to zobaczyłem, jest takie, że na przykład plik „.gitkeep” byłby automatycznie ignorowany (byłaby to fajna funkcja), ale tak nie jest, prawda?
    2016-11-21 09: 34: 01Z

Jak opisano w innych odpowiedziach, Git nie może reprezentować pustych katalogów w swoim obszarze przemieszczania. (Zobacz Często zadawane pytania na temat Git ). Jeśli jednak dla Twojego dla celów, katalog jest wystarczająco pusty, jeśli zawiera tylko plik .gitignore, wtedy możesz utworzyć .gitignore plików w pustych katalogach tylko poprzez:

 
find . -type d -empty -exec touch {}/.gitignore \;
    
123
2014-12-23 11: 18: 16Z
  1. Możesz zignorować katalog .git: find . -name .git -prune -o -type d -empty -exec touch {}/.gitignore \;
    2013-08-12 12: 51: 41Z
  2. Prostszą odmianą dla większości sytuacji jest find * -type d -empty -exec touch {}/.gitignore \;
    2013-10-24 08: 26: 19Z
  3. Ponieważ OS X tworzy plik .DS_Store w prawie każdym directoy, to nie działa tam. Jedynym obejściem (NIEBEZPIECZNE!), Które znalazłem, było usunięcie wszystkich plików .DS_Store najpierw przez find . -name .DS_Store -exec rm {} \;, a następnie użycie preferowanego wariantu z tej odpowiedzi. Pamiętaj, aby wykonać to tylko w odpowiednim folderze!
    2015-04-28 15: 57: 42Z
  4. Czy ktoś wie, jak to zrobić w systemie Windows z wiersza poleceń? Widziałem kilka rozwiązań tutaj w Ruby i Python, ale chciałbym rozwiązanie typu bareboneszarządzany.
    2017-01-03 17: 18: 15Z
  5. @ akhan Dodanie czegoś do .gitignore nie ma wpływu na flagę -empty polecenia find. Mój komentarz dotyczy usunięcia .DS_Store plików w drzewie katalogów, więc można zastosować flagę -empty.
    2017-04-06 11: 58: 07Z

Andy Lester ma rację, ale jeśli twój katalog musi być pusty, a nie pusty pusty, możesz umieścić tam pusty plik .gitignore.

Na marginesie, jest to problem z implementacją, a nie podstawowy problem z pamięcią masową Git. Jak już wielokrotnie wspominałem na liście dyskusyjnej Git, powodem tego, że nie zostało to zaimplementowane, jest to, że nikt nie troszczył się wystarczająco, aby przesłać na niego łatkę, nie dlatego, że nie mógł lub nie powinien być zrobiony. >     

61
2015-01-29 18: 46: 48Z
  1. Dokładnie to powiedziałem. Oba akapity są opisane we fragmencie FAQ, który zamieściłem.
    2008-09-22 17: 36: 50Z
  2. Sądzę, że na bok jest niedocenianie i przydatne do poznania - może być naprawione, po prostu nie oczekuj tego w najbliższym czasie, gdy w większości przypadków istnieje takie łatwe obejście.
    2008-09-22 22: 10: 36Z
  3. Przepraszam, nie przeczytałem ostatniego akapitu, a gdy przeczytałem pierwszy akapit, no cóż, nie jestem pewien, dlaczego powtórzyłem tę informację.
    2008-09-23 07: 37: 13Z
  4. Oczywiście ta dodatkowa odpowiedź służy wskazaniu tego faktu.
    2008-09-24 06: 44: 42Z
  5. Dostałem tutaj spojrzenie na przypadek, w którym kompilacja spadła, jeśli katalog nie istnieje i domyślnie jest pusty, ale nie musi być pusty . Utworzenie .gitignore ma rację.
    2016-04-18 16: 25: 33Z

Ruby on Rails sposób tworzenia folderu dziennika:

 
mkdir log && touch log/.gitkeep && git add log/.gitkeep

Teraz katalog dziennika zostanie dołączony do drzewa. Jest bardzo przydatny podczas wdrażania, więc nie musisz pisać procedury tworzenia katalogów dziennika.

Pliki dziennika mogą być utrzymywane przez wydawanie,

 
echo log/dev.log >> .gitignore

ale prawdopodobnie to wiedziałeś.

    
31
2018-10-26 20: 52: 41Z
  1. Co to ma wspólnego z Ruby on Rails?
    2015-09-29 09: 11: 49Z
  2. 2017-04-29 01: 15: 21Z

Git nie śledzi pustych katalogów. Zobacz FAQ Git , aby uzyskać więcej wyjaśnień. Sugerowane obejście polega na umieszczeniu pliku .gitignore w pustym katalogu. Nie podoba mi się to rozwiązanie, ponieważ .gitignore jest „ukryty” przez konwencję uniksową. Nie ma też wyjaśnienia, dlaczego katalogi są puste.

Proponuję umieścić plik README w pustym katalogu, wyjaśniając dlaczego reżektoria jest pusta i dlaczego musi być śledzona w Git. Z plikiem README, jeśli chodzi o Git, katalog nie jest już pusty.

Prawdziwe pytanie brzmi: dlaczego potrzebujesz pustego katalogu w git? Zazwyczaj masz jakiś skrypt kompilacji, który może utworzyć pusty katalog przed kompilacją /uruchomieniem. Jeśli nie, zrób to. Jest to znacznie lepsze rozwiązanie niż umieszczanie pustych katalogów w git.

Więc masz jakiś powód, dla którego potrzebujesz pustego katalogu w git. Umieść ten powód w pliku README. W ten sposób inni programiści (i przyszli) wiedzą, dlaczego pusty katalog musi tam być. Dowiesz się także, że możesz usunąć pusty katalog, gdy problem wymagający pustego katalogu został rozwiązany.


Aby wyświetlić listę wszystkich pustych katalogów, użyj następującego polecenia:

 
find -name .git -prune -o -type d -empty -print

Aby utworzyć symbol zastępczy README w każdym pustym katalogu:

 
find -name .git -prune -o -type d -empty -exec sh -c \
  "echo this directory needs to be empty because reasons > {}/README.emptydir" \;

Aby zignorować wszystko w katalogu oprócz pliku README, umieść następujące linie w .gitignore:

 
path/to/emptydir/*
!path/to/emptydir/README.emptydir
path/to/otheremptydir/*
!path/to/otheremptydir/README.emptydir

Alternatywnie możesz po prostu wykluczyć każdy plik README z pominięcia:

 
path/to/emptydir/*
path/to/otheremptydir/*
!README.emptydir

Aby wyświetlić listę wszystkich plików README po ich utworzeniu:

 
find -name README.emptydir
    
28
2018-02-08 13: 41: 09Z

OSTRZEŻENIE: Ta zmiana nie działa tak, jak się okazuje. Przepraszamy za niedogodności.

Oryginalny post poniżej:

Znalazłem rozwiązanie podczas gry z wewnętrznymi elementami Git!

  1. Załóżmy, że znajdujesz się w swoim repozytorium.
  2. Utwórz swój pusty katalog:

     
    $ mkdir path/to/empty-folder
    
  3. Dodaj go do indeksu za pomocą polecenia instalacyjnego i pustego drzewa SHA-1 :

     
    $ git update-index --index-info
    040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904    path/to/empty-folder
    

    Wpisz polecenie, a następnie wprowadź drugą linię. Naciśnij Enter , a następnie Ctrl + D , aby zakończyć wprowadzanie. Uwaga: format to tryb [SPACJA] wpisz [SPACJA] SHA-1hash [TAB] ścieżka (karta jest ważna, formatowanie odpowiedzi nie zachowuje go).

  4. To wszystko! Twój pusty folder znajduje się w indeksie. Wszystko, co musisz zrobić, to zatwierdzić.

To rozwiązanie jest krótkie i najwyraźniej działa poprawnie ( zobacz EDIT! ), ale nie jest to łatwe do zapamiętania ...

Puste drzewo SHA-1 można znaleźć, tworząc nowe, puste repozytorium Git, cd i wydając git write-tree, które wysyła puste drzewo SHA-1.

EDIT:

Używam tego rozwiązania odkąd go znalazłem. Wygląda na to, że działa dokładnie tak samo, jak tworzenie submodułu, z wyjątkiem tego, że żaden moduł nie jest nigdzie zdefiniowany. Prowadzi to do błędów przy wydawaniu git submodule init|update. Problem polega na tym, że git update-index przepisuje część 040000 tree na 160000 commit.

Co więcej, żaden plik umieszczony pod tą ścieżką nigdy nie zostanie zauważony przez Gita, ponieważ uważa, że ​​należy on do innego repozytorium. Jest to paskudne, ponieważ można je łatwo przeoczyć!

Jeśli jednak nie używasz (i nie chcesz) żadnych podmodułów Gita w swoim repozytorium, a „pusty” folder pozostanie pusty lub jeśli chcesz, aby Git wiedział o jego istnieniu i zignorował jego zawartość, mogę iść z tym ulepszeniem. Przejście zwykłym sposobem z submodulami wymaga więcej kroków niż ta zmiana.

    
26
2014-12-23 11: 35: 34Z
  1. Po umieszczeniu pustego folderu w indeksie i zatwierdzeniu, czy jest wtedy możliwe git svn dcommit z pożądanym wynikiem?
    2014-08-28 18: 16: 50Z
  2. Jest mało prawdopodobne, aby to ulepszenie działało z jakimkolwiek innym narzędziem. Jak stwierdzono w ostrzeżeniu i edycji, odradzam używanie go, chyba że w dość ograniczonym przypadku.
    2014-09-02 18: 15: 54Z
  3. Dla ciekawskich działa w interfejsie użytkownika GitHub: github.com/cirosantilli/test-empty-subdir , ale kiedy go sklonujesz, nie zostanie on sprawdzony.
    2014-12-14 08: 28: 45Z
  4. @ CiroSantilli 六四 事件 法轮功 包 卓 轩 Dostałem ten typ pustego katalogu github.com/abhisekp/empty-dir
    2015-12-30 00: 30: 20Z
  5. @ PyRulez dobrze, w świecie oprogramowania nic nie jest niemożliwe. : D Właściwie poszedłem za odpowiedzią.
    2016-01-10 16: 49: 05Z

Może dodanie pustego katalogu wydaje się być ścieżką najmniejszego oporu , ponieważ masz skrypty, które oczekują, że katalog będzie istniał (być może dlatego, że jest celem dla wygenerowanych plików binarnych). Innym podejściem byłoby zmodyfikowanie skryptów w celu utworzenia katalogu w miarę potrzeb .

 
mkdir --parents .generated/bin ## create a folder for storing generated binaries
mv myprogram1 myprogram2 .generated/bin ## populate the directory as needed

W tym przykładzie możesz sprawdzić (zepsuty) dowiązanie symboliczne do katalogu, aby uzyskać do niego dostęp bez prefiksu „.generated” (ale jest to opcjonalne).

 
ln -sf .generated/bin bin
git add bin

Jeśli chcesz wyczyścić swoje drzewo źródłowe, możesz po prostu:

 
rm -rf .generated ## this should be in a "clean" script or in a makefile

Jeśli zastosujesz często sugerowane podejście do sprawdzania w prawie pustym folderze, masz niewielką złożoność usuwania zawartości bez usuwania pliku „.gitignore”.

Możesz zignorować wszystkie wygenerowane pliki, dodając następujące elementy do katalogu głównego .gitignore:

 
.generated
    
20
2011-10-26 16: 33: 20Z
  1. Uwaga: dowiązanie symboliczne, które zasugerowałem, jest „zepsute” w czystym kasy, ponieważ katalog .generated początkowo nie istnieje. Nie będzie już łamany po wykonaniu kompilacji.
    2012-03-14 00: 14: 36Z
  2. Zgadzam się w niektórych przypadkach jest to bardzo dobry pomysł, ale w innych (np. rozprowadzanie projektu, w którym masz pusty szkielet z folderami, takimi jak modele /i views /) chciałbyś, aby użytkownik miał te katalogi pod ręką, zamiast ręcznie czytać, czytać dokumenty, i może być trochę oczekiwane, że uruchomią jakiś skrypt instalacyjny po klonowaniu repo. Myślę, że ta odpowiedź w połączeniu z odpowiedzią README @ john-mee powinna obejmować większość, jeśli nie wszystkie, przypadki.
    2014-06-17 08: 28: 24Z

Powiedzmy, że potrzebujesz pustego katalogu o nazwie tmp :

 
$ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp

Innymi słowy, musisz dodać plik .gitignore do indeksu, zanim będziesz mógł powiedzieć Gitowi, aby go zignorował (i wszystko inne w pustym katalogu).

    
20
2016-04-21 11: 34: 09Z
  1. Dwie rzeczy: Możesz po prostu "echo '*' > tmp /.gitignore" zamiast dotykać, a "git commit -m" nie zatwierdza zmian wykonanych po dodałeś pliki do indeksu.
    2010-01-28 15: 50: 53Z
  2. Jeśli zrobisz tylko echo bla > file, nie otrzymasz file: File exists, ponieważ > nadpisze plik, jeśli już istnieje lub utworzy nowy, jeśli nie istnieje.
    2014-04-01 19: 53: 56Z
  3. /bin/sh założenie kulturowe! * Jeśli "tutaj" wynosi csh, a zmienna noclobber jest ustawiona, rzeczywiście otrzymasz file: File exists. Jeśli ktoś powie „Dostaję to”, nie zakładaj, że są idiotami i odpowiedz „Nie, nie”. * c2.com/cgi/wiki?AmericanCulturalAssumption
    2015-03-16 08: 26: 52Z
  4. @ clacke Jeśli ktoś zdecyduje się użyć innej powłoki niż wszyscy inni, powinni to wyraźnie zaznaczyć, jeśli napotykają problemy. W przeciwieństwie do narodowości, każdy ma wolny wybór powłoki.
    2016-05-25 19: 38: 20Z
  5. @ SeldomNeedy Może szukają pomocy, ponieważ nawet nie wiedzą, że używają innej powłoki niż wszyscy inni.
2016-05-30 08: 37: 48Z

Stawiałem czoła problemowi z pustymi katalogami. Problem z używaniem plików zastępczych polega na tym, że trzeba je tworzyć i usuwać, jeśli nie są już potrzebne (ponieważ później dodano podkatalogi lub pliki. Przy dużych drzewach źródłowych zarządzanie tymi plikami zastępczymi może być uciążliwe i błędne podatny.

Dlatego zdecydowałem się napisać narzędzie open source, które może automatycznie zarządzać tworzeniem /usuwaniem takich plików zastępczych. Jest napisany dla platformy .NET i działa pod kontrolą Mono (.NET dla Linux) i Windows.

Wystarczy spojrzeć na: http://code.google.com/p/markemptydirs

    
14
2014-06-22 17: 38: 34Z

Nie możesz i niestety nigdy nie będziesz w stanie. To decyzja podjęta przez samego Linusa Torvalda. On wie, co jest dla nas dobre.

Tam gdzieś czytam jakiś rant.

Znalazłem Re: puste katalogi .. , ale może jest kolejny.

Musisz żyć z obejściami ... niestety.

    
12
2016-04-21 11: 35: 22Z
  1. Wiem, że opublikowałeś to jako przykład złego argumentu, ale doceniam link, ponieważ jest to właściwie dobrze uzasadniony argument przeciwko katalogom śledzenia. ;-)
    2015-03-16 08: 32: 04Z
  2. Ta odpowiedź wydaje się być niespójna, ponieważ w następnym poście na wspomnianym wątku Linus Torvald mówi, że spodziewa się, że będzie musiał dodać śledzenie katalogu: markmail.org/message/libip4vpvvxhyqbl . W rzeczywistości mówi, że „będzie mile widziane łatki, które [dodają wsparcie dla śledzenia pustych katalogów]”
    2017-08-01 20: 12: 03Z
  3. Patrick używa tam także słowa „idiotyk”. Podejrzewam, że jego słowa adresowane są do osób tutaj w tym wątku, więc zakładam, że sam nie zaimplementuje czegoś „idiotycznego” w Git.
    2017-08-03 20: 38: 31Z

    Lubię odpowiedzi @ Artur79 i @mjs, więc korzystam z kombinacji obu i uczyniłem z tego standard dla naszych projektów.

     
    find . -type d -empty -exec touch {}/.gitkeep \;
    

    Jednak tylko garstka naszych programistów pracuje na komputerach Mac lub Linux. Dużo działa w systemie Windows i nie mogłem znaleźć równoważnego prostego jednego linera, aby osiągnąć to samo. Niektórzy mieli szczęście mieć Cygwin zainstalowany z innych powodów, ale przepisanie Cygwina tylko z tego powodu wydawało się przesadą.

    Edytuj, aby uzyskać lepsze rozwiązanie

    Ponieważ większość naszych programistów ma już Ant , pierwszą rzeczą, o której myślałem, było złożyć plik kompilacji Ant, aby to osiągnąć niezależnie od platformy. Nadal można je znaleźć tutaj

    Jednak , później pomyślałem, że lepiej byłoby uczynić to małym narzędziem, więc odtworzyłem go przy użyciu Pythona i opublikowałem w PyPI tutaj . Możesz go zainstalować, uruchamiając po prostu:

     
    pip3 install gitkeep2
    

    Pozwoli ci to na rekurencyjne tworzenie i usuwanie .gitkeep plików, a także pozwoli na dodanie messydo nich, aby twoi rówieśnicy zrozumieli, dlaczego te katalogi są ważne. Ten ostatni kawałek to bonus. Pomyślałem, że byłoby fajnie, gdyby pliki .gitkeep mogły być samodokumentujące.

     
    $ gitkeep --help
    Usage: gitkeep [OPTIONS] PATH
    
      Add a .gitkeep file to a directory in order to push them into a Git repo
      even if they're empty.
    
      Read more about why this is necessary at: https://git.wiki.kernel.org/inde
      x.php/Git_FAQ#Can_I_add_empty_directories.3F
    
    Options:
      -r, --recursive     Add or remove the .gitkeep files recursively for all
                          sub-directories in the specified path.
      -l, --let-go        Remove the .gitkeep files from the specified path.
      -e, --empty         Create empty .gitkeep files. This will ignore any
                          message provided
      -m, --message TEXT  A message to be included in the .gitkeep file, ideally
                          used to explain why it's important to push the specified
                          directory to source control even if it's empty.
      -v, --verbose       Print out everything.
      --help              Show this message and exit.
    

    Mam nadzieję, że okaże się to przydatne.

        
    11
    2018-12-22 00: 20: 12Z

    Jeśli dodasz plik .gitignore, jeśli chcesz umieścić w nim dowolną ilość treści (którą Git ma ignorować), możesz dodać pojedynczą linię z gwiazdką *, aby upewnić się, że nie dodaj przypadkowo zignorowaną treść.

        
    10
    2016-04-21 11: 34: 00Z

    Jak wspomniano, nie można dodawać pustych katalogów, ale tutaj jest jeden liner, który dodaje puste pliki .gitignore do wszystkich katalogów.

    ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'

    Umieściłem to w pliku Rakefile dla łatwego dostępu.

        
    8
    2016-04-21 11: 34: 27Z
    1. Wolałbym użyć find . -type d -empty -print0 | xargs --null bash -c 'for a; do { echo "*"; echo "!.gitignore"; } >>"$a/.gitignore"; done' --
      2011-10-21 06: 35: 05Z

    Rozwiązanie Jamie Flournoy działa świetnie. Oto nieco ulepszona wersja, aby zachować .htaccess:

     
    # Ignore everything in this directory
    *
    # Except this file
    !.gitignore
    !.htaccess
    

    Dzięki temu rozwiązaniu możesz zatwierdzić pusty folder, na przykład /log, /tmp lub /cache, a folder pozostanie pusty.

        
    8
    2017-05-23 12: 02: 59Z
    1. Chce zachować pusty katalog, a nie plik.
      2014-07-29 02: 55: 51Z
    2. I wspomniałem, że zachowa także .htaccess. Przykład: jeśli w oprogramowaniu znajduje się katalog plików dziennika (np. Oxhop), który nie powinien być dostępny przez sieć, w katalogu znajduje się plik .htaccess. Jeśli umieścisz wyżej wspomniany plik .gitignore w folderze, plik .htaccess nie zostanie włączony, a folder będzie dostępny przez sieć.
      2014-07-31 08: 17: 33Z
    3. Jeśli masz plik .htaccess, który jest pod kontrolą wersji, masz już katalog zawierający go pod kontrolą wersji. Problem został już rozwiązany - plik .gitignore staje się nieistotny.
      2017-01-08 09: 11: 52Z
    4. @ Wallacoloo Odnosząc się do pytania, które masz rację, mimo to plik jest użyteczny, użyję go do takiego katalogu, w którym pliki będą chronione przez .htaccess. Wbrew wyjaśnieniom Rzymian plik .htaccess zostanie zatwierdzony, ponieważ jest wykluczony przez regułę ignore. [stary wątek, wiem]
      2017-08-28 08: 10: 29Z

    Zawsze buduję funkcję, aby sprawdzić moją pożądaną strukturę folderów i zbudować ją dla mnie w projekcie. To rozwiązuje ten problem, ponieważ puste foldery są przechowywane w Git przez proxy.

     
    function check_page_custom_folder_structure () {
        if (!is_dir(TEMPLATEPATH."/page-customs"))
            mkdir(TEMPLATEPATH."/page-customs");    
        if (!is_dir(TEMPLATEPATH."/page-customs/css"))
            mkdir(TEMPLATEPATH."/page-customs/css");
        if (!is_dir(TEMPLATEPATH."/page-customs/js"))
            mkdir(TEMPLATEPATH."/page-customs/js");
    }
    

    To jest w PHP, ale jestem pewien, że większość języków obsługuje tę samą funkcjonalność, a ponieważ tworzenie folderów jest obsługiwane przez aplikację, foldery zawsze tam będą.

        
    7
    2015-01-29 18: 48: 25Z
    1. Tak więc wszyscy jesteśmy na tej samej stronie, nie robię tego więcej. To strata czasu. Konwencja .gitkeep jest znacznie lepszą praktyką.
      2014-03-25 15: 41: 01Z
    2. Nie widzę, jak to może być stratą czasu. Gdy TEMPLATEPATH jest oczywiście dynamiczny, nie można użyć rozwiązania .gitkeep. Nawet w przypadku struktury folderów bez dynamiki powinieneś dodać więcej rzeczy zamiast usuwać bardzo dobre rozwiązanie sprawdzania katalogów, np. sprawdź uprawnienia i chmoduj pliki. Dodanie sposobu oznaczania katalogów w globalnym .gitignore byłoby dla mnie idealne. Coś w rodzaju #keep /path /to /dir
      2015-06-02 13: 58: 41Z

    Oto hack, ale to zabawne, że działa (Git 2.2.1). Podobny do tego, co sugerowała @Teka, ale łatwiejszy do zapamiętania:

    • Dodaj podmoduł do dowolnego repozytorium (git submodule add path_to_repo)
    • Spowoduje to dodanie folderu i pliku .submodules. Zatwierdź zmianę.
    • Usuń plik .submodules i zatwierdź zmianę.

    Teraz masz katalog, który zostanie utworzony, gdy zatwierdzenie zostanie wyewidencjonowane. Interesującą rzeczą jest to, że jeśli spojrzysz na zawartość obiektu drzewa tego pliku, otrzymasz:

      

    fatal: niepoprawna nazwa obiektu   b64338b90b4209263b50244d18278c0999867193

    Nie zachęciłbym jednak do korzystania z niego, ponieważ może przestać działać w przyszłych wersjach Git. Które mogą pozostawić twoje repozytorium uszkodzone.

        
    7
    2015-01-29 18: 54: 30Z
    1. Hack fatal .
      2016-02-20 16: 48: 20Z
    2. To działa, ale myślę, że myli się z IntelliJ ...: |
      2018-06-08 18: 09: 06Z

    Nie ma sposobu, aby Git śledził katalogi, więc jedynym rozwiązaniem jest dodanie pliku zastępczego w katalogu, który Git ma śledzić.

    Plik może być nazwany i zawierać wszystko, co chcesz, ale większość ludzi używa pustego pliku o nazwie .gitkeep (chociaż niektórzy ludzie wolą agnostyk VCS .keep).

    Przedrostek . oznacza go jako ukryty plik.

    Innym pomysłem byłoby dodanie pliku README wyjaśniającego, do czego będzie używany katalog.

        
    7
    2015-04-26 22: 54: 56Z

    Nie możesz. Jest to celowa decyzja projektowa opiekunów Git. Zasadniczo celem systemu zarządzania kodem źródłowym, takim jak Git, jest zarządzanie kodem źródłowym, a puste katalogi nie są kodem źródłowym. Git jest również często opisywany jako tracker treści, a puste katalogi nie są treścią (wręcz przeciwnie), więc nie są śledzone.

        
    5
    2008-09-22 19: 50: 38Z
    1. Podważam ten widok. Struktura to treść, a wszystko, co nazwa przyczynia się do treści.
      2011-08-11 12: 08: 10Z
    2. Pusty plik nie jest również kodem źródłowym ani treścią. To tylko imię. Jednak Git chętnie śledzi puste pliki. Nie sądzę, by to była celowa decyzja projektowa, aby Git odmówił śledzenia pustych katalogów. Myślę, że śledzenie pustych katalogów to funkcja, która po prostu nie jest potrzebna w 99% przypadków, więc nie zadali sobie trudu, aby wykonać dodatkową pracę wymaganą do poprawnego działania. Git może to zrobić, jeśli ktoś chce mieć tę funkcję na tyle, by ją zaimplementować. Wątpię, aby opiekunowie Gita byli przeciwni takiej poprawce, gdyby została wykonana poprawnie.
      2011-09-13 15: 32: 45Z
  4. @ TobyAllen tutaj jest zaktualizowanym link często zadawany pytania Najważniejszą odpowiedzią jest również to, co zaleca FAQ z bardziej precyzyjnymi instrukcjami.
    2013-04-12 07: 22: 22Z
  5. To brakująca funkcja (i niski priorytet), a nie celowe ograniczenie. Z FAQ Gita: Obecnie projekt indeksu Git (obszar pomostowy) zezwala na wyświetlanie tylko plików, a nikt wystarczająco kompetentny, aby zmiana zezwalająca na puste katalogi nie był wystarczająco zainteresowany tą sytuacją, aby to naprawić. b>
    2013-06-04 21: 17: 27Z
  6. Naprawdę się nie zgadzam. Mogę znaleźć różne powody, dla których chcę śledzić pusty folder. Na przykład opracowuję bardzo lekką strukturę PHP MVC dla moich projektów. Mam określone foldery do umieszczania modeli, widoków itp. Gdy tworzę nową witrynę w oparciu o moje środowisko, foldery te są puste, ponieważ domyślnie nie ma żadnych modeli ani widoków, ale potrzebuję istniejącego folderu, w przeciwnym razie moja struktura wygrała nie działa!
    2013-11-25 14: 25: 41Z

Jeśli chcesz dodać folder, w którym będzie przechowywanych wiele danych przejściowych w wielu katalogach semantycznych, jednym z podejść jest dodanie czegoś takiego do katalogu głównego .gitignore ...

/app/data/**/*.* !/app/data/**/*.md

Następnie możesz zatwierdzić opisowe pliki README.md (lub puste pliki, nie ma znaczenia, o ile możesz kierować je w unikalny sposób, tak jak w przypadku *.md w tym przypadku) w każdym katalogu, aby zapewnić, że wszystkie katalogi pozostaną częścią repo, ale pliki (z rozszerzeniami) są ignorowane. OGRANICZENIE: . nie jest dozwolone w nazwach katalogów!

Możesz wypełnić wszystkie te katalogi plikami xml /images lub czymkolwiek i dodać więcej katalogów poniżej /app/data/ w miarę rozwoju potrzeb w zakresie przechowywania aplikacji (z plikami README.md służącymi do nagrywania w opisie każdego z nich) katalog przechowywania jest na dokładnie).

Nie ma potrzeby dalszej zmiany .gitignore lub decentralizacji poprzez utworzenie nowego .gitignore dla każdego nowego katalogu. Prawdopodobnie nie jest to najmądrzejsze rozwiązanie, ale jest mądre i zawsze działa dla mnie. Ładne i proste! ;)

 wprowadź opis obrazu tutaj>> </a> </p>
    </div>
<div class = 5

2017-05-11 14: 14: 46Z

Dodanie jeszcze jednej opcji do walki.

Zakładając, że chcesz dodać katalog do git, który, dla wszystkich celów związanych z git, powinien pozostać pusty i nigdy nie będzie śledzony jego zawartości, .gitignore, jak sugerowano wiele razy tutaj, zrobi to samo.

Format, jak wspomniano, to:

 
*
!.gitignore

Jeśli chcesz zrobić to w linii poleceń, za jednym zamachem, podczas gdy wewnątrz katalogu, który chcesz dodać, możesz wykonać:

 
$ echo "*" > .gitignore && echo '!.gitignore' >> .gitignore && git add .gitignore

Ja mam skrypt powłoki, którego używam do tego. Nazwij skrypt bez względu na to, co chcesz, albo dodaj go gdzieś w swojej ścieżce dołączania lub bezpośrednio do niego odwołaj:

 
#!/bin/bash

dir=''

if [ "$1" != "" ]; then
    dir="$1/"
fi

echo "*" > $dir.gitignore && \
echo '!.gitignore' >> $dir.gitignore && \
git add $dir.gitignore

Dzięki temu możesz albo wykonać go z katalogu, który chcesz dodać, albo odwołać się do katalogu jako pierwszego i jedynego parametru:

 
$ ignore_dir ./some/directory

Inna opcja (w odpowiedzi na komentarz @GreenAsJade), jeśli chcesz śledzić pusty folder, który MAY zawiera w przyszłości śledzone pliki, ale na razie będzie pusty, możesz ommitować * z pliku .gitignore i sprawdź , że w. Zasadniczo wszystko, co mówi plik, to „nie ignoruj ​​ mnie ”, ale poza tym katalog jest pusty i śledzony .

Twój plik .gitignore będzie wyglądał następująco:

 
!.gitignore

To wszystko, sprawdź to, a masz pusty, ale śledzony katalog, w którym możesz później śledzić pliki.

Powodem, dla którego proponuję zachować jedną linię w pliku, jest to, że daje on cel .gitignore. W przeciwnym razie ktoś z linii może go usunąć. Może to pomóc, jeśli umieścisz komentarz powyżej line.

    
4
2016-05-28 16: 38: 52Z

Czasami masz do czynienia ze źle napisanymi bibliotekami lub oprogramowaniem, które potrzebują „prawdziwego” pustego i istniejącego katalogu. Umieszczenie prostego .gitignore lub .keep może je złamać i spowodować błąd. Poniższe informacje mogą pomóc w takich przypadkach, ale bez gwarancji ...

Najpierw utwórz potrzebny katalog:

 
mkdir empty

Następnie dodajesz przerwane dowiązanie symboliczne do tego katalogu (ale w każdym innym przypadku niż opisany powyżej przypadek użycia, użyj README z wyjaśnieniem):

 
ln -s .this.directory empty/.keep

Aby zignorować pliki w tym katalogu, możesz dodać je do swojego katalogu głównego .gitignore:

 
echo "/empty" >> .gitignore

Aby dodać ignorowany plik, użyj parametru, aby go wymusić:

 
git add -f empty/.keep

Po zatwierdzeniu masz uszkodzony indeks symboliczny w indeksie, a git tworzy katalog. Zepsuty link ma pewne zalety, ponieważ nie jest zwykłym plikiem i nie wskazuje na zwykły plik. Więc pasuje nawet do części pytania „(która nie zawiera żadnych plików)”, nie według intencji, ale według znaczenia, jak sądzę:

 
find empty -type f

To polecenie pokazuje pusty wynik, ponieważ w tym katalogu nie ma żadnych plików. Tak więc większość aplikacji, które pobierają wszystkie pliki w katalogu, zazwyczaj nie widzi tego łącza, przynajmniej jeśli wykonują „plik istnieje” lub „jest czytelny”. Nawet niektóre skrypty nie znajdą tam żadnych plików:

 
$ php -r "var_export(glob('empty/.*'));"
array (
  0 => 'empty/.',
  1 => 'empty/..',
)

Ale zdecydowanie polecam używanie tego rozwiązania tylko w szczególnych okolicznościach, dobre napisane README w pustym katalogu jest zazwyczaj lepszym rozwiązaniem. (I nie wiem, czy to działa z systemem plików Windows ...)

    
4
2016-06-02 16: 42: 50Z

Możesz zapisać ten kod jako create_readme.php i uruchomić kod PHP z katalogu głównego twojego projektu Git.

 
> php create_readme.php

Doda pliki README do wszystkich pustych katalogów, aby te katalogi zostały następnie dodane do indeksu.

 
<?php
    $path = realpath('.');
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),       RecursiveIteratorIterator::SELF_FIRST);
    foreach($objects as $name => $object){
        if ( is_dir($name) && ! is_empty_folder($name) ){
            echo "$name\n" ;
            exec("touch ".$name."/"."README");
        }
    }

    function is_empty_folder($folder) {
        $files = opendir($folder);
        while ($file = readdir($files)) {
            if ($file != '.' && $file != '..')
                return true; // Not empty
            }
        }
?>

Następnie wykonaj

 
git commit -m "message"
git push
    
2
2016-04-21 11: 34: 44Z

Czasami mam repozytoria z folderami, które będą zawierały tylko pliki uważane za „treści” - to znaczy, że nie są to pliki, na których mi zależy, aby były wersjonowane i dlatego nigdy nie powinny być zatwierdzane. Dzięki plikowi .gitignore Gita możesz ignorować całe katalogi. Ale są chwile, kiedy posiadanie folderu w repozytorium byłoby korzystne. Oto doskonałe rozwiązanie do realizacji tej potrzeby.

To, co zrobiłem w przeszłości, to umieszczenie pliku .gitignore w katalogu głównym mojego repozytorium, a następnie wykluczenie tego folderu, na przykład:

 
/app/some-folder-to-exclude
/another-folder-to-exclude/*

Jednak te foldery nie stają się częścią repo. Możesz tam dodać coś takiego jak plik README. Ale potem musisz powiedzieć swojej aplikacji, aby nie martwiła się przetwarzaniem jakichkolwiek plików README.

Jeśli Twoja aplikacja zależy od znajdujących się tam folderów (choć pustych), możesz po prostu dodać plik .gitignore do danego folderu i wykorzystać go do osiągnięcia dwóch celów:

Powiedz Gitowi, że w folderze znajduje się plik, który sprawia, że ​​Git dodaje go do repo. Powiedz Gitowi, aby zignorował zawartość tego folderu, bez tego pliku. Oto plik .gitignore do umieszczenia w pustych katalogach:

 
*
!.gitignore

Pierwsza linia (*) mówi Gitowi, aby zignorował wszystko w tym katalogu. Druga linia mówi Gitowi, aby nie ignorował pliku .gitignore. Możesz umieścić ten plik w każdym pustym folderze, który chcesz dodać do repozytorium.

    
2
2016-07-11 18: 36: 20Z

Łatwym sposobem na to jest dodanie pliku .gitkeep do katalogu, który chcesz (obecnie) pozostać pusty.

Zobacz tę odpowiedź SOF , aby uzyskać więcej informacji - co wyjaśnia również, dlaczego niektórzy ludzie uważają konkurencyjną konwencję dodawania .gitignore plik (jak podano w wielu odpowiedziach tutaj) conłączenie.

    
0
2019-06-17 05: 03: 37Z
źródło umieszczone tutaj