فایل را از مخزن گیت حذف کنید

برای توسعه دهندگان جدید یا یادگیرنده بسیار رایج است که به طور تصادفی فایل هایی با اندازه بزرگ یا داده های حساس را به یک مخزن Git اضافه کنند. این ممکن است به دلایل مختلفی اتفاق بیفتد، مانند عدم درک نحوه عملکرد Git، ندانستن چه فایل هایی باید نادیده گرفته شوند، یا متوجه نشدن که فایل های خاصی حاوی اطلاعات حساس هستند.
اگر به طور تصادفی فایلی با داده های حساس را در GitHub مرتکب شده اید، مهم است که سریعاً برای حذف داده ها از مخزن اقدام کنید.
اجازه دهید به چند سناریو برای حذف فایل ها از مخزن Git نگاه کنیم.
فایل را در مخزن گیت و فایل سیستم حذف کنید
ساده ترین راه برای حذف یک فایل از مخزن git استفاده از دستور git rm است. با این کار فایل از مخزن Git و همچنین فایل سیستم حذف می شود
git rm <filename>
git commit -m "Deleted the file from the git repository"
git push
پس از اجرای دستور git rm برای حذف یک فایل از مخزن Git، فایل از فهرست کاری محلی شما حذف می شود، اما هنوز از فهرست Git حذف نشده است. شما باید تغییرات خود را با استفاده از دستور git commit انجام دهید. این یک commit جدید ایجاد می کند که حذف فایل را منعکس می کند. و در نهایت یک فشار git انجام دهید.
توجه: توجه به این نکته مهم است که دستور git rm در صورت استفاده نادرست می تواند خطرناک باشد، زیرا می تواند فایل ها را برای همیشه از مخزن شما حذف کند. همیشه مطمئن شوید که قبل از اجرای دستور دوبار بررسی کنید و مطمئن شوید که یک نسخه پشتیبان از فایل های مهمی که می خواهید حذف کنید دارید.
فایل ها را به صورت بازگشتی در Git حذف کنید
برای حذف فایلها به صورت بازگشتی در Git، میتوانید از دستور git rm با گزینه -r استفاده کنید، که به Git میگوید تمام فایلها و دایرکتوریهای داخل دایرکتوری مشخص شده را به صورت بازگشتی حذف کند.
از فهرست کاری محلی و همچنین مخزن Git حذف خواهد شد.
در اینجا چگونه می توانید فایل ها را به صورت بازگشتی در Git حذف کنید:
از دستور git rm و سپس گزینه -r و نام دایرکتوری که قرار است حذف شود استفاده کنید.
git rm -r <foldername>
git commit -m "Deleted the folder from the repository"
git push
مشابه git rm، باید تغییرات را به دنبال دستور push انجام دهید.
توجه: به خاطر داشته باشید که حذف فایلها به صورت بازگشتی در Git، همه فایلها و دایرکتوریهای داخل فهرست مشخصشده را برای همیشه حذف میکند و تا زمانی که یک نسخه پشتیبان از فایلها نداشته باشید، قابل بازیابی نیستند. بنابراین، حتما قبل از اجرای دستور git rm -r دوباره چک کنید و اقدامات احتیاطی مناسب را برای جلوگیری از حذف تصادفی فایلهای مهم انجام دهید.
فقط فایلها را در مخزن Git حذف کنید
در برخی موارد، میخواهید فایلها را از مخزن Git حذف کنید، اما نه از سیستم فایل، مثلاً اگر بهطور تصادفی فایلی را که حاوی اطلاعات حساسی مانند گذرواژهها، کلیدهای API یا سایر دادههای محرمانه است، انجام دهید. در این حالت، میخواهید فایل را از مخزن Git حذف کنید تا از دسترسی دیگران به اطلاعات حساس جلوگیری کنید، اما میخواهید فایل را در سیستم فایل محلی خود نگه دارید تا بتوانید به استفاده از آن ادامه دهید یا زمانی که حجم زیادی را متعهد کردید. فایل ها یا فایل هایی که برای پروژه ضروری نیستند اما فضای زیادی را اشغال می کنند. در این حالت، شما می خواهید فایل ها را از مخزن Git حذف کنید تا حجم مخزن را کاهش داده و عملکرد را بهبود بخشد، اما می خواهید فایل ها را در سیستم فایل محلی خود نگه دارید تا در صورت نیاز بتوانید به کار با آنها ادامه دهید.
با استفاده از گزینه –cached با دستور git rm می توانید فایل ها را بدون حذف از فایل سیستم محلی از مخزن Git حذف کنید. این به شما امکان می دهد تا تاریخچه Git را بدون از دست دادن هیچ فایل مهمی حفظ کنید.
git rm --cached <filename>
git commit -m "Deleted file from repository only"
git push
توجه: اگر فایلی وجود دارد که نمیخواهید به مخزن Git اضافه شود، آن را به فایل نادیده گرفتن git اضافه کنید.
touch .gitignore
# Content of the gitignore file
filename
فایل gitignore خود را commit کنید و باید آماده باشید!
حذف فایل ها از Git History
دلایل مختلفی وجود دارد که ممکن است بخواهید فایل ها را از تاریخچه Git حذف کنید:
- برای حذف اطلاعات حساس
- برای کاهش حجم مخزن
- برای بهبود خوانایی
- برای اصلاح اشتباهات
به طور خلاصه، حذف فایل ها از تاریخچه Git می تواند به تمیز نگه داشتن مخزن، بهبود عملکرد و محافظت از اطلاعات حساس کمک کند. با این حال، لازم است هنگام حذف فایلها از تاریخچه Git محتاط باشید، زیرا میتواند بر تاریخچه پروژه و کار سایر اعضای تیم تأثیر بگذارد.
برای حذف فایل از تاریخچه Git، باید از دستور git filter-branch استفاده کنید و دستوری را برای اجرا در تمام شاخه های تاریخچه Git خود مشخص کنید.
$ git filter-branch -f --prune-empty --index-filter "git rm -r --cached --ignore-unmatch <path of file>" HEAD
این دستور ممکن است کمی طول بکشد، اگر تاریخچه شما حاوی فایل های زیادی باشد، اما در نهایت، فایل حذف شده دیگر در تاریخچه Git شما نخواهد بود.
پس از حذف یک فایل از تاریخچه Git، می توانید از دستور git log برای بررسی اینکه commit های مرتبط با فایل حذف شده حذف شده اند استفاده کنید.
برای حذف commit هایی که به فایل حذف شده ارجاع می دهند، باید دستور git gc را اجرا کنید تا مخزن پاک شود و اشیاء غیر مرجع حذف شوند. این دستور commit هایی را که دیگر هیچ مرجعی در مخزن ندارند، قطع می کند.
پس از اجرای git gc، میتوانید از git log استفاده کنید تا بررسی کنید که commitهای مرتبط با فایل حذف شده حذف شدهاند. اگر هر یک از commit ها هنوز در تاریخچه مخزن وجود دارد، ممکن است لازم باشد دستور git reflog expire را اجرا کنید تا ورودی های reflog که به فایل حذف شده ارجاع می دهند منقضی شود. این دستور تضمین می کند که فایل حذف شده دیگر از تاریخچه مخزن قابل دسترسی نیست.
نتیجه
بنابراین حذف یک فایل از مخزن Git یک فرآیند ساده است و بسته به مورد خاص شما راه های مختلفی برای انجام آن وجود دارد.
در هر صورت، همیشه ایده خوبی است که تغییرات خود را پس از حذف یک فایل از مخزن Git انجام دهید تا مطمئن شوید که تغییر دائمی است و در تاریخچه Git ثبت شده است.