سؤال

أنا أبحث عن كيفية استيراد بعض رمز الجزء الثالث في مستودع جيت. رمز الطرف الثالث هو "STM32F10X_STDPERIPH_LIB" المقدم من St.

LIB هو في الواقع مجموعة من ملفات C (وملفات الرأس العادية) التي تتضمن فقط والبناء عليها عند القيام بذلك STM32. المشروع.

المشكلة هي أنها توفرها فقط كملف مضغوط وأنها تحرر إصدارات جديدة، لذلك أود إضافة المزيد من التحكم.

لذلك فإن خطتي هي كتابة سيناريو صغير يفعل هذا:

  1. Unzip.
  2. الاستيلاء على بعض الملفات (لا أحتاج إلى جميع الملفات في الرمز البريدي)
  3. استيراد الملفات المحددة في مستودع GIT

مشكلاتي تبدأ في الخطوة الأخيرة، كيف يمكنني استيراد الملفات القديمة والكتابة فوقها مع تلك الجديدة (وإزالة الملفات التي لم تعد مضمنة)؟

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

المحلول

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

git checkout -b vendor    # create a vendor branch and check it out

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

الآن سنضع أحدث إصدار من البائع هناك.

find . -not -path *.git* -and -not -path . -delete  # delete everything but git files
dump the 3rd party code into the project directory  # I'll leave that to you
git add .                              # add all the files, changes and deletions
git commit -a -m 'Vendor update version X.YY'   # commit it
git tag 'Vendor X.YY'                  # optional, might come in handy later

نحذف كل شيء أولا بحيث يمكن أن يرى GIT أشياء حذف البائع. إن قدرة Git's على رؤية الحذف وتخمين الملفات التي تحركت يجعل هذا الإجراء أبسط أقصى من التخريب.

الآن يمكنك العودة إلى التطوير الخاص بك (أنا أفترض سيد) ودمج في تغييرات البائع.

git checkout master
git merge vendor

تعامل مع أي صراعات طبيعية. الإصدار الخاص بك محدث الآن حتى الآن مع البائع. العمل على السيد كالمعتاد.

في المرة القادمة هناك إصدار جديد من البائع، كرر الإجراء. يستفيد هذا من دمج GIT الممتاز للحفاظ على تصحيحاتك حتى الآن مع تغييرات البائعين.

نصائح أخرى

قليلا من داعية الشيطان هنا ولكن هل تحتاج حقا إلى مستودع جيت؟

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

ومع ذلك، يجب أن تعمل شيء مثل ما يلي:

$ cd repo
$ find . -not -path *.git* -and -not -path . -delete
$ unzip /tmp/thirdparty.zip
$ git add .
$ git commit -a 'Updated version'

وهذا هو، حذف جميع الملفات إلا ال .git دليل و .gitignore, ، إلخ. هذا من أجل التعامل مع حالة الملفات المحذوفة في مشروع الطرف الثالث. ثم unzip ملف zip المحدث في الدليل. أضف أي ملفات جديدة إلى المستودع. ارتكب.

امل ان يساعد! :)

تفضيلي هو إنشاء مستودع GIT، وتحديثه بشكل دوري (جيت ارتكاب -A "التحديث") وربطه ببساطة في مشاريعي (كدليل (LN -S، تقاطع، إلخ) أو ككتبة مشتركة). للملفات التي لا تحتاج إليها، استخدم. gitignore.

أنا جديد في بوابة، ولكن لن يكون مثل مكبس هو الحل الأفضل؟ http://piston.rubyforge.org/

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