آموزش انتقال ریپازیتوری از GitHub به Gitea

آموزش انتقال Repository از GitHub به Gitea

اگر تصمیم گرفته‌اید ریپازیتوریهای خود را از GitHub به یک سرور Gitea منتقل کنید، لازم نیست این کار را پیچیده کنید. برای بیشتر پروژه‌ها، Gitea یک ابزار داخلی برای Migration دارد که می‌تواند Repository را از GitHub دریافت کرده و در کنار کد و تاریخچه Git، اطلاعاتی مانند Issue، Pull Request، Label، Milestone، Release و Wiki را هم در صورت پشتیبانی و انتخاب گزینه مربوطه منتقل کند.

در این مطلب، به جای بررسی تمام جزئیات مهاجرت، مستقیم سراغ مراحل عملی می‌رویم.

قبل از شروع مهاجرت چه چیزی لازم داریم؟

قبل از شروع، این موارد را آماده کنید:

  • آدرس Repository در GitHub
  • حساب کاربری در Gitea
  • دسترسی لازم به ریپازیتوری مبدا
  • در صورت خصوصی بودن Repository، اطلاعات احراز هویت موردنیاز
  • مشخص بودن نام Repository و Owner در Gitea

اگر Repository خصوصی است، برای دسترسی برنامه‌ای به GitHub معمولا از Personal Access Token استفاده می‌شود. GitHub برای مواردی که امکان استفاده از آن وجود دارد، استفاده از Fine-grained Personal Access Token با دسترسی محدود به Repositoryهای موردنظر را توصیه می‌کند.

همچنین بهتر است قبل از Migration، مطمئن شوید Repository مهمی که قرار است منتقل شود Backup یا Clone دیگری دارد.

مرحله اول، آدرس Repository را از GitHub بردارید

ابتدا وارد Repository موردنظر در GitHub شوید.

برای مثال، فرض کنیم Repository شما این آدرس را دارد:

https://github.com/example/my-project

در صورتی که Repository خصوصی باشد، باید مطمئن شوید حسابی که برای Migration استفاده می‌کنید به آن دسترسی دارد.

اگر پروژه از Git LFS استفاده می‌کند، این مورد را هم از قبل مشخص کنید، چون انتقال فایل‌های LFS باید در Migration در نظر گرفته شود. Gitea در قابلیت Migration خود گزینه مربوط به LFS را نیز دارد.

مرحله دوم، در Gitea گزینه New Migration را باز کنید

وارد پنل Gitea شوید.

از منوی ایجاد Repository، گزینه New Migration را انتخاب کنید

در صفحه Migration، سرویس مبدا را انتخاب کنید.

برای انتقال از گیت‌هاب، گزینه GitHub را انتخاب نمائید.

Gitea برای انتقال Repository از GitHub یک فرم Migration داخلی دارد و نیازی نیست برای یک مهاجرت معمولی ابتدا Repository خالی در مقصد ایجاد کنید.

مرحله سوم، اطلاعات Repository را وارد کنید

در فرم Migration، آدرس Repository مبدا را وارد کنید.

برای مثال:

https://github.com/example/my-project

سپس Owner یا کاربری که Repository جدید باید متعلق به آن باشد را مشخص کنید.

برای مثال:

Owner: development
Repository Name: my-project

اگر Repository خصوصی است، اطلاعات Authentication موردنیاز را وارد کنید.

نکته مهم این است که اطلاعات دسترسی را فقط در محل موردنیاز وارد کنید و Token را در فایل، Repository یا متن‌های عمومی قرار ندهید.

مرحله چهارم، مشخص کنید چه اطلاعاتی منتقل شود

این بخش یکی از مهم‌ترین قسمت‌های Migration است.

اگر فقط کد پروژه برای شما مهم است، انتقال Git Repository کافی خواهد بود.

اما اگر Repository یک پروژه فعال است، بهتر است گزینه‌های مرتبط با اطلاعات پروژه را هم بررسی کنید.

بسته به نسخه Gitea و نوع Migration، مواردی مانند موارد زیر قابل انتقال هستند:

  • Issues
  • Pull Requests
  • Labels
  • Milestones
  • Releases
  • Wiki
  • Git LFS

مستندات فعلی Gitea نیز این موارد را در گزینه‌های Migration پشتیبانی می‌کنند.

بنابراین برای یک پروژه واقعی، فقط به انتقال فایل‌های Source Code اکتفا نکنید.

مرحله پنجم، Migration را شروع کنید

بعد از تکمیل اطلاعات، تنظیمات را یکبار بررسی کنید.

مطمئن شوید که Repository درست انتخاب شده است
Owner مقصد درست است
نام Repository صحیح است
اطلاعات Authentication درست است
گزینه‌های موردنیاز مانند Issues و Pull Requests فعال هستند

