برای من مخزنهای خصوصی GitHubم محل امن تک تک کدهای کثفم بود ولی بعد از اون داستان تحریم شدن ایرانیها توسط GitHub و قطع دسترسی به مخازن خصوصی اجبارا کوچ کردم به GitLab. مدتی پیش تصمیم گرفتم GitHubم رو به عنوان یک شبهه رزومه در بیارم و کدهای نسبتا قابل قبولم رو اونجا به نمایش جهانیان بذارم و GitLab همون دخمهی کثیف پر از تیکه کدهام بمونه. جایی که شیطان میان اون کدها زندگی میکنه.
اما ذات آوردن چندتا کد خوب به GitHub برای نشون دادن «چقدر خوبیم ما» به کارفرمایان احتمالی کافی نیست. طبق چیزهایی که اینور اونور خوندم داشتن یک نظم کد نویسی و نشون دادنش از طریق آمار GitHub تاثیر بسیار خوبی روی دیگران میذاره. که طبیعیه، کسی که یک روز در ماه کد میزنه کجا کسی که هر روز هفته کد Push میکنه کجا.
با این توصیفات دنبال راهی بودم که این آمار فعالیت رو بشه از GitLab برداشت آورد توی GitHub نشون داد، یکم گوگل بازی کافی بود تا به یک ابزار پایتون برای این کار برسم. ادامهی این نوشته این ابزار رو معرفی میکنم و نحوهی کار باهاش رو شرح میدم، در ادامهی این نوشته با من همراه باشید.
کاری که قراره انجام بدیم نسبتا سادهست، یک مخزن خالی در GitHub درست میکنیم که وظیفهی اون فقط و فقط نگه داشتن تاریخچهی Commitهای ماست. بعد با استفاده از ماژول پایتون Contributions Importer for GitHub چندخط کد مینویسیم تا تاریخچهی Commitها رو از سایر repoها جمع کنه و در این مخزنی که ساختیم وارد کنه.
مراحل کار:
ابتدا در GitHub یک مخزن خالی به اسم MockRepo درست کنید.
یک پوشه خالی به اسم contributions_importer هم یک گوشهی سیستمون درست کنید.
با دستور git clone
مخزن Contributions Importer for GitHub رو کپی می کنیم داخل پوشهی contributions_importer
git clone https://github.com/miromannino/Contributions-Importer-For-Github.git
همچنین اون مخزن خالیای که ساخته بودیم رو هم با دستور git clone
کپی میکنیم توی همین پوشه.
با ادیتور دلخواهمون یک فایل به اسم mock_importer.py ایجاد میکنیم و دستورات زیر رو درون اون کپی میکنیم.
import git from git_contributions_importer import * # Your Gitlab private repo repo = git.Repo("path/to/your/private/repo") # Your mock repo mock_repo = git.Repo("path/to/your/mock/repo") importer = Importer([repo], mock_repo) # Set Author importer.set_author('[email protected]') importer.import_repository()
دقت داشته باشید که جای path/to/your/private/repo باید آدرس پوشهی پروژهای که میخوایم Commitهای اون رو کپی کنیم وارد کنیم.
جای path/to/your/mock/repo آدرس پوشهی مخزن MockRepo رو باید بنویسیم.
و به جای [email protected] آدرس ایمیل خودمون رو.
برای اینکه دستورات بالا رو بتونیم اجرا کنیم نیاز داریم کتابخونههای gitpython و pathlib رو نصب داشته باشیم.
pip3 install gitpython pathlib
کد بالا رو اجرا میکنیم
python3 mock_importer.py
اگر همهچیز خوب پیش رفته باشه به ازای هر یک از commitهای مخزن اصلی یک چنین پیامی رو خواهیم دید:
در نهایت کافیه وارد پوشهی MockRepo بشیم و با دستور git push -u origin master
این commitهایی که استخراج کردیم رو بفرستیم به GitHubمون.
منابع:
https://github.com/miromannino/Contributions-Importer-For-Github
https://medium.com/@razan.joc/how-i-restored-my-git-contributions-7ddb27f06d4e
نویسنده: محمد حسین سالاری