استبعاد ملفات محددة عند الضغط على مستودع GIT محدد

StackOverflow https://stackoverflow.com/questions/2479162

سؤال

هل من الممكن استبعاد ملفات محددة ( *.AI ، *.PSD) عند الضغط على مستودعات معينة باستخدام GIT؟

حاجتي تأتي من محاولة استخدام GIT لكل من التحكم في الإصدار والنشر إلى هيروكو. إذا قمت بتضمين أصول الرسوم الخاصة بي في النشر ، فإن حجم الرخوة أكبر من المطلوب. ومع ذلك ، أنا بحاجة إلى تضمين جميع ملفات المشروع في بلدي الرئيسي جيثب مخزن.

هل كانت مفيدة؟

المحلول

الطريقة السهلة لحل مشكلتك الفعلية هي إنشاء ملف .slugignore ملف في جذر المستودع الذي يسرد الملفات التي لا ينبغي تعبئتها في Slug.

نصائح أخرى

يمكنك الحفاظ على فرع ثانٍ للنشر إلى Heroku ، والذي لا يحتوي على أي من هذه الملفات ، ولكن لا يزال يندمج من Master. (بالطبع ، سيتعين عليك تحديد نظام لحل تعارضات الدمج التي تحصل عليها عند تعديل ملفات .ai و .psd في Master).

الشيء المحدد الذي تطلبه مستحيل ، لسبب بسيط هو أنه عند الضغط ، تقوم بنقل الالتزامات الدقيقة من مستودع إلى آخر ، واثنين من الالتزامات التي لا تملك نفس الشجرة هي بحكم تعريفها.

نصيحة: أحدث إصدارات GIT لها أ --porcelain خيار ل git status والتي ستوفر معلومات سهلة لتحليلها مثل "m file1" "du file2" (معدلة وعدم الحذف/حذفها من قبلنا ، على التوالي). يمكنك كتابة غلاف Git-Merge لفرع النشر الخاص بك والذي يحاول الدمج ، ويقوم تلقائيًا بتنظيف النزاعات المتوقعة:

git checkout deploy
if ! git merge master; then
    git rm $(git status --porcelain | awk '/^DU/ {print $NF}')
fi

(سبب طباعتي $NF بدلاً من $2 هو أنه إذا تم إعادة تسمية الملف ، فسيبدو مثل "du Original_Name -> new_name" ، وستكون النسخة الموضوعة في شجرة العمل new_name ، وليس Original_Name.)

بالطبع ، يمكن أن يصبح البرنامج النصي أكثر تعقيدًا إذا كان وضعك - يمكنك البحث عن امتدادات معينة فقط (أضفها إلى نمط AWK المحدد) ، أو حتى التقاط الإخراج بالكامل في برنامج نصي بيرل حتى تتمكن من القيام ببعض المنطق الفاخر بسهولة ...

لا توجد طريقة سهلة مباشرة للقيام بذلك. إنه بالتأكيد يمكن التحكم فيه ، ولكن مع الكثير من الألم (لم يكن GIT مصممًا للقيام بذلك).

سيكون من الأسهل ربما إذا طلبت من Heroku توفير طريقة لاستبعاد بعض الملفات من النشر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top