Случайные папки "проблем" и файлы ".keep"

87

Учусь рельсам.

Где-то по ходу дела я заметил, что в каталоге моего приложения rails появляются, казалось бы, случайные папки и файлы. В некоторых папках есть concernsпапка с .keepфайлом внутри. .keepФайл выглядит пустым. В других папках папки нет, concernsно есть пустой .keepфайл.

Кто-нибудь знает, в чем дело с этими файлами / папками?

Алекс Вальехо
источник

Ответы:

132

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

ДикиМальчик
источник
2
большое спасибо! Так я должен их оставить? Я собирался удалить их, если они не понадобятся
Алекс Вальехо
5
Да, вы должны держать их под рукой, чтобы они были там, когда они вам понадобятся. Это также гарантирует, что ваша система контроля версий заметит папки.
Джош
Должен ли я положить их в свой .gitignore? Я бы предпочел не фиксировать пустые файлы.
tbodt
7
@tbodt Я бы их зафиксировал. Не уверен, что произойдет, если кто-то другой клонирует вашу кодовую базу.
DickieBoy
33

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

Интересный факт, название .keepили .gitkeepбессмысленно. вы можете вызвать файл .fooдля того же эффекта, это просто читаемое соглашение.

Эти .keepфайлы также там волоком помощи от одного VCS к другому, предотвращая удаление важных каталогов , когда вы отмените слияние то , что бы вызвать эти каталоги , чтобы быть пустыми.

Например, рассмотрим сценарий, который пытается cd dirвойти в каталог, который не отслеживается git.

Это парадигма разработки программного обеспечения, которая направлена ​​на уменьшение количества решений, которые необходимо принять разработчикам, с целью достижения простоты, но не обязательно потери гибкости.

lfender6445
источник
6

Обеспокоенность - это простая, но действенная концепция. Он существует для повторного использования кода. По сути, идея состоит в том, чтобы извлечь общие и / или контекстно-зависимые фрагменты кода, чтобы очистить модели и избежать их чрезмерного увеличения и неуправляемости.

Я хотел бы прямо указать, что вы должны использовать служебные объекты для обеспечения функциональности, не связанной с конкретным объектом. Например, в организации много пользователей. Теперь администратору организации необходимо экспортировать CSV всех пользователей этой организации. Этот код может быть помещен в модель организации, но, поскольку он не является обязанностью объекта организации, этот код следует поместить в класс, где вы просто передаете объект организации, и он возвращает 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, вы можете поместить эту логику в вышеуказанный класс. Такой подход сохраняет объект (в данном случае модель организации) чистым от кода, который не должен входить в его обязанности. Общий принцип, которому я следую: если код изменяет объект self, переместите код в объект службы.

Примечание. Ваш вопрос касался проблем, но я подумал о добавлении некоторых дополнительных вещей, за которыми я следую, чтобы сохранить базу кода в чистоте и управляемости, поскольку это может помочь другим программистам. Этот подход спорен.

прасад. суразе
источник