٥، ١٤، رعاية مشروع
— إصدار مشروعك
وسم إصداراتك
عندما تنوي إطلاق إصدارة، من المستحب أن تعيّن لها وسمًا، حتى تُنشئها مجددا متى شئت فيما بعد. تستطيع إنشاء وسمٍ كما شرحنا في باب أسس جت. وإذا كنت مشرف المشروع ووقّعت الوسم، فسيبدو مثل هذا:
$ git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Scott Chacon <schacon@gmail.com>"
1024-bit DSA key, ID F721C45A, created 2009-02-09
إذا كنت فعلًا توقّع وسومك، فقد يتعبك توزيع المفتاح العمومي الذي توقّع به.
مشرف مشروع جت حل هذا بجعل مفتاحه العام كتلة رقْمية في المستودع (“blob”)، ووسمها بوسم يشير إليها مباشرةً.
إذا أردت فعل هذا، فعليك أولا تحديد المفتاح الذي تريد التوقيع به، فاسرد مفاتيحك بأمر gpg --list-keys:
$ gpg --list-keys
/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub 1024D/F721C45A 2009-02-09 [expires: 2010-02-09]
uid Scott Chacon <schacon@gmail.com>
sub 2048g/45D02282 2009-02-09 [expires: 2010-02-09]
عندئذٍ تستطيع استيراده مباشرةً إلى قاعدة بيانات جت بتصديره ونقله في أنبوب يونكسي إلى أمر git hash-object، الذي يكتب هذا المحتوى في كتلة رقمية جديدة في جت ويخبرك ببصمة الكتلة:
$ gpg -a --export F721C45A | git hash-object -w --stdin
659ef797d181633c87ec71ac3f9ba29fe5775b92
الآن لديك محتوى مفتاحك في جت، فيمكنك إنشاء وسم يشير إليه مباشرةً بتعيين البصمة التي أخبرك بها أمر hash-object:
$ git tag -a maintainer-pgp-pub 659ef797d181633c87ec71ac3f9ba29fe5775b92
فإذا دفعت الوسوم بالأمر git push --tags، فإنك ستشارك الوسم maintainer-pgp-pub مع الجميع.
وإذا أراد أحدٌ أن يتحقق وسمًا، فإنه يجذب من بيانات جت الكتلةَ الرقمية المشار إليها بالوسم ويستوردها إلى GPG:
$ git show maintainer-pgp-pub | gpg --import
فيمكنه بهذا المفتاح أن يتحقق كل وسومك الموقعّة.
وحتى إنك تستطيع أن تشرح خطوات التحقق بدقة في رسالة الوسم نفسه، ليراها من يُظهره بالأمر git show «وسم-المفتاح».
توليد رقم بناء
لا يرافق إيداعات جت أرقامٌ متزايدة بإطراد مثل v123 أو نحوها. فإذا أردت لإيداعٍ اسمًا يلائم البشر، فيمكنك تنفيذ أمر git describe على هذا الإيداع.
فيصنع لك جت اسمًا يتكون من اسم آخر وسم قبل هذا الإيداع، ثم عدد الإيداعات بينهما، ثم يختمه بمختصر بصمة الإيداع مسبوقة بحرف “g” (اختصار Git):
$ git describe master
v1.6.2-rc1-20-g8c5b85c
هكذا تستطيع تصدير لقطة أو بناء من مشروعك وتسمّيه اسمًا يفهمه الناس.
بل إنك إذا بنيت جت من مصدره البرمجي المستنسخ من مستودعه الرسمي، فإن git --version سيجيب بشيء مثل هذا.
وإذا طلبت وصف إيداع قد وسمته هو نفسه، فإن git describe يعطيك اسم الوسم فقط.
أمر الوصف بطبيعته لا يعتمد إلا على الوسوم المعنونة (وهي الوسوم المنشأة بخيارات أشهرها -a و -s). أما إذا أردته أن ينظر إلى الوسوم الخفيفة كذلك، فأضف خيار --tags إليه.
ويمكنك كذلك استعمال هذا الاسم الوصفي مع أمر السحب git checkout وأمر الإظهار git show، على أن ذلك يعتمد على مختصر البصمة الذي في آخره فقد لا يدوم صلاحه.
فمثلا انتقل مشروع نواة لينكس من ثماني محارف إلى عشرة محارف لضمان تفرّد بصمات الكائنات، فأُبطلت الأسماء القديمة الناتجة من git describe.
تجهيز إصدارة
الآن أنت تريد إصدار بناء من مشروعك.
من المستحب أن تحزم آخر لقطة من مشروعك لأولئك المساكين المحرومين من استخدام جت.
افعل هذا بأمر git archive، مثلا:
$ git archive master --prefix='project/' | gzip > `git describe master`.tar.gz
$ ls *.tar.gz
v1.6.2-rc1-20-g8c5b85c.tar.gz
فإذا فتح أحدٌ هذه الحزمة، سيجد آخر نسخة من مشروعك الذي في مجلد project.
وتستطيع كذلك إنشاء حزمة بصيغة zip، بأمر كبير الشبه بالسابق، لكن بالخيار --format=zip لأمر الحزم:
$ git archive master --prefix='project/' --format=zip > `git describe master`.zip
لديك الآن حزمة tar مضغوطة وحزمة zip من إصدارة مشروعك، فيمكنك رفعهما إلى موقعك أو إرسالهما بالبريد الشابكي إلى الناس.
السجل الموجز
حان الآن موعد إخبار قائمتك البريدية بما حدث في مشروعك.
أمر السجل الموجز git shortlog هو طريقة ظريفة سريعة لصياغة «سجل تغييرات» مشروعك منذ آخر إصدارة أو رسالة بريدية.
فإنه يوجز كل الإيداعات التي في النطاق الذي تحدده. فمثلا الأمر التالي يخبرك بموجز الإيداعات جميعًا منذ آخر إصدارة، إذا كانت آخر إصدارة من هذا المشروع اسمها v1.0.1:
$ git shortlog --no-merges master --not v1.0.1
Chris Wanstrath (6):
Add support for annotated tags to Grit::Tag
Add packed-refs annotated tag support.
Add Grit::Commit#to_patch
Update version and History.txt
Remove stray `puts`
Make ls_tree ignore nils
Tom Preston-Werner (4):
fix dates in history
dynamic version method
Version bump to 1.0.2
Regenerated gemspec for version 1.0.2
موجز واضح لكل الإيداعات منذ v1.0.1، ومجموعة بمؤلف الإيداع، حتى ترسلها إلى قائمتك البريدية.