Jak dodać pusty katalog w repozytorium Git?

Jak dodać pusty katalog (który nie zawiera plików w repozytorium Git?


innym sposobem katalog pusty (w repozytorium) - tworzenie .gitignore plik wewnątrz tego katalogu, który zawiera te cztery wiersze:

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

wtedy nie trzeba dokonać zamówienia bezpośrednio na drodze, co należy zrobić w rozwiązanie.

To również daje przewagę, że pliki w tym katalogu nie będą wyświetlane jako "untracked", kiedy robisz status git.

co @GreenAsJadekomentarz uparty:

myślę, że warto zauważyć, że rozwiązanie to sprawia, że dokładnie to, co zadał pytanie, ale być może nie to, że wiele osób, patrząc na to pytanie będą szukać. To rozwiązanie gwarantuje, że katalog będzie puste. On mówi: "Ja naprawdę nie chcę, aby pliki były sprawdzane tutaj". W odróżnieniu od "nie mam plików do rejestracji tutaj, ale potrzebuję katalog tutaj, pliki mogą pojawić się później".


nie możesz. Widzę git FAQ.

obecnie projekt indeksu git (obszar tymczasowy) dozwolone są tylko pliki być wymienione, i nikt na tyle kompetentny aby wprowadzić zmiany, aby umożliwić pusty katalogi tyle dbali o tę sytuację naprawić.

katalogi są dodawane automatycznie podczas dodawania plików wewnątrz nich. Że są katalogi nie powinny być dodane w repozytorium, i nie są śledzone na ich własny.

możesz powiedzieć:"git add <dir>" i dodam tam pliki.

Jeśli naprawdę potrzebujesz katalog dla istnieć w półkę, należy utworzyć pliki w nim. .przykład działa dobrze dla ten cel; można ją zostawić puste, lub uzupełnianie nazw plików należy się spodziewać pojawienia się w katalogu.


utwórz pusty plik o nazwie .gitkeep w katalogu i dodaj to.


zawsze możesz umieścić plik README w katalogu z wyjaśnieniem, dlaczego chcesz ten, w przeciwnym razie pusty katalog w repozytorium.


touch .keep

Linux to tworzy pusty plik o nazwie .keep. To imię jest lepsze, niż .gitkeep ponieważ pierwszy agnostykiem dla Git, natomiast ostatni jest specyficzny dla Git. Po drugie, jak zauważył inny użytkownik,.git umowa prefiksu powinno być zarezerwowane dla plików i katalogów, które wykorzystuje sam Git.

alternatywnie, jak wspomniano w innym odpowiedź katalog może zawierać opisowe README lub zamiast.

oczywiście, to wymaga, aby obecność pliku nie doprowadzi do zerwania twojej aplikacji.


dlaczego potrzebujemy puste версионной folderu

na początek:

pusty katalog nie może być częścią drzewa w systemie kontroli wersji Git.

to po prostu nie będzie monitorowany. Ale są scenariusze, w których "wersjami" pusty katalog może być przydatna, np.:

  • budownictwo predefiniowany struktura folderów do przydatnych katalogów projektu, i zrobić to struktura, dostępną dla każdego użytkownika / uczestnika repozytorium; lub, jak specjalistyczny przypadek wyżej, Tworzenie folderu pliki tymczasowe, np.cache/ lub logs/ katalogi
  • niektóre projekty po prostu nie będzie działać bez niektórych folderów (co często jest nutą źle opracowany projekt, ale to częsty realny scenariusz, i, być może, mogą być, na przykład, problemy z rozdzielczością).

niektórzy sugerowali obejścia

wielu użytkowników sugerują:

  1. zakwaterowanie README plik lub inny plik z niektórych treści, aby katalog непустым, lub
  2. tworzenie .gitignore plik z swego rodzaju" odwrotną logiką " (tj. obejmować wszystkie pliki), która w końcu, służy do tego samego celu podejście nr 1.

jeszcze oba rozwiązania, na pewno działają uważam je несогласными ze znaczącym podejściem do Git zarządzanie wersjami.

  • dlaczego należy umieścić fałszywe pliki lub READMEs, które, być może, naprawdę nie chcesz w swoim projekcie?
  • dlaczego warto korzystać z .gitignore (spis treści pliki), co jest całkowitym przeciwieństwem tego, że jest on przeznaczony dla (z wyjątkiem pliki), choć jest to możliwe?

.podejście gitkeep

użyj pusty o nazwie .gitkeep do tego, aby zmusić magazynie folder w systemie kontroli wersji.

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

  • używasz plik z celem przechowywania folderów. Nie umieścić tam informacje, których nie chcesz się kłaść.

    na przykład, należy użyć READMEs jak, no, READMEs przydatnych informacji, a nie jako pretekst, aby zapisać folder.

    podział problemów zawsze dobrze, i można jeszcze dodać a .gitignore ignoruj niepotrzebne pliki.

  • nazywając go .gitkeep sprawia, że bardzo jasne i zrozumiałe z samej nazwy pliku (a także innym programistom, co jest dobre dla ogólnego projektu i jednym z głównych celów repozytorium Git), że ten plik

    • plik, który nie jest powiązany z kodem (ze względu na wiodącą kropki i nazwy)
    • plik, wyraźnie związane z Git
    • jego celem (zapisz) jasno sformułowane i konsekwentna i semantycznie sprzeciwia się jego wartość jest ignoruj

podejmowanie

widziałem .gitkeep podejście przyjęte bardzo ważne ramkami, takich jak co Laravel,narożne-interfejs wiersza poleceń.


jak opisano w innych odpowiedziach, Git nie może być puste katalogi w swojej obszaru przemieszczania. (Zob. git FAQ. Jednak, jeśli do swoich celów katalog jest dość pusty, jeśli zawiera .gitignore tylko plik, a następnie można utworzyć .gitignore pliki do pustych katalogów tylko przez:

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

Andy Lester rację, ale jeśli twój katalog musi być pusty, a nie pusty jest pusty, można umieścić pusty tam w celu obejścia tego problemu.

na stronie, to problem realizacji, a nie podstawowym problemem projektowania repozytorium Git. Jak wspomniano wiele razy na liście dyskusyjnej Git, powód, dla którego to nie było realizowane, polega na tym, że nikt nie zadbał o to, aby wysłać patch dla niego, a nie w tym, że to nie może lub nie powinno być wykonane.


Ruby on Rails ścieżka:

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

teraz katalog dziennika zostanie włączony w drzewo. Jest to bardzo przydatne podczas wdrażania, więc nie trzeba pisać procedury do tworzenia katalogów czasopism.

pliki dziennika mogą być zapisywane poprzez wydanie,

echo log/dev.log >> .gitignore

ale prawdopodobnie wiedzieli.


Git nie śledzi puste katalogi. Patrz git FAQ w celu uzyskania dodatkowych wyjaśnień. Proponowane obejście-umieścić .gitignore plik w pustym folderze. Nie podoba mi się to rozwiązanie, bo .gitignore "ukryte" umową Unix. Nie ma też wyjaśnienia, dlaczego katalogi puste.

proponuję umieścić plik README w pusty katalog, wyjaśniając, dlaczego katalog jest pusty i dlaczego trzeba go śledzić w Git. Z plikiem README w miejsce, o ile dotyczy Git, katalog nie jest pusty.

prawdziwe pytanie brzmi, dlaczego potrzebujesz pusty katalog w git? Zazwyczaj masz jakiś skrypt kompilacji, który może utworzyć pusty katalog przed kompilacją/uruchomieniem. Jeśli nie, to zrób go. Jest to znacznie lepsze rozwiązanie, niż umieszczać puste katalogi w git.

Tak, masz powód, dla którego potrzebujesz pusty katalog w git. Umieść tę przyczynę w pliku README. W ten sposób inni twórcy (i przyszłe ty) wiesz, dlaczego pusty katalog powinien tam być. Będziesz również wiedzieć, że można usunąć pusty katalog, kiedy problem, który wymaga pusty katalog został rozwiązany.


aby wymienić każdy pusty katalog, należy użyć następującego polecenia:

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

aby utworzyć READMEs kruszywa 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 ignorować wszystkie w katalogu, oprócz pliku README, umieść następujące wiersze w swój .gitignore:

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

ponadto, można po prostu wykluczyć plik README od ignorowanych:

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

aby wymienić wszystkie README po tym, jak zostaną już utworzone:

find -name README.emptydir

uwaga: To ustawienie jest naprawdę nie działa, jak się okazało. przepraszam za niedogodności.

Oryginalny post poniżej:

znalazłem rozwiązanie podczas gry z internals jest Git!

  1. Załóżmy, że jesteś w swoim repozytorium.
  2. stwórz swój pusty katalog:

    $ mkdir path/to/empty-folder
    
  3. dodaj go do indeksu za pomocą polecenia wodno-kanalizacyjnych i puste drzewo SHA-1:

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

    wpisz polecenie i wprowadź drugi wiersz. Kliknij Enter a Ctrl + Ø, aby zakończyć wprowadzanie. Uwaga: format tryb [spacja] typ [spacja] SHA-1hash [TAB] ścieżka (karta ważna, formatowanie odpowiedzi nie zapisuje ją).

  4. no właśnie! Twój pusty folder znajduje się w swoim indeksie. Wszystko, czego potrzebujesz. zrobić, to wykonywać.

to rozwiązanie jest krótka i, najwyraźniej, działa normalnie (patrz edycja!), ale to nie jest tak łatwe do zapamiętania...

puste drzewo SHA-1 można znaleźć, tworząc nowy, pusty repozytorium Git,cd w tym problem git write-tree, który wyświetla puste drzewo SHA-1.

EDIT:

używam to rozwiązanie od tego czasu, jak go znalazłem. Wygląda na to, że to działa dokładnie tak samo, jak tworzenie подмодуль, za wyjątkiem tego, że moduł nie jest nigdzie zdefiniowana. To prowadzi do błędów przy wydawaniu git submodule init|update. Problem w tym, że git update-index zastąp 040000 tree160000 commit.

ponadto, każdy plik umieszczony pod tę drogę, nigdy nie będzie postrzegany Git, ponieważ on myśli, że należą do jakiegoś innego repozytorium. To jest obrzydliwe, jak to może być łatwo przeoczyć!

jednakże, jeśli jeszcze nie używasz (i nie będziesz używać) jakieś подмодули Git w swoim repozytorium, a" pusta " folder pozostanie pusty lub jeśli chcesz, aby Git wiedział o jego istnieniu i zignorował jego zawartość, możesz iść z tym ustawieniem. Idąc w zwykły sposób z подмодулями, sprawia, że więcej kroków, niż to ustawienie.


możliwe, dodawanie pustego katalogu wydaje się, że to będzie droga najmniejszego oporu bo masz skrypty, które oczekują, że ten katalog będzie istnieć (być może dlatego, że on jest celem dla generowanych plików binarnych). Inne podejście byłoby zmień skrypty, aby utworzyć katalog, w razie potrzeby.

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żna sprawdzić (złamaną) symboliczne dowiązanie do katalogu, dzięki czemu można uzyskać do niego dostęp bez ".wygenerowany " prefiks (ale nie jest to konieczne).

ln -sf .generated/bin bin
git add bin

gdy chcesz oczyścić swoje oryginalne drzewo, możesz po prostu:

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

jeśli weźmiesz często proponowane podejście sprawdzania w prawie pustym folderze, masz mały trudności w usunięciu zawartości bez usuwania ".gitignore " file.

możesz zignorować wszystkie wygenerowane pliki, dodając następujący w swój korzeń .przykład:

.generated

załóżmy, że potrzebujesz pusty katalog o nazwie tmp:

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

innymi słowy, trzeba dodać .plik gitignore w indeksie, zanim będzie można powiedzieć Git zignorować (i wszystko inne w pustym katalogu).


Ja też spotkałem się z problemem z pustymi katalogami. Problem z wykorzystaniem plików-zastępcze polega na tym, że trzeba je utworzyć i usunąć, jeśli nie są już potrzebne (bo później zostały dodane katalogi lub pliki. Z dużymi oryginalnymi drzewami zarządzanie tymi plikami zastępcze może być uciążliwe i podatne na błędy.

dlatego postanowiłem napisać narzędzie open source, który może zarządzać tworzeniem/usunięciem tych plików-zastępcze automatycznie. Ten napisane dla platformy .NET i działa pod Mono (.NET dla systemu Linux) oraz Windows.

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


nie możesz i, niestety, nigdy nie będzie w stanie. To decyzję podjął sam Linus Thorwald. On wie, co jest dla nas dobre.

gdzieś czytałem ranting.

znalazłem Re: puste katalogi.., ale, być może, jest jeszcze jeden.

musisz żyć z okrężną drogą...niestety.


przy dodawaniu .gitignore plik, jeśli masz zamiar umieścić w nim dowolną ilość treści, którą chcesz ignorować Git), można dodać jeden wiersz z gwiazdką * aby upewnić się, że nie dodajesz znak do pominięcia treści przypadkowo.


podobają mi się odpowiedzi @Artur79 i @mjs, więc używam kombinacji obu i zrobił jej się standardem dla naszych projektów.

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

jednakże, tylko kilku naszych programistów pracują na Mac lub Linux. Dużo pracy nad oknami, a ja nie mogłem znaleźć odpowiednik prosty jednoliniowy, aby wykonać to samo występuje. Niektóre z nich były na tyle szczęścia, aby mieć program zainstalowany z innych powodów, ale przypisywanie Cygwin tylko dla tego wydawało się zbędne.

Tak, tak jak większość nasi programiści już Ant zainstalowany, zebrałem plik kompilacji, aby wykonać to niezależnie od platformy.

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="Gitkeep" basedir="." default="keep">
    <!--Apply to all subdirs of this dir-->
    <target name="keep" description="-> Add a .gitkeep file to all empty subdir's of this dir.">

        <!--Create a ref to all the subdirs in the tree of this dir-->
        <dirset id="dirs.ref" dir="./" includes="**/*"/>
        <!--Create a list of the subdirs under this dir-->
        <property name="dirs.list" refid="dirs.ref" />

        <!--For each subdir-->
        <for list="${dirs.list}" delimiter=";" param="dir">
            <sequential>
                <!--If the subdir is empty this target will add a .gitkeep file to it-->
                <antcall target="gitkeep" inheritall="false">
                    <param name="dir" value="@{dir}"/>
                </antcall>
            </sequential>
        </for>
    </target>

    <!--Add a .gitkeep file to a directory if it's empty-->
    <target name="gitkeep" description="-> Add a .gitkeep file to a specific subdir of this dir. Use -Ddir=relative/path/to/dir">

        <!--Create a ref of the files inside this dir-->
        <fileset dir="${dir}" id="contents.ref"/>

        <!--Create a path to the contents of this directory, ONLY if it's not empty-->
        <pathconvert refid="contents.ref" property="contents.path" setonempty="false"/>

        <if>
            <!--If the dir is empty create the .gitkeep file-->
            <not><isset property="contents.path"/></not>
            <then>
                <!--Create the .gitkeep file-->
                <echo message="Version this dir in Git even if its empty." file="./${dir}/.gitkeep" force="true" append="false"/>
            </then>
        </if>
    </target>
</project>

Teraz mogę tylko uruchomić

ant -f gitkeep.xml

i to tworzy .plik gitkeep w dowolnym pustym katalogiem. Nawet na Windows :) Uwaga: dla tego pliku wymaga złożenia Ant Contrib jar.

Ja nadal pracować nad tą koncepcją tutaj.

https://github.com/mig82/gitkeep


Jak już wspomniano, nie można dodać puste katalogi, ale tu jest jeden wiersz, który dodaje pusty .gitignore pliki dla 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) }'

