# توقيع الالتزامات باستخدام GPG

يحتوي `git` على طبقة مصادقة للتحكم في من يمكنه دفع الالتزامات إلى المستودع، لكنه لا يصادق على مؤلفي الالتزامات الفعليين.

بعبارة أخرى، يمكنك الالتزام بالتغييرات باسم `Elon Musk <elon@tesla.com>`، ودفعها إلى مضيف `git` المفضل لديك (على سبيل المثال github.com)، وسيتم ربط التزامك بملف Elon الشخصي على GitHub. (جرّب ذلك! لكن لا تلُمنا إذا غضب Elon منك بسبب انتحال شخصيته.)

كانت الأسباب التي دفعتنا إلى تنفيذ التوقيع باستخدام GPG هي:
- لتوفير أمان أكثر دقة، لا سيما مع اعتماد المزيد من مستخدمي المؤسسات على Hub.
- لتوفير معايير أداء للتعلم الآلي مدعومة بمصدر آمن تشفيرياً.

راجع مقال ألي سيجالا [كيف (ولماذا) توقّع التزامات `git`](https://withblue.ink/2020/05/17/how-and-why-to-sign-git-commits.html) لمزيد من السياق.

يمكنك إثبات أنك مؤلف لالتزام (commit) باستخدام GNU Privacy Guard (GPG) وخادم مفاتيح. GPG هو أداة تشفير تُستخدم للتحقق من أصالة مصدر رسالة. سنشرح أدناه كيفية إعداد ذلك على Hugging Face.

كتاب Pro Git هو، كما هو معتاد، مورد جيد حول توقيع الالتزامات: [Pro Git: توقيع أعمالك](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work).

## إعداد التحقق من التوقيعات

ستحتاج إلى تثبيت [GPG](https://gnupg.org/) على نظامك لتنفيذ الأوامر التالية.
> مضمّن افتراضيًا في معظم توزيعات لينكس. أما على ويندوز، فهو مضمّن في Git Bash (الذي يأتي مع `git` لنظام ويندوز).

يمكنك توقيع التزامات محليًا باستخدام [GPG](https://gnupg.org/). ثم قم بإعداد ملفك الشخصي لوضع علامة **مُتحقَّق منها** على هذه الالتزامات في Hub، حتى يطمئن المستخدمون الآخرون إلى أنها مصدرها موثوق.

لشرح أعمق حول كيفية تفاعل git مع GPG، يرجى زيارة [توثيق git الخاص بهذا الموضوع](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work)

يمكن أن تكون لعمليات الالتزام (Commits) حالات توقيع كالتالي:

| الحالة            | شرح                                                  |
| ----------------- | ------------------------------------------------------------ |
| تم التحقق          | التزام موقّع والتوقيع مُتحقَّق منه           |
| غير موثّق        | التوقيع على الالتزام موجود لكن تعذّر التحقق من صحة التوقيع |
| لا يوجد حالة توقيع | التزام غير موقّع                                     |

لكي يُعلَّم التزام بأنه **مُتحقَّق منه**، يجب عليك رفع المفتاح العام المستخدم للتوقيع عليه في حسابك على Hugging Face.

استخدم الأمر `gpg --list-secret-keys` لعرض مفاتيح GPG التي تمتلك لكل منها مفتاحًا عامًا ومفتاحًا خاصًا. يُعد المفتاح الخاص مطلوبًا لتوقيع الالتزامات أو الوسوم.

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

وإلا، انتقل مباشرة إلى [إضافة مفتاح GPG إلى حسابك](#adding-a-gpg-key-to-your-account).

## إنشاء مفتاح GPG جديد

لإنشاء مفتاح GPG، قم بتشغيل ما يلي:

```bash
gpg --gen-key
```

ثمّ سيوجّهك GPG خلال عملية إنشاء زوج مفاتيح GPG.

تأكد من تحديد عنوان بريد إلكتروني لهذا المفتاح، وأن يكون عنوان البريد الإلكتروني مطابقًا لذلك الذي حددته في حسابك على Hugging Face [الحساب](https://huggingface.co/settings/account).

## إضافة مفتاح GPG إلى حسابك

1. أولاً، اختر مفتاح GPG أو أنشئ واحداً على جهازك. تأكد من أن عنوان البريد الإلكتروني للمفتاح يطابق ذلك الموجود في حسابك على Hugging Face [الحساب](https://huggingface.co/settings/account) وأن بريد حسابك مُتحقق منه.

2. تصدير الجزء العام من المفتاح المحدد:

```bash
gpg --armor --export <YOUR KEY ID>
```

3. ثم انتقل إلى [صفحة الإعدادات](https://huggingface.co/settings/keys) في ملفك الشخصي وانقر على **إضافة مفتاح GPG**.

انسخ ولصق ناتج الأمر `gpg --export` في حقل النص ثم انقر على **Add Key**.

4. تهانينا! 🎉 لقد أضفت للتو مفتاح GPG إلى حسابك!

## اضبط git لتوقيع التزاماتك باستخدام GPG

الخطوة الأخيرة هي تكوين git لتوقيع التزاماتك:

```bash
git config user.signingkey <Your GPG Key ID>
git config user.email <Your email on hf.co>
```

ثم أضف علم `-S` إلى أوامر `git commit` الخاصة بك لتوقيع التزاماتك!

```bash
git commit -S -m "My first signed commit"
```

بمجرد الدفع إلى Hub، يجب أن ترى الالتزام مع شارة "مُتحقَّق منه".

> [!TIP]
> لتوقيع جميع الالتزامات افتراضيًا في أي مستودع محلي على جهازك، يمكنك تنفيذ الأمر git config --global commit.gpgsign true.

