Випадкові "папки" та ".keep" файли


87

Я вивчаю рейки.

Десь уздовж лінії я помітив, що в каталозі мого додатку rails з’являються, здавалося б, випадкові папки та файли. У деяких папках є concernsпапка з .keepфайлом усередині неї. .keepФайл виглядає порожнім. В інших папках папки немає, concernsале присутній порожній .keepфайл.

Хтось знає, яка справа з цими файлами / папками?

Відповіді:


132

.keepФайли - це 0-байтові файли, які дозволяють ігнорувати порожні папки різними процесами. Нічого страшного.


2
щиро дякую! То чи я повинен залишити їх? Я збирався їх видалити, якщо вони не потрібні
Alex Vallejo

5
Так, ви повинні тримати їх поруч, щоб вони були поруч, коли вони вам потрібні. Він також забезпечить, щоб папки були помічені вашою системою контролю версій.
Джош

Чи слід покласти їх у свій .gitignore? Я волів би не фіксувати порожні файли.
tbodt

7
@tbodt я б їх скоїв. Не знаю, що сталося б, якби хтось інший клонував вашу базу коду.
DickieBoy

33

Файли .keep особливо корисні, коли ви хочете зафіксувати порожні каталоги за допомогою git.

Цікавий факт, що назва .keepабо .gitkeepбезглуздо. ви можете викликати файл .fooдля того самого ефекту, що є лише читабельним домовленістю.

Ці .keepфайли також там волоком допомоги від одного VCS до іншого, запобігаючи видалення важливих каталогів , коли ви скасуєте злиття то , що б викликати ці каталоги , щоб бути порожніми.

Наприклад, розглянемо сценарій, який намагається cd dirпотрапити в каталог, який не відслідковується git.

Це парадигма дизайну програмного забезпечення, яка прагне зменшити кількість рішень, які повинні приймати розробники, набуваючи простоти, але не обов’язково втрачаючи гнучкість.


6

Турбота - це проста, але потужна концепція. Він існує для повторного використання коду. По суті, ідея полягає в тому, щоб витягти загальні та / або контекстні фрагменти коду, щоб очистити моделі та уникнути їх надмірного поглинання та некерованості.

Я хотів би чітко вказати, що ви повинні використовувати сервісні об'єкти для забезпечення функціональності, яка не стосується конкретного об'єкта. Наприклад, в організації багато користувачів. Тепер адміністратору організації потрібно експортувати CSV усіх користувачів для цієї організації. Цей код можна розмістити в моделі організації, але оскільки це не відповідальність об'єкта організації, цей код слід розмістити в класі, де u просто передають об'єкт організації, і він повертає CSV всіх користувачів.

 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

Кожного разу, коли вам потрібна генерація CSV, ви можете застосувати цю логіку у наведеному вище класі. Цей підхід утримує об'єкт (в даному випадку модель організації) в чистоті від коду, який не повинен бути його відповідальністю. Загальним принципом, якого я дотримуюсь, є: якщо код, який він модифікує самооб’єкт, перемістіть код до об’єкта служби.

Примітка: Ваше запитання стосувалось проблем, але я думав додати кілька додаткових матеріалів, яких я слідую, щоб підтримувати базу коду чистою та керованою, оскільки це може допомогти колегам-програмістам. Цей вищезазначений підхід є спірним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.