تا حالا اگر کسی روی سرور فایلی را دستی عوض کرده بود، `git pull --ff-only` شکست میخورد و کلِ اسکریپت همانجا میایستاد. چون هیچکدام از مراحلِ بعدی اجرا نمیشد، سرور با کدِ قدیمی میماند — بیصدا. یک بار همین دو روز طول کشید. حالا مرحلهی اول fetch میکند، اگر تغییرِ دستی (یا کامیتِ محلی) باشد آن را در .deploy-backups/*.patch نگه میدارد، و با `git reset --hard origin/<branch>` کنارش میگذارد و ادامه میدهد. سرور در هر وضعیتی باشد، یک اجرا دقیقاً همان چیزی میشود که روی gitea است. `git clean` عمداً زده نمیشود و نباید اضافه شود: db.sqlite3 و .env و .django_secret_key ردیابینشده و داخلِ همین پوشهاند. با مخزنِ ساختگی هر سه حالت آزموده شد: تغییرِ دستی، درختِ تمیز، و کامیتِ محلیِ واگرا. در هر سه، .env و db.sqlite3 دستنخورده ماندند. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
20 lines
568 B
Plaintext
20 lines
568 B
Plaintext
venv/
|
||
__pycache__/
|
||
*.pyc
|
||
db.sqlite3
|
||
.DS_Store
|
||
.env
|
||
|
||
# کتابهای درسی: خودِ PDFها در گیت نمیآیند (حجیماند)
|
||
data/textbooks/*
|
||
!data/textbooks/README.md
|
||
|
||
# کلیدِ امضای تولیدشدهی خودکار (هرگز کامیت نشود)
|
||
.django_secret_key
|
||
|
||
# خروجیِ collectstatic — تولیدی است، در هر دیپلوی از نو ساخته میشود.
|
||
staticfiles/
|
||
|
||
# نسخهی پشتیبانِ تغییرهای دستیِ روی سرور که deploy.sh کنار میگذارد.
|
||
.deploy-backups/
|