إعداد git: git config والاسم والبريد ومفاتيح SSH
إعداد git الأساسي يتم بالأمرين git config --global user.name وgit config --global user.email لتوقيع الـ commits، مع اختيار المحرر والفرع الافتراضي. وللدخول إلى GitHub دون كلمة مرور أنشئ مفتاح SSH بالأمر ssh-keygen -t ed25519، وأضف المفتاح العام إلى إعدادات الحساب، ثم تحقق من الاتصال بـ ssh -T git@github.com.
إعداد git الأدنى في دقيقة واحدة
بعد التثبيت مباشرة نفّذ أربعة أوامر. الأمران الأولان ضروريان، فبدونهما يرفض Git إنشاء commit، والباقي يوفر عليك إزعاجات شائعة.
git config --global user.name "Ahmad Ali"
git config --global user.email "anna@example.com"
git config --global init.defaultBranch main
git config --global core.editor "code --wait"
تحقق من النتيجة:
$ git config --global --list
user.name=Ahmad Ali
user.email=anna@example.com
init.defaultbranch=main
core.editor=code --wait
فيما يلي توضيح ما تفعله كل إعدادة، وأين يحفظها Git، وكيف تربط الدخول إلى GitHub عبر SSH.
كيف يعمل git config: ثلاثة مستويات للإعدادات
يقرأ الأمر git config الإعدادات ويكتبها في أحد ثلاثة ملفات. والمستوى الأضيق يتجاوز المستوى الأوسع.
| المستوى | الخيار | الملف | يسري على |
|---|---|---|---|
| على مستوى النظام | --system | /etc/gitconfig (في Windows داخل مجلد تثبيت Git) | كل مستخدمي الجهاز |
| على مستوى المستخدم | --global | ~/.gitconfig أو ~/.config/git/config | كل مستودعاتك |
| على مستوى المستودع | --local (افتراضياً) | .git/config داخل المستودع | هذا المستودع فقط |
معظم الإعدادات الشخصية تُضبط بشكل عام، والاستثناءات تُضبط محلياً. مثلاً: البريد الخاص بعمل الشركة تضبطه داخل مستودع المشروع دون خيار --global.
أوامر git config المفيدة
git config user.email # عرض القيمة الحالية
git config --list --show-origin # كل الإعدادات والملف الذي جاءت منه كل واحدة
git config --global --edit # فتح ~/.gitconfig في المحرر
git config --global --unset core.editor # حذف إعداد
الخيار --show-origin أفضل مساعد عند تصحيح الأخطاء: يوضح لماذا البريد «خاطئ» بالإشارة إلى الملف الذي جاءت منه القيمة.
الاسم والبريد: لماذا ليسا شكلياً
كل commit يحفظ إلى الأبد اسم المؤلف وبريده. وهذه ليست تسجيل دخول ولا كلمة مرور، ولا يتحقق Git منها. لكن GitHub وGitLab يربطان الـ commits بحسابك عبر البريد: إذا لم يطابق البريد أياً من عناوين الحساب المؤكدة، فلن تُحتسب الـ commits في مخطط النشاط، وستظهر دون صورة شخصية.
ولا يمكن تغيير الاسم أو البريد بأثر رجعي دون إعادة كتابة التاريخ، لذلك تحقق من الإعدادات قبل أول commit.
إخفاء بريدك الحقيقي
إذا كان المستودع عاماً فسيرى بريدك أي شخص يطلع على التاريخ. يقدم GitHub عنوان خدمة بالشكل ID+username@users.noreply.github.com (في إعدادات Emails). ضعه في Git:
git config --global user.email "12345678+anna@users.noreply.github.com"
بريد مختلف للعمل والمشاريع الشخصية
حتى لا تضبط كل مستودع عمل يدوياً، استخدم تضمين الإعدادات الشرطي. في ~/.gitconfig:
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
وفي ~/.gitconfig-work:
[user]
email = anna@company.com
الآن تستخدم كل المستودعات داخل ~/work/ بريد العمل تلقائياً. والشرطة المائلة في نهاية المسار إلزامية.
إعدادات أخرى مفيدة في Git
المحرر
يفتح Git محرراً لرسائل الـ commits، وللـ rebase التفاعلي، وللدمج. وغالباً يكون الافتراضي Vim. والخيارات:
git config --global core.editor "code --wait" # VS Code
git config --global core.editor "nano" # Nano
git config --global core.editor "subl -n -w" # Sublime Text
الفرع الافتراضي
init.defaultBranch main يحدد اسم الفرع الأول في المستودعات الجديدة (متاح منذ Git 2.28). وبدونه ينشئ Git فرعاً باسم master ويعرض تنبيهاً بتغيير الاسم.
نهايات الأسطر
git config --global core.autocrlf true # Windows
git config --global core.autocrlf input # macOS وLinux
بهذا يُحفظ في المستودع دائماً تحويل الأسطر LF، فلا تظهر في الفريق «تعديلات» على كل أسطر الملف.
سلوك git pull
إذا لم تحدد استراتيجية، فإن Git الحديث يطلب منك اختيارها عند تفرّع الفروع. اختر واحدة:
git config --global pull.rebase false # دمج (merge)، وهو الافتراضي
git config --global pull.rebase true # إعادة الأساس (rebase)، تاريخ خطي
git config --global pull.ff only # التقديم السريع فقط، وإلا خطأ
الأسماء الكبيرة في الملفات والألوان
git config --global core.quotepath false
git config --global color.ui auto
الأسماء المستعارة
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.lg "log --oneline --graph --decorate --all"
git config --global alias.last "log -1 HEAD"
الآن يرسم git lg مخطط الفروع، ويعرض git last آخر commit.
شكل ملف ~/.gitconfig بعد الإعداد
[user]
name = Ahmad Ali
email = anna@example.com
[init]
defaultBranch = main
[core]
editor = code --wait
autocrlf = input
quotepath = false
[pull]
rebase = false
[alias]
st = status
lg = log --oneline --graph --decorate --all
هذا ملف نصي عادي، يمكنك تحريره يدوياً ونقله بين أجهزتك.
تسجيل الدخول إلى git: كيف تدخل إلى GitHub
لا يوجد في Git أمر git login، وهذه من أشهر المصائد عند المبتدئين. فـ Git لا يحفظ «حساباً»: تتم المصادقة عند الاتصال بالخادم (clone أو push أو fetch) عبر أحد بروتوكولين.
| HTTPS | SSH | |
|---|---|---|
| العنوان | https://github.com/user/repo.git | git@github.com:user/repo.git |
| ما الذي يؤكد الدخول | رمز وصول (token) أو تسجيل الدخول عبر المتصفح (Credential Manager) | زوج مفاتيح SSH |
| كلمة مرور الحساب | غير مقبولة منذ 2021 | غير مطلوبة |
| متى يكون أنسب | Windows مع Git Credential Manager، والبروكسي المؤسسي | macOS وLinux والخوادم وCI |
الدخول عبر HTTPS
في Git for Windows وفي إصدارات macOS مع Git Credential Manager، سيُفتح عند أول git push نافذة المتصفح لتسجيل الدخول إلى GitHub، وتُحفظ البيانات في مخزن النظام. والبديل الرسمي هو أداة GitHub CLI: الأمر gh auth login يرشدك خلال المصادقة ويضبط Git. وإن كنت تعمل يدوياً فأنشئ Personal access token من إعدادات GitHub (Developer settings) وأدخله بدلاً من كلمة المرور.
SSH لـ Git: إعداد خطوة بخطوة
مفتاح SSH زوج من الملفات: المفتاح الخاص يبقى عندك، والمفتاح العام تعطيه لـ GitHub. ويتحقق الخادم من أنك تملك الجزء الخاص، ولا يُطلب منك كلمة المرور بعد ذلك أبداً.
الخطوة 1. تحقق من وجود مفتاح
ls -la ~/.ssh
إذا وجدت id_ed25519 وid_ed25519.pub فانتقل إلى الخطوة 3.
الخطوة 2. أنشئ المفتاح
ssh-keygen -t ed25519 -C "anna@example.com"
اضغط Enter لحفظ المفتاح في المسار الافتراضي، واختر عبارة مرور تحميه إذا سُرق الحاسوب. وed25519 خوارزمية حديثة وموصى بها. وإذا كان النظام القديم لا يدعمها فاستخدم ssh-keygen -t rsa -b 4096 -C "anna@example.com".
الخطوة 3. أضف المفتاح إلى ssh-agent
يحتفظ الوكيل بالمفتاح المفكوك في الذاكرة، فلا تكتب عبارة المرور عند كل push.
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
على macOS أضف إلى ~/.ssh/config هذه الأسطر، لكي تُحفظ العبارة في سلسلة المفاتيح (Keychain):
Host github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
ثم نفّذ ssh-add --apple-use-keychain ~/.ssh/id_ed25519.
الخطوة 4. أضف المفتاح العام إلى GitHub
cat ~/.ssh/id_ed25519.pub
انسخ السطر كاملاً بدءاً من ssh-ed25519. في GitHub افتح Settings ← SSH and GPG keys ← New SSH key، والصق المفتاح وأعطه اسماً واضحاً مثل «حاسوب محمول 2026». لا ترسل أبداً الملف الذي لا ينتهي بـ .pub، فهو المفتاح الخاص.
الخطوة 5. تحقق من الاتصال
$ ssh -T git@github.com
Hi anna! You've successfully authenticated, but GitHub does not provide shell access.
عند أول اتصال سيسألك SSH إن كنت تثق بالخادم، فقارن البصمة (fingerprint) مع البصمات المنشورة في وثائق GitHub، ثم أجب بـ yes.
الخطوة 6. حوّل المستودع إلى SSH
إذا استُنسخ المستودع عبر HTTPS فغيّر عنوان remote:
git remote -v
git remote set-url origin git@github.com:anna/my-project.git
git push
عدة حسابات GitHub على جهاز واحد
يمكن ربط مفتاح SSH واحد بحساب GitHub واحد فقط. للحساب الشخصي والعملي أنشئ مفتاحين واسمين مستعارين للمضيف في ~/.ssh/config:
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
استنسخ مستودعات العمل عبر الاسم المستعار: git clone git@github-work:company/app.git. ومع includeIf للبريد تحصل على بيئتين منفصلتين تماماً: للعمل وللشخصي.
أخطاء شائعة أثناء الإعداد
«Please tell me who you are»
لم تُضبط user.name وuser.email. نفّذ الأوامر من بداية المقال ثم أعد الـ commit.
«Permission denied (publickey)»
لم يجد GitHub مفتاحاً مناسباً. تحقق من إضافة المفتاح إلى الوكيل (ssh-add -l)، ومن إضافة الجزء العام إلى الحساب، وستظهر التفاصيل عبر ssh -vT git@github.com.
«Support for password authentication was removed»
أدخلت كلمة مرور الحساب عند العمل عبر HTTPS. استخدم رمز وصول، أو الدخول عبر Credential Manager، أو انتقل إلى SSH.
commits على GitHub بلا صورة شخصية
البريد في git config user.email غير مضاف إلى ملف GitHub الشخصي. أضفه في Settings ← Emails، فتُربط الـ commits القديمة تلقائياً.
المنفذ 22 مغلق في الشبكة
يقبل GitHub اتصال SSH أيضاً على المنفذ 443. في ~/.ssh/config اكتب Host github.com وHostname ssh.github.com وPort 443.
ترتيب الإعداد على جهاز جديد
- ثبّت Git وتحقق بـ
git --version. - اضبط
user.nameوuser.emailوinit.defaultBranchوالمحرر. - انقل
~/.gitconfigأو أنشئه مع الأسماء المستعارة واستراتيجية pull. - أنشئ مفتاح SSH جديداً (لا تنسخ المفتاح الخاص القديم بين الأجهزة إلا عند الحاجة) وأضفه إلى GitHub.
- تحقق من الوصول بالأمر
ssh -T git@github.com، ثم استنسخ مستودع العمل بعنوان SSH.
وللمفتاح المنفصل لكل جهاز ميزة إضافية: عند فقدان الحاسوب يكفي حذف مفتاح واحد من GitHub، دون التأثير في الوصول من بقية الأجهزة.
الخلاصة
إعداد Git يتلخص في ثلاث خطوات: ضبط الاسم والبريد عبر git config --global، واختيار المحرر والفرع الافتراضي واستراتيجية pull، ثم ربط الدخول إلى GitHub، والأسهل والأكثر أماناً هو مفتاح SSH. وتذكّر أنه لا يوجد أمر git login: المصادقة تتم عند الاتصال بالخادم. وتُشرح الإعدادات ووصول SSH عملياً في دورة Git.
الأسئلة الشائعة
أين تُحفظ إعدادات Git في Windows؟
الإعدادات العامة في الملف C:\Users\الاسم\.gitconfig، والمحلية في .git\config داخل كل مستودع. ولمعرفة المكان الدقيق استخدم git config --list --show-origin.
كيف أعيد ضبط إعدادات Git؟
احذف ملف ~/.gitconfig أو غيّر اسمه، فيعود Git إلى القيم الافتراضية. ولحذف إعداد واحد استخدم git config --global --unset الاسم.
هل يمكن استخدام مفتاح SSH واحد لـ GitHub وGitLab؟
نعم، يمكن إضافة المفتاح العام نفسه إلى الخدمتين. القيد الوحيد: على GitHub يرتبط المفتاح بحساب واحد.
كيف أوقّع الـ commits لتظهر علامة Verified على GitHub؟
اضبط التوقيع بمفتاح GPG أو SSH: مثلاً git config --global gpg.format ssh، وuser.signingkey مع مسار المفتاح العام، وcommit.gpgsign true، ثم أضف المفتاح إلى GitHub كـ Signing key.
هل يلزم إعادة ضبط Git بعد التحديث؟
لا، التحديث لا يمس ملف ~/.gitconfig ولا المفاتيح في ~/.ssh، فكل الإعدادات تبقى كما هي.
يُشرح هذا الموضوع بالتفصيل مع التطبيق العملي في دورة «Git من الصفر إلى مطور واثق».
الانتقال إلى الدورة