wkleiłem to w Rakefile dla łatwego dostępu.


Ja zawsze tworzę funkcję, aby sprawdzić pożądaną strukturę folderów i zbudować ją dla mnie w projekcie. To omija ten problem, ponieważ puste foldery są przechowywane w repozytorium git na serwerze 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 w PHP, ale jestem pewien, że większość języków obsługują tę samą funkcjonalność, a ponieważ tworzenie folderów dba o aplikacji, foldery zawsze tam będą.


to hack, ale zabawne jest to, że działa Git (2.2.1). Wygląda na to, że zaproponował @Teka, ale łatwiejsze do zapamiętania:

  • dodaj подмодуль w dowolnym repozytorium (git submodule add path_to_repo)
  • dodaj folder i plik .submodules. Wprowadź zmiany.
  • usuń .submodules file i zatwierdzić zmianę.

Teraz masz katalog, który jest tworzony podczas wyjmowania zatwierdzenia. Ciekawa rzecz, chociaż, jeśli spojrzeć na spis treści obiekt z drzewa tego pliku otrzymasz:

fatal: nieprawidłowa nazwa obiektu b64338b90b4209263b50244d18278c0999867193

nie polecam go używać, Chociaż, ponieważ może on przestać działać w przyszłych wersjach będzie Git. Co może spowodować uszkodzenie repozytorium.


