راستش اول کار ننشستم یک سند چندصدصفحه‌ای بنویسم و بگویم می‌خواهم رقیب GitHub بسازم. ماجرا خیلی معمولی‌تر بود. چند پروژه داشتم که هرکدام یک گوشه بودند؛ سورس یک جا، توضیحات یک جا، نسخه‌ای که روی سرور بود یک جای دیگر. هر بار هم می‌خواستم چیزی را پیدا کنم، باید اول یادم می‌آمد آخرین بار کجا گذاشته‌ام.

گفتم چرا یک خانه برای کدهایم نسازم؟ جایی که Git را درست بفهمد، ولی مجبورم نکند برای هر کار کوچکی سراغ ترمینال بروم. اگر خواستم با Clone و Push جلو بروم، همه‌چیز استاندارد باشد؛ اگر هم یک روز فقط خواستم یک فایل را سریع اصلاح کنم، داخل مرورگر بازش کنم، تغییر بدهم و همان‌جا Commit بزنم.

از یک مخزن ساده شروع کردم

نسخه اول خیلی ساده بود: کاربر یک مخزن می‌ساخت و فایل‌هایش را می‌دید. اما خیلی زود معلوم شد همین جمله کوتاه کلی سؤال پشت خودش دارد. مخزن خصوصی دقیقاً چقدر خصوصی است؟ اگر کسی آدرس فایل Raw را حدس بزند چه؟ لینک دانلود پروژه چطور؟ خود Git موقع Clone و Push چطور باید هویت کاربر را بفهمد؟

برای همین به‌جای اینکه فقط صفحه را قفل کنم، دسترسی را دور خود کد کشیدم. خواندن فایل، دانلود Archive، دیدن Diff و ارتباط Git همگی باید از همان مجوز عبور کنند. این قسمت شاید در ظاهر سایت دیده نشود، ولی برای من مهم‌ترین بخش ریپوکده است.

Studio برای وقتی که ترمینال دم دست نیست

از اول نمی‌خواستم استفاده از ریپوکده فقط برای کسی راحت باشد که تمام دستورهای Git را حفظ است. Studio را اضافه کردم تا بتوانی فایل بسازی، اسمش را عوض کنی، محتوا را ویرایش کنی و در پایان Commit واقعی داشته باشی. حتی اگر پروژه آماده‌ای داری، می‌توانی فایل‌هایش را یک‌جا آپلود کنی و ادامه کار را از همان‌جا بگیری.

نکته مهم این است که Studio یک دنیای جدا از Git نیست. هر تغییری که آنجا ثبت می‌شود باید در تاریخچه مخزن دیده شود؛ درست مثل تغییری که از کامپیوتر خودت Push کرده‌ای.

الان ریپوکده چه چیزهایی دارد؟

تا اینجا ثبت‌نام و تأیید ایمیل، مخزن عمومی و خصوصی، Clone و Push با HTTPS، توکن دسترسی، Studio، آپلود پروژه، Commit، Branch، Tag، Wiki، Pull Request، همکاران و پنل مدیریت مستقل آماده شده‌اند. سیستم ایمیل خودش را هم دارد تا تأیید حساب و بازیابی رمز وابسته به پنل سایت محمد مرزبانی نباشد.

هنوز کار تمام نشده و راستش احتمالاً هیچ‌وقت هم به معنای واقعی تمام نمی‌شود. نسخه‌بندی خودکار، تجربه بهتر همکاری و اجرای امن پروژه‌ها جزو قدم‌های بعدی‌اند. ترجیح می‌دهم قابلیت‌ها آرام‌تر اضافه شوند ولی وقتی آمدند، واقعاً قابل استفاده باشند.

چرا اسمش شد ریپوکده؟

چون قرار نیست فقط انبار فایل باشد. «کده» برای من حس یک جای زنده را دارد؛ خانه‌ای که پروژه واردش می‌شود، تغییر می‌کند، نسخه می‌گیرد و کم‌کم رشد می‌کند. اسمش هم قرار بود فارسی و خودمانی باشد، نه یک ترکیب خشک که فردا خودم هم یادم برود چرا انتخابش کردم.

ریپوکده برای من پروژه‌ای نیست که فقط چند عکس از آن در نمونه‌کار بگذارم. قرار است سورس‌های خودم هم همین‌جا نگهداری شوند و هر بار که چیزی در آن بهتر می‌کنم، خود ریپوکده هم با همان ابزارها به‌روزرسانی شود. اگر جایی ایراد دارد یا چیزی کم است، دقیقاً همان بازخوردی است که کمک می‌کند قدم بعدی را درست‌تر بردارم.