Які відмінності між .gitignore та .gitkeep?


1926

Які відмінності між .gitignoreі .gitkeep? Вони однакові з іншим ім’ям, або вони обидва виконують різні функції?

Я не можу знайти багато документації на .gitkeep.

Відповіді:


3436

.gitkeep не документально підтверджено, тому що це не особливість Git.

Git не може додати повністю порожній каталог . Люди, які хочуть відслідковувати порожні каталоги в Git, створили конвенцію про розміщення файлів, викликаних .gitkeepу цих каталогах. Файл можна назвати чим завгодно; Git не приділяє цьому імені особливого значення.

Існує конкурентна умова додавання .gitignoreфайлу до порожніх каталогів, щоб відстежувати їх, але деякі люди вважають це заплутаним, оскільки мета - тримати порожні каталоги, а не ігнорувати їх; .gitignoreтакож використовується для переліку файлів, які Git повинен ігнорувати під час пошуку незатребуваних файлів.


414
Чи не було б кращим рішенням помістити READMEфайл в інакше порожній підкаталог, який містить трохи інформації про те, для чого цей підкаталог буде використовуватися? Здається, що заплутаним є файл під назвою, .gitkeepякий насправді не є частиною git.
tamouse

423
@tamouse багато разів, шлях порожнього каталогу (наприклад, імена папок) достатній для вираження його мети (приклади: шаблони / кеш, завантаження / великі пальці тощо). У цих випадках, якщо прочитати інформацію про кожне з них, то це буде зайвим.
Halil Özgür

16
люди, які хочуть відслідковувати порожні каталоги, повинні вказувати в README, що каталог повинен бути створений або створювати каталоги за допомогою інструменту збирання або будь-якого іншого інструментарію, необхідного для створення каталогу; /

32
@tamouse, @omouse: .gitignoreфайл з двома рядками: *і !.gitignoreбільш ніж достатньо ясності, щоб передати те, що відбувається. Якщо потрібна додаткова розробка, додайте коментар у верхню частину файлу за допомогою # синтаксису.
Droogans

63
Варто зауважити, що популярний фреймворк Rails трохи змінив цю умову, використовуючи .keepфайли замість .gitkeepзбереження цих порожніх папок, оскільки git - не єдина система управління джерелами, яка не відстежує порожні папки. Детальніше тут: github.com/rails/rails/isissue/2800
Claudio Floreani

330

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


Якщо ви хочете порожній каталог і переконайтеся, що він залишається "чистим" для Git, створіть, що .gitignoreмістить такі рядки в межах:

# .gitignore sample
###################

# Ignore all files in this dir...
*

# ... except for this one.
!.gitignore

Якщо ви бажаєте, щоб у Git були видимі лише один тип файлів, ось приклад того, як відфільтрувати все, крім .gitignore та всіх .txtфайлів:

# .gitignore to keep just .txt files
###################################

# Filter everything...
*

# ... except the .gitignore...
!.gitignore

# ... and all text files.
!*.txt

("#" вказує коментарі.)


3
Мені подобається сама така практика. Якщо в цих каталогах був вихідний код, не було б потреби в .gitkeep та загальному, це тимчасовий вміст / кеш / користувальницький вміст, який під час тестування все-таки буде генерований, і змушує вас також .gitignore ці файли
chrisan

1
Навіщо це потрібно !перед .gitignore? Це для того, щоб уникнути крапки?
Буде чи

7
@Will - Ні, це !заперечує наступну частину, як це зазвичай робиться в програмуванні.
sjas

3
Не потрібно вкладати !.gitignoreу файл ігнорування git, або додайте файл, потім відредагуйте його, або примушуйте додавати його з відповідним вмістом ("*", щоб ігнорувати все, або нічого, щоб просто переконатися, що папка існує) подальший приклад .
AD7six

13
З вашого посилання: Since the git ignore file is already in the repo it is not necessary to not-ignore it - it is already tracked.------ Якщо це не так, і ви не робите насильницького додавання, ви можете забути про це. У тривіальних випадках немає проблем, але якщо це файл більшого розміру, ви можете засмутитися. Використання !.gitignoreзаважає стріляти в ногу. Я вважаю за краще, спаливши себе в минулому.
sjas

125
.gitignore

це текстовий файл, що містить список файлів у вашому каталозі, який git буде ігнорувати або не додавати / оновлювати у сховищі.

.gitkeep

Оскільки Git видаляє чи не додає порожні каталоги до сховища.

Просто зробіть, touch /path/to/emptydirectory/.gitkeepщоб додати файл, і Git тепер зможе підтримувати цей каталог у сховищі.


18
Ви можете мати скільки .gitignoreзавгодно s, якщо ви не хочете кожен раз вказувати повний шлях до кожної папки.
sjas

1
Я намагаюся згадати список пустих каталогів у .gitkeepфайлі, але він не буде відслідковувати порожні каталоги, лише слідкуйте за папками, де .gitkeepіснує файл. чому так ?
Pardeep Jain

2
.gitkeep не працює як .gitignore. Це не список каталогів, які слід тримати. Це просто порожній файл, який знаходиться в каталозі, який ви хочете зберегти. Це можна назвати все , що ви хочете .keep і т.д. Таким чином , ви можете мати каталог як / Foo / бар і файл gitkeep буде /foo/bar/.gitkeep
Джим Munro

@sjas, як би введення кількох .gitignores врятувало вас від вказівки повного шляху до кожної папки кожен раз? Я думаю, я пропускаю щось очевидне.
Willwsharp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.