کامیت‌های مخزن گیت خود را امضا کنید.

مقدمه

گیت یک برنامه مدیریت نسخه‌های پروژه است که اعضا تیم با ثبت کردن تغییرات خود در یک مخزن تاریخچه‌ای از نسخه‌های متفاوت پروژه را ثبت می‌کنند. در این نوشتار فرض شده است که خواننده با گیت و چگونگی کار با آن آشنایی کافی را دارد و فقط به این مطلب اشاره می‌شود که چگونه تغییرات اعمالی خود را با امضای دیجیتال خود تایید کنیم تا تمام اعضای تیم مطمئن شوند که تغییرات اعمال شده واقعا از سمت ما اعمال شده است.

چرا کامیت‌های خود را امضا کنیم

اگر توجه کرده باشید در هنگام مشاهده کامیت‌های صورت گرفته در یک مخزن نام و ایمیل شخصی که آن کامیت‌ها را ثبت کرده است هم نمایش داده می‌شود. این نام و آدرس ایمیل با توجه به تنظیماتی که در برنامه گیت انجام داده‌اید ذخیره می‌شود و هر شخصی می‌تواند با هر نام و آدرس ایمیل اقدام به ذخیره یک کامیت کند. این موضوع نشان می‌دهد که نمی‌توان به اسمی که در تاریخچه گیت نمایش داده می‌شود اعتماد کرد. برای اینکه مطمئن شویم هر کامیت را چه شخصی انجام داده است، این امکان در برنامه گیت فراهم شده است که تغییرات اعمالی توسط هر شخص با امضای دیجیتال آن شخص علامت گذاری شود. در این صورت مطمئن هستیم که تغییرات حتما از سمت شخص نام برده شده، اعمال شده است.

اگر از گیت‌هاب استفاده می‌کنید در صورت امضا کردن کامیت‌ها و تعریف کردن امضای خود به گیت‌هاب، در تاریخچه کامیت‌ها کنار هر کامیت عبارت verified نوشته می‌شود.

عبارت verified در کنار شناسه کامیت‌ها در گیت‌هاب
عبارت verified در کنار شناسه کامیت‌ها در گیت‌هاب


چگونه گیت را تنظیم کنیم

ابتدا باید یک امضا الکترونیک برای خود ایجاد کنیم. برای این کار از برنامه gpg استفاده می‌کنیم. این برنامه به احتمال زیاد بر روی نسخه لینوکس‌تان وجود دارد. در صورت نیاز آن را نصب کنید و با دستور زیر یک کلید ایجاد کنید.

gpg --gen-key

با اجرای دستور بالا چند سوال از جمله نام شما را می‌پرسد و از شما می‌خواهد تا برای امضای خود یک کلمه عبور انتخاب کنید.

پس از ساخت کلید با اجرا دستور زیر اطلاعات کلید ساخته شده را مشاهده کنید.

gpg --list-keys --keyid-format LONG

خروجی قالبی مشابه به متن زیر خواهد داشت.

---------------------------------
pub   2048R/0A46826A 2014-06-04
uid                  Scott Chacon (Git signing key) <schacon@gmail.com>
sub   2048R/874529A9 2014-06-04

در خط اول، بخش بعد از « / » نشان دهنده id کلید شما است. از این id برای تنظیم کلیدی که در امضا کردن کامیت‌ها بکار می‌رود، استفاده می‌شود.

در ادامه برنامه گیت را باید تنظیم کنیم. با اجرای دستور زیر کلید مورد نظر خود برای امضا کردن را، به برنامه گیت معرفی می‌کنیم.

git config --global user.signingkey <your_key_id>

در بخش <your_key_id> باید مقداری که از بخش قبل بدست آوردید را قرار دهید. (در این مثال 0A46826A عبارت نشان دهنده key_id است)

پس از این تغییرات با استفاده از دستور زیر می‌توانیم کامیت‌های خود را امضا کنیم. (-S برای امضا کردن آمده است)

git commit -S -a -m &quotTest a signed commit&quot

برای این که در هر کامیت عبارت -S را تکرار نکنیم می‌توانیم تنظیم زیر را انجام دهیم.

git config --global commit.gpgsign true

تنظیم کردن گیت‌هاب برای نمایش عبارت verified

گیت‌هاب کامیت‌های امضا شده را با عبارت verified نشان می‌دهد. فقط کافی است امضا خود را به گیت‌هاب معرفی کنید. برای این منظور دستور زیر را اجرا کنید. (key_id از بخش‌های قبلی بدست آمده است.)

gpg --armor --export <your_key_id>

خروجی این دستور با عبارت -----BEGIN PGP PUBLIC KEY BLOCK----- شروع می‌شود و با عبارت -----END PGP PUBLIC KEY BLOCK----- پایان می‌یابد. (محتوای کلید عمومی شما را نشان می‌دهد که به دیگران این امکان را می‌دهد که امضای شما را شناسایی کنند و متوجه شوند که این امضا حقیقتا به شما تعلق دارد.)

متن خروجی دستور بالا را (به همراه دو عبارت ‌که نشان دهنده شروع و پایان است) کپی کنید و در بخش تنظیمات حساب کاربری خود در سایت گیت‌هاب به بخش SSH and GPG keys مراجعه کنید و دکمه new GPG key را انتخاب کنید. متنی را که کپی کرده‌اید در بخش مورد نظر وارد کنید و دکمه اضافه کردن را فشار دهید. تنظیمات مربوط به گیت‌هاب در همین جا به پایان می‌رسد.

منابع

مطالب این نوشتار از مطالعه کردن سایت‌های زیر بدست آمده است. درصورت نیاز به مطالعه بیشتر به آن‌ها مراجعه کنید و یا سوال خود را در بخش نظرات مطرح کنید تا با هم آن را بررسی کنیم.

  1. https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work
  2. https://help.github.com/en/github/authenticating-to-github/generating-a-new-gpg-key
  3. https://help.github.com/en/github/authenticating-to-github/signing-commits
  4. https://gist.github.com/mort3za/ad545d47dd2b54970c102fe39912f305