Losowe „dotyczy” folderów i plików „.keep”

87

Uczę się szyn.

Gdzieś po drodze zauważyłem, że pozornie przypadkowe foldery i pliki pojawiają się w katalogu mojej aplikacji railsowej. W niektórych folderach znajduje się concernsfolder zawierający .keepplik. .keepPlik wydaje się być pusty. W innych folderach nie ma concernsfolderu, ale jest pusty .keepplik.

Czy ktoś wie, o co chodzi z tymi plikami / folderami?

Alex Vallejo
źródło

Odpowiedzi:

132

.keeppliki to pliki 0-bajtowe, które mają zapobiec ignorowaniu pustych folderów przez wszelkiego rodzaju procesy. Nie ma się o co martwić.

DickieBoy
źródło
2
wielkie dzięki! Więc powinienem je zostawić? Chciałem je usunąć, jeśli nie są potrzebne
Alex Vallejo
5
Tak, powinieneś je mieć pod ręką, aby były tam, gdzie ich potrzebujesz. Zapewni to również, że foldery zostaną zauważone przez system kontroli wersji.
Josh
Czy powinienem umieścić je w moim .gitignore? Wolałbym nie zatwierdzać pustych plików.
tbodt
7
@tbodt, popełniłbym ich. Nie jestem pewien, co by się stało, gdyby ktoś inny sklonował Twój kod.
DickieBoy
33

Pliki .keep są szczególnie przydatne, gdy chcesz zatwierdzić puste katalogi za pomocą git.

Zabawny fakt, nazwa .keeplub .gitkeepjest bez znaczenia. możesz wywołać plik .foodla tego samego efektu, jest to tylko czytelna konwencja.

Te .keeppliki są również tam Portage pomocy od jednego do drugiego VCS, uniemożliwiając usunięcie ważnych katalogów, kiedy un seryjnej coś, co spowodowałoby katalogi te mają być puste.

Na przykład rozważmy skrypt, który próbuje cd dirwejść do katalogu, który nie jest śledzony przez git.

Jest to paradygmat projektowania oprogramowania, który ma na celu zmniejszenie liczby decyzji, które muszą podjąć programiści, zyskując prostotę, ale niekoniecznie tracąc elastyczność.

lfender6445
źródło
6

Obawy to prosta, ale potężna koncepcja. Istnieje w celu ponownego wykorzystania kodu. Zasadniczo chodzi o wyodrębnienie wspólnych i / lub specyficznych dla kontekstu fragmentów kodu w celu oczyszczenia modeli i uniknięcia ich zbytniego i niemożliwego do zarządzania.

Chciałbym wyraźnie określić, że należy używać obiektów usług w celu zapewnienia funkcjonalności, która nie dotyczy konkretnego obiektu. Np. Organizacja ma wielu użytkowników. Teraz administrator organizacji musi wyeksportować plik CSV wszystkich użytkowników tej organizacji. Ten kod można umieścić w modelu organizacyjnym, ale ponieważ obiekt organizacyjny nie jest za to odpowiedzialny, kod ten należy umieścić w klasie, w której wystarczy przekazać obiekt organizacji i zwrócić CSV wszystkich użytkowników.

 class Services::GenerateCsv
     def self.get_users org
         #add logic the fetch users for the org and generate the CSV and return the CSV data
     end
 end

Ilekroć potrzebujesz generowania CSV, możesz umieścić tę logikę w powyższej klasie. Takie podejście utrzymuje obiekt (w tym przypadku model organizacji) przed kodem, za który nie powinien odpowiadać. Ogólna zasada, którą się kieruję, brzmi: jeśli kod modyfikuje obiekt self, przenieś kod do obiektu usługi.

Uwaga: Twoje pytanie dotyczyło obaw, ale pomyślałem o dodaniu kilku dodatkowych rzeczy, które śledzę, aby kod był czysty i łatwy w zarządzaniu, ponieważ może to pomóc innym programistom. To powyższe podejście jest dyskusyjne.

prasad.surase
źródło