کاربرد فایل gitkeep.

کدنویسی پروژه که شروع میشه ما همیشه ساختار پروژه رو از ابتدا ایجاد میکنیم مثلا یک پوشه assets برای فایل های استایل و اسکریپت و تصاویر و ... میسازیم یک پوشه src برای اینکه محتوای اصلی پروژه مثل صفحات و کامپوننت ها و ... رو توش ایجاد کنیم و در بیشتر مواقع این پروژه هارو روی گیت هاب میفرستیم.

اما در روند پروژه ممکنه ما نیاز داشته باشیم پوشه هایی رو درست کنیم ولی بعدا فایل های درون اون ها رو ایجاد کنیم مثلا:
ما پروژه وب اپ خودمون رو جلو میبریم و در ادامه نیاز پیدا میکنیم که یک state management مثل ریداکس رو به پروژه اضافه کنیم یا حتی خیلی ساده بررسی کنیم قراره یه فونت جدید به پروژه اضافه کنیم اما هنوز فونتی به دستمون نرسیده اما میایم یه پوشه fonts توی assets ها میسیازیم تا فونت هارو به دستمون برسونن اما در زمان نیاز به این کار نداریم ولی لازمه که ساختار ایجاد بشه تا حداقل موقع ارائه و یا توضیح راجب پروژه نشون بدیم که : "بله! این ویژگی هم قراره در ادامه به پروژه اضافه بشه و ازش استفاده کنیم"

اما اینجا یک مشکل داریم!

گیت نمیتونه دایرکتوری یا پوشه های خالی رو push کنه و فقط دایرکتوری هایی رو دنبال میکنه که فایل دارن یا به اصلاح فایل هارو track میکنه. (میتونی یه پوشه خالی بسازی و push کنی میبینی که روی گیت هابت وجود نداره)

من برای شروع یه پروژه ایجاد کردم که یه فایل app.js داره و یه پوشه که خالیه و هیچی توش نیست به اسم empty-directory

ساختار پروژه
ساختار پروژه

حالا بریم این پروژه رو توی گیت هاب پوش کنیم ببینیم کدوم فایل ها track میشن توسط گیت:

گیت هاب
گیت هاب

میبینیم در نهایت چیزی که من توی ریپو گیت هابم دارم فقط یه فایل app.js هست و خبری از دایرکتوری خالی من نیست

اما چطوری پس این پوشه یا دایرکتوری که فعلا قراره خالی بمونه رو من توی گیت هاب پوش کنم؟

راه حل!

کافیه توی همون دایرکتوری یه فایل gitkeep. ایجاد کنی تا بوسیله گیت این دایرکتوری هم track بشه

ساختار جدید پروژه
ساختار جدید پروژه

ابهام!

چرا از gitignore استفاده نکنیم؟ که در جواب میشه گفت: "چرا میتونین"

اصلا میتونین یه فایل readme.md یا یه فایل تکست یا هرچیزی با هراسمی ایجاد کنین و توی دایرکتوری بذارین

اما تفاوتی که هست استفاده از gitignore ممکنه کار درستی نباشه چون از این فایل استفاده میکنیم تا یک سری فایل ها یا دایرکتوری های خاص track نشن پس شاید جالب و درست نباشه که از این اسم استفاده کنیم و در بیشتر داکیومنت ها از gitkeep برای track شدن دایرکتوری های خالی استفاده میشه که خب بهتره ما این اصل رو رعایت کنیم

بیشتر بخوانیم

دوتا لینک هم قرار میدم که اگر دوست داشتین از رفرنس های دیگه بخونین 😎👌

What are the differences between .gitignore and .gitkeep?

Use .gitkeep to commit & push