از وقتی با Git آشنا شدم خیلی علاقهای به استفاده از Github و Gitlab و غیره حتی با توجه به آمار و امکانات جانبی که در اختیار میگذارن نداشتم و ترجیحم این بوده که Server اختصاصی خودم را داشته باشم. اینطوری بینهایت پروژه با هر تنظیمات و امکاناتی که میخوام در اختیارم دارم. فقط موضوع هزینه هست که بعید میدونم حتی یک شرکت کوچیک مشکلی با ۳۰ یا ۵۰ هزار تومان هزینه در ماه برای خرید یک VPS خیلی عادی توی دیتاسنترهای داخلی داشته باشه! تا بدین شکل علاوه بر استفاده از Git بتونه سرویسهای آنلاین دیگهای را هم برای مجموعه خودش به صورت یکجا داشته باشه.
برای نصب Git روی سرویس دهنده دستور زیر را میزنیم:
1 | sudo apt-get install git-core |
حالا یک کاربر جدید برای Git ایجاد میکنیم:
1 | sudo useradd git |
2 | passwd git |
برای اینکه امنیت را در زمان استفاده از SSH بالا ببریم بهتره از طریق SSH Key Pairs روی سرویس دهنده خودمون Login کنیم. برای این کار با دستور زیر یک جفت Public Key و Private Key روی سیستم محلی خودمون میسازیم:
1 | ssh-keygen -t rsa |
این دستور ابتدا سؤال میکنه که کلید ها را توی چه مسیری ایجاد کنه که عموما مسیر پیش فرض ssh./~ خوبه اما میتونین هر مسیر دیگهای را بهش بدین (جالب نیست چون زمان ssh زدن مجبور میشین آدرس Public Key را به دستور ssh بدین). همچنین ازتون میخواد که یک گذرواژه روی کلیدها بگذارین که دلخواه هست اما بهتره این گذرواژه را هم وارد کنید.
Private Key روی سیستم محلی شما میمونه ولی باید Public Key را روی سرویس دهنده خودتون به فایل ssh/authorized_keys./~ کنید که با دستور زیر خودکار انجام خواهد شد:
1 | cat ~/.ssh/id_rsa.pub | ssh git@remote-server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" |
حالا بعد از انجام این کار زمانssh از طریق جفت کلید لاگین انجام میشه و فقط در صورتی گذرواژه میخواد که روی کلیدها گذرواژه گذاشته باشین.
فرض میکنیم شما یک پروژه به نام myproject روی سیستم محلی دارین که میخواین اون را روی سرویس دهنده Push کنید.
با ssh از طریق نام کاربری git روی سرویس دهنده لاگین میکنیم (میتونین هم با root لاگین کنین و با دستور su کاربر را به git تغییر بدین.) و پوشه مخازن را در مسیر دلخواه ایجاد میکنید:
1 | mkdir -p /home/git/repos |
به پوشه ایجاد شده میریم:
1 | cd /home/git/repos |
مخزن را با دستور زیر ایجاد میکنیم:
1 | git init --bare myproject.git |
حالا روی سیستم محلی در مسیر پروژه myproject با دستور زیر این مخزن Remote را اضافه میکنیم(فرض بر این است که شما قبلاً مخزن محلی پروژه را ایجاد کردهاید و پروژه آماده Push شدن است):
1 | git remote add origin ssh://git@remote-server-ip:port/home/git/myproject.git |
در این مرحله با دستور زیر پروژه را روی مخزن Remote برای اولین بار اینطوری Push میکنیم:
1 | git push -u origin master |
سوئیچ u- به push میگه Tracking Information را Set کن تا در زمان Pull و Fetch نیاز به نام بردن از Branch نباشه. اگه توی دستوراتتون Branch را میزنین نیاز به این سوئیچ نیست.