nie ma sposobu, aby zmusić git śledzić katalogi, więc jedynym rozwiązaniem jest dodanie pliku-kruszywa do katalogu, który chcesz śledzić Git.

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

prefiksem . oznacza go jako ukryty plik.

innym pomysłem byłoby dodać README plik, który wyjaśnia, że katalog będzie służy do.


rozwiązanie Jamie Флурнуа działa dobrze. Oto nieco rozszerzona wersja, aby zapisać .htaccess:

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

Za pomocą tego rozwiązania można zablokować pusty folder, np. /log,/tmp lub /cache folder pozostanie pusty.


nie możesz. To celowe rozwiązanie projektowe towarzyszących Git. W zasadzie celem systemu zarządzania kodem źródłowym, takich jak Git, jest zarządzanie kodem źródłowym, a puste katalogi nie są source. Git również często określane jako tracker treści i znowu puste katalogi nie są zawartością (w rzeczywistości jest na odwrót), więc nie są śledzone.


czasami mamy do czynienia ze złymi napisane bibliotekami lub oprogramowaniem, które potrzebują "prawdziwy" pusty i istniejący katalog. Umieścić prosty .gitignore lub .keep może je złamać i spowodować błąd. W tych przypadkach może pomóc następujący, Ale nie ma gwarancji...