سپس گزینه Migrate Repository را انتخاب کنید.

Gitea شروع به دریافت اطلاعات از GitHub و ایجاد Repository جدید می‌کند.

مدت زمان این مرحله به حجم Repository و تعداد اطلاعات جانبی آن بستگی دارد.

مرحله ششم، Repository جدید را بررسی کنید

هنوز کار تمام نشده است

وارد Repository جدید در Gitea شوید و چند مورد مهم را بررسی کنید.

بررسی فایل‌ها

ابتدا مطمئن شوید فایل‌های پروژه در Gitea وجود دارند.

بررسی Commitها

تاریخچه Commitها را بررسی کنید و ببینید آخرین Commit موردنظر منتقل شده است.

بررسی Branchها

Branchهای اصلی پروژه را بررسی کنید.

بررسی Tagها و Releaseها

اگر پروژه Release دارد، فقط وجود Tag را بررسی نکنید. Releaseها و فایل‌های ضمیمه آنها را نیز بررسی کنید.

بررسی Issues و Pull Requests

اگر این گزینه‌ها را هنگام Migration فعال کرده‌اید، چند Issue و Pull Request قدیمی را باز کنید و انتقال آنها را بررسی کنید.

این مرحله به ویژه برای پروژه‌های قدیمی و تیمی اهمیت دارد.

اگر فقط کد و تاریخچه Git را می‌خواهیم چه کنیم؟

اگر برای شما Issue، Pull Request و سایر اطلاعات GitHub اهمیتی ندارد و فقط می‌خواهید Git Repository را به Gitea منتقل کنید، می‌توانید از Git استفاده کنید.

این روش سریع و کاربردی است.

ابتدا Repository را به صورت Mirror دریافت کنید:

git clone --mirror https://github.com/example/my-project.git

وارد Repository شوید:

cd my-project.git

سپس Remote مربوط به Gitea را اضافه کنید:

git remote add gitea https://gitea.example.com/example/my-project.git

در نهایت:

git push --mirror gitea

گزینه mirror– باعث می‌شود Referenceهای Repository مانند Branchها و Tagها هم منتقل شوند. روش Mirror برای انتقال کامل Git Data یک Repository کاربرد دارد.

تفاوت مهم این روش با Migration داخلی Gitea این است که git push –mirror اطلاعاتی مانند Issue و Pull Request را منتقل نمی‌کند.

بنابراین اگر فقط می‌خواهید کد، Commitها، Branchها و Tagهای Repository را منتقل کنید، می‌توانید از روش git clone –mirror و سپس git push –mirror استفاده کنید. اما اگر علاوه بر Git Data، اطلاعاتی مانند Issue، Pull Request، Label، Milestone، Release و Wiki را هم می‌خواهید منتقل کنید، بهتر است از قابلیت Migration داخلی Gitea استفاده کنید.

بعد از مهاجرت، Remote پروژه را تغییر دهید

اگر پروژه را قبلا روی کامپیوتر خود Clone کرده‌اید، بعد از انتقال باید Remote را از GitHub به Gitea تغییر دهید.

ابتدا Remote فعلی را ببینید:

git remote -v

احتمالا چیزی شبیه این خواهید دید:

origin https://github.com/example/my-project.git
origin https://github.com/example/my-project.git

حالا آدرس Remote را تغییر دهید:

git remote set-url origin https://gitea.example.com/example/my-project.git

دوباره بررسی کنید:

git remote -v

باید آدرس Gitea نمایش داده شود.

حالا می‌توانید Push را آزمایش کنید:

git push

اگر Push بدون خطا انجام شد، Repository محلی شما با Gitea کار می‌کند.

استفاده از SSH برای Remote

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

برای مثال:

git remote set-url origin git@gitea.example.com:example/my-project.git

سپس:

git remote -v

و برای آزمایش:

git push

برای استفاده روزمره، SSH می‌تواند باعث شود نیازی به وارد کردن مداوم اطلاعات احراز هویت نداشته باشید.

اگر هنوز می‌خواهیم GitHub را نگه داریم چه کنیم؟

لازم نیست بلافاصله Repository GitHub را حذف کنید.

اگر می‌خواهید مدتی GitHub و Gitea را همزمان داشته باشید، قابلیت Repository Mirroring در Gitea می‌تواند کاربردی باشد.

برای مثال، می‌توانید Repository را از GitHub به Gitea به صورت Pull Mirror همگام کنید.

در Gitea برای این کار ابتدا وارد بخش New Migration شوید، سرویس مبدا را انتخاب کنید، آدرس Repository را وارد کنید و گزینه مربوط به Mirror را فعال کنید. سپس با انتخاب Migrate Repository، Repository ایجاد می‌شود و Gitea می‌تواند آن را با Repository مبدا همگام نگه دارد.

