الـ mirror (إبقاء GitHub متزامنًا)¶
الـ mirror نسخة من repository تتزامن تلقائيًا مع نسخة أخرى. في ليڤانت غيت (LevantGit) نوعان: pull mirror يسحب التحديثات من GitHub إليك، و push mirror يدفع كل تحديث عندك إلى GitHub أو GitLab أو Bitbucket. الوصفة الأشهر أن تعمل يوميًا على ليڤانت غيت، ويبقى GitHub نسخة احتياطية تتحدّث وحدها.
متى تحتاج الـ mirror؟¶
- انتقلت إلى ليڤانت غيت لكن زملاء أو أدوات ما زالوا يستخدمون GitHub: اجعل GitHub يستقبل نسخة تلقائية من كل push.
- تريد نسخة للقراءة فقط من مشروع مفتوح المصدر على GitHub، تتحدّث وحدها دون أن تتدخّل.
- لديك مشاريع قديمة على خدمة أخرى لا تريد حذفها، لكن تريد نسخة حيّة عندك.
نوعان من الـ mirror¶
| pull mirror | push mirror | |
|---|---|---|
| الاتجاه | من GitHub إلى ليڤانت غيت | من ليڤانت غيت إلى GitHub أو أي مكان |
| أين يعمل؟ | الـ repository على ليڤانت غيت للقراءة فقط | الـ repository على ليڤانت غيت عادي، والنسخة البعيدة تُكتب عليها |
| متى يُنشأ؟ | عند الـ migration فقط | في أي وقت من إعدادات repository موجود |
| ما يُزامَن؟ | الـ branches والـ tags والـ commits | الـ branches والـ tags والـ commits |
الـ pull mirror: من GitHub إلى ليڤانت غيت¶
- اضغط + في أعلى الصفحة ثم New Migration، واختر GitHub.
- الصق رابط الـ repository. إن كان خاصًا فأدخل access token من GitHub.
-
ضع علامة على This repository will be a mirror.
-
اختر الـ owner والاسم والـ visibility، ثم اضغط Migrate Repository.
يتزامن الـ repository بعدها تلقائيًا كل بضع ساعات، وتغيّر الفترة أو تطلب مزامنة فورية من Settings ← Repository ← Mirror Settings ← Synchronize Now.
تنبيه
الـ pull mirror يُنشأ فقط مع repository جديد أثناء الـ migration. الـ repository الموجود لا يمكن تحويله إلى pull mirror لاحقًا. والـ mirror للقراءة فقط: لا تستطيع تنفيذ push إليه ولا فتح pull requests عليه. إن أردت التعديل فأنشئ له fork أو أوقف الـ mirror من الإعدادات ليصبح repository عاديًا.
الـ push mirror: من ليڤانت غيت إلى GitHub¶
هذه هي الوصفة الأشهر: تعمل يوميًا على ليڤانت غيت، ويبقى GitHub نسخة احتياطية محدّثة.
1. جهّز الطرف الآخر في GitHub¶
- أنشئ personal access token في GitHub بصلاحية
public_repoللـ repository العام، أوrepoللخاص. أضفworkflowإن كان الـ repository على GitHub يحتوي ملفات GitHub Actions، وإلا رُفض الـ push. - أنشئ repository فارغًا على GitHub بالاسم الذي تريد (GitHub لا ينشئ الـ repository بالـ push إليه). أو استخدم الـ repository القديم نفسه إن كان تاريخه مطابقًا لما عندك.
2. أضف الـ mirror في ليڤانت غيت¶
-
افتح الـ repository على ليڤانت غيت ثم Settings ← Repository، وانزل إلى قسم Mirror Settings.
-
في Git Remote Repository URL اكتب:
https://github.com/<user>/<repo>.git - افتح Authorization واكتب اسم مستخدمك في GitHub في Username، والـ token في Password.
- اختياري: ضع علامة على Sync when new commits are pushed ليصل كل push إلى GitHub فورًا. تستطيع أيضًا تعطيل المزامنة الدورية إن اكتفيت بهذا.
- اضغط Add Push Mirror.
يبدأ الـ push بعد لحظات. للـ push الفوري اضغط Synchronize Now، وإن فشلت المزامنة تظهر رسالة الخطأ في المكان نفسه.
خطر
الـ push mirror ينفّذ force push. أي تعديل في الـ repository البعيد غير موجود عندك سيُمحى. لا تعمل على النسختين معًا؛ اجعل ليڤانت غيت مصدر الحقيقة و GitHub نسخة فقط.
إلى GitLab أو Bitbucket¶
الطريقة نفسها مع اختلاف بيانات الدخول:
- GitLab: access token بصلاحية
write_repository، اسم المستخدمoauth2والـ token ككلمة مرور. - Bitbucket: كلمة مرور تطبيق (app password) بصلاحية Repository Write، اسم مستخدمك والكلمة.
الحدود¶
- لا push mirror عبر SSH. استخدم رابط HTTPS مع access token.
- الـ mirror ينقل Git فقط: الـ branches والـ tags والـ commits. الـ issues والـ pull requests والـ labels والـ releases لا تُزامَن؛ هذه تُنقل مرة واحدة بالـ migration العادية.
- الطرف المستقبِل للقراءة فقط عمليًا: الـ pull mirror على ليڤانت غيت لا يقبل الـ push، والـ repository المستقبِل للـ push mirror يُكتب عليه قسرًا.
- Git LFS: إن كان الـ repository عندك يستخدم ملفات كبيرة عبر Git LFS فتحقق بعد أول مزامنة من وصولها كاملة، ولا تعتمد على الـ mirror وحده كنسخة احتياطية لها.
ماذا بعد؟¶
- تغيير الـ remote محليًا — حتى ينفّذ جهازك push إلى ليڤانت غيت لا إلى GitHub.
- نقل repository من GitHub — الـ migration الكاملة بالـ issues والـ pull requests.
- Webhooks — لربط الـ repository بخدمات خارجية.
هذه الصفحة مبنية على وثائق Gitea (رخصة MIT) بعد ترجمتها وتبسيطها.