najpierw należy utworzyć odpowiedni katalog:

mkdir empty

następnie dodajesz złamaną symboliczne dowiązanie do katalogu (ale w każdym innym przypadku, z wyjątkiem opisanego powyżej przypadku użycia, użyj README Z wyjaśnienie):

ln -s .this.directory empty/.keep

aby ignorować pliki w tym katalogu, możesz dodać go do swojej root .gitignore:

echo "/empty" >> .gitignore

aby dodać znak do pominięcia plik, użyj opcji, aby zmusić go:

git add -f empty/.keep

po zatwierdzeniu masz złamane dowiązanie symboliczne w swoim indeksie, i git tworzy katalog. Złamana link ma pewne zalety, ponieważ nie jest zwykłym plikiem i nie oznacza zwykły plik. W ten sposób, to nawet pasuje do części pytania "(który nie zawiera plików), a nie zamiar, ale w rozumieniu, myślę:

find empty -type f

ta komenda pokazuje pusty wynik, tak jak w tym folderze nie ma plików. Dlatego większość aplikacji, które otrzymują wszystkie pliki w katalogu, zwykle nie widzą tego łącza, przynajmniej jeśli robią "plik istnieje" lub "odczytania". Nawet niektóre skrypty nie znajdą tam żadnych plików:

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

