سؤال

لدي هذا git والذي يحتوي على مجلدين: binary-search و poker.على سبيل المثال ، http://github.com/soulnafein/code-katas

وأود أن جعل هذه المجلدات في الوحدات الفرعية على تغيير التاريخ.

كيف يمكن أن أفعل ذلك ؟

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

المحلول

الفكرة العامة هي أن استخدام 'بوابة تصفية فرع' و الخطوات التالية:

1) إنشاء submodule باستخدام --فرعي-فلتر filter-branch (بعد الاستنساخ الخاص بك الريبو).

$ git filter-branch --subdirectory-filter ABC HEAD -- --all

ترى هذا لذلك السؤال لمزيد من المعلومات حول هذه الخطوة.

2) إنشاء superproject باستخدام مؤشر تصفية filter-branch حذف submodule.

$ git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch ABC" --prune-empty HEAD

3) ارتكاب submodule إلى أحدث إصدار من superproject.

انظر فصل فرعي في فصل git على مثال عملي.

كل submodule سوف تبقى تاريخها.
ولكن كما قلت في هذا تصحيح مقترح, سيكون:

تفقد جميع الروابط التاريخية بين superproject و submodule ، وكسر أدوات مثلgit bisect'،مما يجعل من الصعب استعادة الإصدارات القديمة.

من الناحية المثالية, كل إصدار من تم إنشاؤه حديثا superproject أن تكون مرتبطة إلى الإصدار الصحيح من submodule (وجميع .gitmodules إدخالات أن يتم تعيين بشكل صحيح ، أيضا ، في جميع أنحاء المشروع التاريخ)

إذا كنت لا تحتاج إلى أن يكون التاريخ السابق ربط الوحدات الفرعية ، يمكنك اتباع الخطوات المذكورة أعلاه.
ولكن إذا كنت بحاجة إلى فرع من قديم نقطة في حين يكون المراجع إلى الوحدات الفرعية (والتي هي حاليا بسيطة الدلائل الفرعية) ، يمكن النظر في محاولة النصي المذكورة في التصحيح أود أن أشير إلى.كما تمت مناقشته في هذا الموضوع, لكن المتكاملة لبوابة بعد Junio ج Hamano يقول:

للأسف, أنا لا أعتقد أن لدينا مصممة بالكامل (ولا تنفذ على الإطلاق) السلوك للتحقق من نقاط مختلفة من التاريخ الذي لديه نفس submodule تنقلت في superproject شجرة.

نصائح أخرى

اليوم هناك طريقة أفضل للقيام بذلك: git subtree

يرى هذا الجواب.

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