انتقل إلى المحتوى

الـ 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 إلى ليڤانت غيت

  1. اضغط + في أعلى الصفحة ثم New Migration، واختر GitHub.
  2. الصق رابط الـ repository. إن كان خاصًا فأدخل access token من GitHub.
  3. ضع علامة على This repository will be a mirror.

  4. اختر الـ owner والاسم والـ visibility، ثم اضغط Migrate Repository.

يتزامن الـ repository بعدها تلقائيًا كل بضع ساعات، وتغيّر الفترة أو تطلب مزامنة فورية من SettingsRepositoryMirror SettingsSynchronize 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 في ليڤانت غيت

  1. افتح الـ repository على ليڤانت غيت ثم SettingsRepository، وانزل إلى قسم Mirror Settings.

  2. في Git Remote Repository URL اكتب: https://github.com/<user>/<repo>.git

  3. افتح Authorization واكتب اسم مستخدمك في GitHub في Username، والـ token في Password.
  4. اختياري: ضع علامة على Sync when new commits are pushed ليصل كل push إلى GitHub فورًا. تستطيع أيضًا تعطيل المزامنة الدورية إن اكتفيت بهذا.
  5. اضغط 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 وحده كنسخة احتياطية لها.

ماذا بعد؟


هذه الصفحة مبنية على وثائق Gitea (رخصة MIT) بعد ترجمتها وتبسيطها.