ale ja zdecydowanie polecam korzystać z tego rozwiązania tylko w szczególnych okolicznościach, dobrze napisane README w pustym katalogu zazwyczaj jest to najlepsze rozwiązanie. (I nie wiem, czy to działa z systemem windows...)


dodanie jeszcze jednej opcji w bójkę.

zakładając, że chcesz dodać katalog w git co do wszystkich celów związanych z git, musi pozostać puste i nigdy nie śledzić jego zawartość, a .gitignore jak uważa wiele razy tutaj, zrobi trick.

format, jak już wspomniano, jest:

*
!.gitignore

teraz, jeśli chcesz sposób, aby zrobić to w wierszu polecenia, za jednym zamachem, podczas gdy w środku katalog chcesz dodać można wykonać:

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

mam skrypt powłoki, który używam do tego. Podaj skrypt, jak chcesz, i albo dodaj go gdzieś w drogę włączyć, albo link do niego bezpośrednio:

#!/bin/bash

dir=''

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

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

przy tym można albo wykonać go z katalogu, który chcesz dodać, lub odwoływać się do katalogu, ponieważ jest to pierwszy i jedyny parametr:

$ ignore_dir ./some/directory

inny wariant (w odpowiedzi na komentarz @GreenAsJade), jeśli chcesz śledzić pusty folder, że maja zawierają monitorowane pliki w przyszłości, ale są puste w tej chwili, można ommit * czek w. W zasadzie cały plik mówi: "Nie ignoruj mnie", ale poza tym katalog jest pusty i jest śledzony.

kod .gitignore plik będzie wyglądał tak:

!.gitignore

to wszystko, sprawdź to, i masz pusty, ale śledzony katalog, który można śledzić pliki w trochę późniejszym czasie.

powód, dla którego proponuję zapisać ten wiersz w pliku, polega na tym, że daje .gitignore celem. W przeciwnym wypadku, ktoś może pomyśleć, aby go usunąć. To może pomóc, jeśli zamieścisz komentarz nad paskiem.


jeśli chcesz dodać folder, w którym będzie dużo przejściowych danych w kilka semantycznych katalogach, to jeden ze sposobów dodać coś takiego do swojego korzenia .гитюдного...

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

następnie można zablokować opisowe README.md-pliki (lub puste pliki, nie ma znaczenia, jeśli możesz kierować je jednoznacznie, jak za pomocą *.md w tym przypadku) w każdym katalogu, aby upewnić się, że wszystkie katalogi pozostają częścią REPO, oprócz plików z rozszerzeniem) przechowywane są ignorowane. Ograniczenia:.nie są dozwolone w nazwach katalogów!

możesz wypełnić wszystkie te katalogi z plikami xml / images lub cokolwiek dodać więcej katalogów pod /app/data/ z biegiem czasu, w miarę potrzeb przechowywania dla twojej aplikacji (za pomocą README.md pliki służące do zapisu w opisie tego, że każdy katalog przechowywania dokładnie).

nie ma potrzeby dodatkowo modyfikować swoje .gitignore lub децентрализовать, tworząc nowy .gitignore dla każdego nowego skorowidz. Pewnie, że nie jest to mądre rozwiązanie, ale zwięzły gitignore-mądra i zawsze działa dla mnie. Piękne i proste! ;)

enter image description here


możesz zapisać ten kod jak create_readme.php i uruchom PHP kod z katalogu głównego projektu w Git.

> php create_readme.php

dodaje pliki README we wszystkie puste katalogi, katalogi te następnie zostały 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
            }
        }
?>
git commit -m "message"
git push

czasami mam repozytorium z folderami, które będą zawierać tylko te pliki, które są "zawartością", to znaczy, że nie są plikami, które mnie interesują, i dlatego nigdy nie powinny być ustalone. Z Git .gitignore, można zignorować całe katalogi. Ale zdarzają się przypadki, kiedy obecność folderu w repo byłoby pomocne. To doskonałe rozwiązanie dla zaspokojenia tej potrzeby.

co zrobiłem w przeszłości stawiają .plik gitignore w katalogu głównym moje REPO, a następnie wykluczyć folder, np.:

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

jednak te foldery, a następnie nie stają się częścią REPO. Możesz dodać tam coś takiego pliku README. Ale wtedy musisz powiedzieć swojemu aplikacji nie martwić się o traktowaniu wszystkich plików README.

Jeśli twoja aplikacja zależy od dostępności folderów (choć i pustych), można po prostu dodać .gitignore plik w katalogu, o którym mowa, i go używać do osiągnięcia dwóch celów:

powiedz Git, że istnieje plik w folderze, który sprawia, że Git dodać do repo. Powiedzieć git zignorować zawartość tego folderu, minus ten sam plik. Oto .gitignore, aby umieścić w puste katalogi:

*
!.gitignore

pierwszy wiersz ( * ) mówi Git ignorować wszystko w tym katalogu. Druga linia mówi Git nie ignorować .plik.gitignore możesz umieścić ten plik w każdą pusty folder, który chcesz dodać do repozytorium.