استفاده از مخازن در git برای تعدادی کاربر
يكشنبه, ۲۷ دی ۱۳۹۴، ۱۰:۵۵ ق.ظ
برای مدیریت مخازن و کاربرها توی git راه های زیادی وجود داره. نرم افزارهای گرافیکی تحت وب مثل fisheye و ... و نرم افزارهای خط فرمانی مثل gitosis و همچنین راه حل های دیگه ای هم وجود داره. من شخصا از خودم سعی میکنم زیاد از نرم افزارها توی کار استفاده نکنم چون اعتمادی هم بهشون ندارم. در این بخش تصمیم دارم یکی از راه های سنتی رو در این زمینه به شما آموزش بدم.
اهداف:
۱) ایجاد یک مخزن برای خصوصی سازی کد و همچنین دادن اجازه خواندن (pull) و اجازه نوشتن (push)
۲) این روش نحوه استفاده از permission های خود یونیکس هست و همونطور که گفتم تنها راه نیست و البته شاید از نظر بعضی هم بهترین راه نباشه.
پیش نیازها:
۱) یک سرور که روی اون گیت نصب شده باشه. میتونید به اینجا مراجعه کنید منتها یادتون باشه که دیگه نیازی نیست مثلا کاربر git رو تعریف کنید و میتونید از این بخش برای کار خودتون توی بخشی که لینکش رو براتون گذاشتم بهره ببرید.
۲) هر کاربر برای استفاده از گیت نیاز به دسترسی ssh داره که توضیحاتش باز توی لینک پیشنیاز بخش اول اومده.
ادامه کار
برای مدیریت کاربرها ابتدا نیاز هست تا شما تعدادی کاربر روی سرور خودتون تعریف کنید:
$ sudo adduser user1
$ su user1
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
در قدم بعد میبایست کلید عمومی کاربر مورد نظر رو به فایل authorized_keys اضافه کنید.
حالا فزض کنیم این کار رو برای مثلا چندین کاربر انجام دادیم و حالا ما تعدادی کاربر داریم که قادر به برقراری ارتباط ssh با سرور git هستند.
اولین کاری که میکنیم دسترسی ssh رو برای کاربرها میبندیم و تلاش میکنم تا فقط اونها بتونند از طریق ssh دسترسی git داشته باشند:
ابتدا دستور زیر رو بزنید تا ببینید چه shell هایی روی سیستم شما وجود داره:
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
فرض میکنیم شل هایی که در بالا ملاحظه میکنید روی سیستم شما وجود داشته باشه. از دستور زیر برای اینکه مسیر نصب شده شل مربوط به گیت رو ببینید استفاده کنید:
$ which git-shell
/usr/bin/git-shell
معمولا مقدارش چیزی خواهد بود که در بالا ملاحظه میکنید. حالا فایل مورد نظر رو باز کرده و مقدار شل مربوط به گیت رو به اون اضافه کنید:
$ sudo vim /etc/shells
پس حالا باید خروجی زیر رو داشته باشید:
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
/usr/bin/git-shell
حالا برای ثبت تغییرات از دستور زیر استفاده کنید: (یادتون باشه این کار باید برای تمام کاربرایی که ایجاد کردید انجام یشه)
$ sudo chsh user1
بعد از انجام تنظیمات مربوطه حالا باید گروه لازم رو ایجاد کنید. برای ایجاد گروه سناریوهایی رو و آنچه رو که توی ذهنتون هست رو باید خوب با خودتون مرور کنید. مثلا شما میتونید برای هر پروژه یک گروه تعریف کنید و کاربرهای مربوط به اون پروژه رو به عضویت گروه مورد نظر دربیارید.
در ادامه به تعریف گروه و اضافه کردن عضوی به گروه میپردازم:
$ sudo groupadd gproject1
$ sudo usermod -a -G gproject1 user1
. . .
بعد از اینکه اعضا به گروه های خودشون اضافه شدن حالا کافیه تا پروژه ی خودتون رو تعریف کنید. پروژه حتما باید با عبارت git. تمام بشه. بعد از این کار شما باید یک مخزن bare هم برای کار از راه دور تعریف کنید.
$ sudo mkdir -p /opt/git/project1.git
$ cd /opt/git/project1.git
$ sudo git init --bare
در قدم بعد میخوایم مطمان بشیم که حتما کاربرهای مورد نظر به پروژه ی خودشون دسترسی دارن.
$ cd /opt/git
$ sudo chgrp -R gproject1 project1.git
$ sudo chmod -R g+swX project1.git
سطح دسترسی مناسب برای پروژه تعریف شده. حالا کافیه تا ی سری به سیستم محلی کاربر بزنیم تا پروژه ایجاد بشه و بشه باهاش کار کرد.
دستورات زیر رو روی سیستم کاربر بزنید. ابتدا یک مخزن محلی ایجاد کرده و مخزن سرور رو به عنوان یک مخزن راه دور معرفی میکنیم و بعد از اون میتونیم شاخه ی master رو در مخزن origin به اصطلاح pull کنیم.
$ mkdir myproject1.git $ cd myproject1.git $ git init $ git add . $ git commit -m 'Initial project' $ git remote add origin user1@gitserver:/opt/git/project1.git $ git pull origin master
بعد از زدن این دستورات شما همون بخش هایی رو که روی سرور هست رو خواهید داشت و میتونید اولین commit خودتون رو انجام بدید و بعد از اعمال تغییرات اون رو به سرور مورد نظر push کنید.