Gitea  ریپازیتوری را به صورت دوره‌ای با منبع خارجی همگام می‌کند و امکان اجرای Sync دستی نیز وجود دارد. نکته مهم این است که Pull Mirror باید هنگام ایجاد Repository تنظیم شود و Repository موجود را بعداً نمی‌توان به Pull Mirror تبدیل کرد.

این روش برای زمانی مناسب است که هنوز نمی‌خواهید GitHub را کنار بگذارید.

انتقال از Gitea به GitHub به صورت Mirror

سناریوی برعکس هم امکان‌پذیر است.

اگر Gitea را Repository اصلی قرار داده‌اید اما می‌خواهید یک نسخه از Repository در GitHub نیز داشته باشید، Gitea از Push Mirror پشتیبانی می‌کند.

در Gitea وارد Repository موردنظر شوید و از بخش Settings به قسمت Repository بروید. سپس Mirror Settings را باز کنید و آدرس Remote مقصد در GitHub را وارد کنید تا Gitea بتواند تغییرات Repository را به GitHub منتقل و همگام‌سازی کند.

در این حالت Gitea می‌تواند تغییرات Repository را به GitHub ارسال کند.

فقط یک نکته مهم را فراموش نکنید، Push Mirror می‌تواند مقصد را با Force Push به‌روزرسانی کند و تغییرات موجود در مقصد را بازنویسی کند. بنابراین باید مشخص باشد که Gitea منبع اصلی است و GitHub فقط نقش Mirror دارد.

بعد از انتقال GitHub Actions را فراموش نکنید

یکی از مواردی که معمولا در Migration نادیده گرفته می‌شود، CI/CD است.

اگر پروژه شما در GitHub دارای فایل‌هایی مانند .github/workflows/ است، انتقال Repository به تنهایی به معنی انتقال کامل فرآیند CI/CD نیست. بعد از Migration باید Workflowهای CI/CD، Secrets، Environment Variables، Runnerها، Webhookها، Deploy Keyها، Package Registry و سرویس‌های خارجی متصل به GitHub را بررسی کنید. اگر قصد دارید GitHub را به طور کامل کنار بگذارید، لازم است تمام این وابستگی‌ها را شناسایی و در Gitea یا سرویس جایگزین تنظیم کنید.

در غیر این صورت ممکن است Repository شما در Gitea قرار داشته باشد اما Deployment همچنان به GitHub وابسته باشد.

یک چک لیست ساده برای پایان Migration

قبل از اینکه Repository قدیمی GitHub را کنار بگذارید، این موارد را بررسی کنید:

  • Repository در Gitea ایجاد شده است
  • Commitها منتقل شده‌اند
  • Branchها وجود دارند
  • Tagها منتقل شده‌اند
  • Releaseهای مهم بررسی شده‌اند
  • Issues منتقل شده‌اند
  • Pull Requests بررسی شده‌اند
  • Wiki در صورت نیاز منتقل شده است
  • Git LFS بررسی شده است
  • Remote کامپیوترهای توسعه‌دهندگان تغییر کرده است
  • CI/CD بررسی شده است
  • Webhookها بررسی شده‌اند
  • Deploy Keyها بررسی شده‌اند
  • لینک‌های قدیمی GitHub در مستندات اصلاح شده‌اند

بعد از این بررسی می‌توانید تصمیم بگیرید GitHub را به عنوان آرشیو نگه دارید، Mirror کنید یا وابستگی پروژه را به آن کاملاً حذف کنید.

جمع‌بندی

برای انتقال Repository از GitHub به Gitea، ساده‌ترین روش استفاده از قابلیت Migration داخلی Gitea است. کافی است وارد Gitea شوید، گزینه New Migration را انتخاب کنید، GitHub را به عنوان سرویس مبدا انتخاب کنید، آدرس Repository و اطلاعات دسترسی را وارد کرده و گزینه‌های موردنیاز مانند Issues و Pull Requests را مشخص کنید. اگر فقط قصد انتقال کد، Branchها، Tagها و تاریخچه Git را دارید، می‌توانید از روش git clone –mirror و git push –mirror استفاده کنید. بعد از انتقال نیز Remote پروژه‌ها را به Gitea تغییر دهید و وابستگی‌هایی مانند CI/CD، Webhook و Package Registry را بررسی کنید. اگر می‌خواهید GitHub را به طور کامل با Gitea جایگزین کنید، بهتر است ابتدا یک Repository آزمایشی را منتقل کنید و پس از اطمینان از صحت اطلاعات و عملکرد پروژه، Repositoryهای اصلی را منتقل کنید.

نوشتن نظر

نوشتن دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *