-
1. شروع به کار (getting started)
-
2. مقدمات گیت (git basics chapter)
- 2.1 گرفتن یک مخزن گیت (Getting a Git Repository)
- 2.2 ثبت تغییرات در مخزن (Recording Changes to the Repository)
- 2.3 مشاهده تاریخچه کامیتها (Viewing the Commit History)
- 2.4 بازگرداندن تغییرات (Undoing Things)
- 2.5 کار کردن با ریموت ها (Working with Remotes)
- 2.6 تگ کردن (Tagging)
- 2.7 نام مستعار گیت (Git Aliases)
- 2.8 خلاصه (summary)
-
3. انشعابگیری در گیت (Git Branching)
-
4. گیت روی سرور (Git on the server)
- 4.1 پروتکلها (The Protocols)
- 4.2 راهاندازی گیت روی یک سرور (Getting Git on a Server)
- 4.3 ایجاد کلید عمومی SSH شما (Generating Your SSH Public Key)
- 4.4 نصب و راهاندازی سرور (Setting up server)
- 4.5 سرویسدهنده گیت (Git Daemon)
- 4.6 HTTP هوشمند (Smart HTTP)
- 4.7 گیتوب (GitWeb)
- 4.8 گیتلب (GitLab)
- 4.9 گزینههای میزبانی شخص ثالث (Third Party Hosted Options)
- 4.10 خلاصه (Summary)
-
5. گیت توزیعشده (Distributed git)
-
6. GitHub (گیت هاب)
-
7. ابزارهای گیت (Git Tools)
- 7.1 انتخاب بازبینی (Revision Selection)
- 7.2 مرحلهبندی تعاملی (Interactive Staging)
- 7.3 ذخیره موقت و پاکسازی (Stashing and Cleaning)
- 7.4 Signing Your Work (امضای کارهای شما)
- 7.5 جستجو (Searching)
- 7.6 بازنویسی تاریخچه (Rewriting History)
- 7.7 بازنشانی به زبان ساده (Reset Demystified)
- 7.8 ادغام پیشرفته (Advanced Merging)
- 7.9 بازاستفاده خودکار از حل تضادها (Rerere)
- 7.10 اشکالزدایی با گیت (Debugging with Git)
- 7.11 سابماژول ها (Submodules)
- 7.12 بستهبندی (Bundling)
- 7.13 جایگزینی (Replace)
- 7.14 ذخیرهسازی اطلاعات ورود (Credential Storage)
- 7.15 خلاصه (Summary)
-
8. سفارشیسازی Git (Customizing Git)
-
9. گیت و سیستمهای دیگر (Git and Other Systems)
-
10. (Git Internals)
- 10.1 ابزارها و دستورات سطح پایین (Plumbing and Porcelain)
- 10.2 اشیا گیت (Git Objects)
- 10.3 مراجع گیت (Git References)
- 10.4 فایلهای بسته (Packfiles)
- 10.5 نگاشت (The Refspec)
- 10.6 پروتکلهای انتقال (Transfer Protocols)
- 10.7 نگهداری و بازیابی دادهها (Maintenance and Data Recovery)
- 10.8 متغیرهای محیطی (Environment Variables)
- 10.9 (Summary)
-
A1. پیوست A: گیت در محیطهای دیگر (Git in Other Environments)
- A1.1 رابط های گرافیکی (Graphical Interfaces)
- A1.2 Git در ویژوال استودیو (Git in Visual Studio)
- A1.3 Git در Visual Studio Code (Git in Visual Studio Code)
- A1.4 Git در IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine (Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine)
- A1.5 Git در Sublime Text (Git in Sublime Text)
- A1.6 گیت در بش (Git in Bash)
- A1.7 Git در Zsh (Git in Zsh)
- A1.8 Git در PowerShell (Git in PowerShell)
- A1.9 خلاصه (Summary)
-
A2. پیوست B: گنجاندن گیت در برنامههای شما (Embedding Git in your Applications)
-
A3. پیوست C: دستورات گیت (Git Commands)
- A3.1 تنظیم و پیکربندی (Setup and Config)
- A3.2 گرفتن و ایجاد پروژهها (Getting and Creating Projects)
- A3.3 نمونهبرداری پایهای (Basic Snapshotting)
- A3.4 انشعابگیری و ادغام (Branching and Merging)
- A3.5 بهاشتراکگذاری و بهروزرسانی پروژهها (Sharing and Updating Projects)
- A3.6 بازرسی و مقایسه (Inspection and Comparison)
- A3.7 عیبیابی (Debugging)
- A3.8 اعمال تغییرات به صورت پچ (Patching)
- A3.9 ایمیل (Email)
- A3.10 سیستمهای خارجی (External Systems)
- A3.11 مدیریت (Administration)
- A3.12 دستورات سطح پایین گیت (Plumbing Commands)
4.2 گیت روی سرور (Git on the server) - راهاندازی گیت روی یک سرور (Getting Git on a Server)
راهاندازی گیت روی یک سرور (Getting Git on a Server)
حالا به راهاندازی سرویس گیت که این پروتکلها را روی سرور خودتان اجرا میکند، میپردازیم.
یادداشت
|
در اینجا دستورات و مراحل لازم برای نصبهای ساده و پایه روی یک سرور مبتنی بر لینوکس را نشان میدهیم، هرچند امکان اجرای این سرویسها روی سرورهای macOS یا ویندوز هم وجود دارد. راهاندازی دقیق یک سرور تولیدی در زیرساخت شما قطعاً به تفاوتهایی در اقدامات امنیتی یا ابزارهای سیستمعامل نیاز دارد، اما امیدواریم این راهنما ایده کلی آنچه لازم است را به شما بدهد. |
برای راهاندازی اولیه هر سرور گیت، باید یک مخزن موجود را به یک مخزن بیکاربرد (bare repository) جدید تبدیل کنید — مخزنی که دایرکتوری کاری ندارد.
این کار معمولاً بسیار ساده است.
برای کلون کردن مخزن و ایجاد یک مخزن بیکاربرد جدید، دستور clone را با گزینه --bare
اجرا میکنید.
طبق قرارداد، نام دایرکتوری مخازن بیکاربرد با پسوند .git
پایان مییابد، به این صورت:
$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.
حالا باید یک نسخه از دادههای دایرکتوری گیت را در دایرکتوری my_project.git
خود داشته باشید.
این تقریباً معادل چیزی شبیه به:
$ cp -Rf my_project/.git my_project.git
چند تفاوت جزئی در فایل پیکربندی وجود دارد اما برای هدف شما تقریباً همان است. این مخزن گیت را به تنهایی، بدون دایرکتوری کاری، میگیرد و دایرکتوری مخصوص به خودش را ایجاد میکند.
قرار دادن مخزن خالی روی سرور (Putting the Bare Repository on a Server)
حالا که یک نسخه بیکاربرد از مخزن خود دارید، تنها کاری که باید بکنید این است که آن را روی یک سرور قرار داده و پروتکلهای خود را تنظیم کنید.
فرض کنیم یک سرور به نام git.example.com
راهاندازی کردهاید که به آن دسترسی SSH دارید و میخواهید تمام مخازن گیت خود را زیر دایرکتوری /srv/git
ذخیره کنید.
با فرض اینکه دایرکتوری /srv/git
روی آن سرور وجود دارد، میتوانید مخزن جدید خود را با کپی کردن مخزن بیکاربرد راهاندازی کنید:
$ scp -r my_project.git user@git.example.com:/srv/git
در این مرحله، سایر کاربران که دسترسی خواندن مبتنی بر SSH به دایرکتوری /srv/git
روی آن سرور دارند، میتوانند مخزن شما را با اجرای دستور زیر کلون کنند:
$ git clone user@git.example.com:/srv/git/my_project.git
اگر کاربری با SSH وارد سرور شود و دسترسی نوشتن به دایرکتوری /srv/git/my_project.git
داشته باشد، به طور خودکار دسترسی ارسال (push) هم خواهد داشت.
گیت به طور خودکار مجوزهای نوشتن گروهی را به یک مخزن به درستی اضافه میکند اگر دستور git init
را با گزینه --shared
اجرا کنید.
توجه داشته باشید که اجرای این دستور، هیچ کامیت، مرجع و غیرهای را حذف یا تخریب نمیکند.
$ ssh user@git.example.com
$ cd /srv/git/my_project.git
$ git init --bare --shared
میبینید چقدر آسان است که یک مخزن گیت را گرفته، نسخه بیکاربردی از آن بسازید و روی یک سرور قرار دهید که شما و همکارانتان به آن از طریق SSH دسترسی دارید. حالا آمادهاید تا روی همان پروژه همکاری کنید.
مهم است بدانید که واقعاً همین مقدار برای راهاندازی یک سرور گیت مفید که چند نفر به آن دسترسی داشته باشند کافی است — فقط باید حسابهای SSH روی یک سرور اضافه کنید و یک مخزن بیکاربرد در جایی قرار دهید که همه کاربران دسترسی خواندن و نوشتن داشته باشند. آمادهاید — هیچ چیز دیگری لازم نیست.
در بخشهای بعدی خواهید دید چگونه میتوان به تنظیمات پیشرفتهتر گسترش داد. این بحث شامل عدم نیاز به ایجاد حساب کاربری برای هر فرد، افزودن دسترسی خواندن عمومی به مخازن، راهاندازی رابطهای وب و موارد دیگر خواهد بود. اما به یاد داشته باشید که برای همکاری با چند نفر روی یک پروژه خصوصی، تنها چیزی که نیاز دارید یک سرور SSH و یک مخزن بیکاربرد است.
راهاندازیهای کوچک (Small Setups)
اگر یک گروه کوچک هستید یا فقط میخواهید گیت را در سازمان خود امتحان کنید و توسعهدهندگان کمی دارید، اوضاع میتواند برایتان ساده باشد. یکی از پیچیدهترین جنبههای راهاندازی سرور گیت، مدیریت کاربران است. اگر بخواهید برخی مخازن فقط برای برخی کاربران فقط خواندنی و برای دیگران خواندنی/نوشتنی باشد، دسترسیها و مجوزها ممکن است کمی سختتر تنظیم شوند.
دسترسی SSH (SSH Access)
اگر سروری دارید که همه توسعهدهندگان شما قبلاً به آن دسترسی SSH دارند، معمولاً آسانترین کار این است که اولین مخزن خود را روی همان سرور راهاندازی کنید، زیرا تقریباً نیازی به انجام کار اضافی ندارید (همانطور که در بخش قبل توضیح داده شد). اگر میخواهید کنترل دسترسی پیچیدهتری روی مخازن خود داشته باشید، میتوانید از مجوزهای معمول سیستم فایل سیستمعامل سرور خود استفاده کنید.
اگر میخواهید مخازن خود را روی سروری قرار دهید که حساب کاربری برای همه اعضای تیم شما که میخواهید به آنها دسترسی نوشتن بدهید، ندارد، باید برای آنها دسترسی SSH تنظیم کنید. فرض میکنیم اگر سروری برای این کار دارید، قبلاً سرور SSH روی آن نصب شده و شما از طریق همین سرویس به سرور دسترسی دارید.
چند روش برای دادن دسترسی به همه اعضای تیم وجود دارد.
اولین روش ایجاد حساب کاربری برای هر نفر است که ساده است اما ممکن است زمانبر باشد.
ممکن است نخواهید برای هر کاربر جدید دستور adduser
(یا جایگزین احتمالی آن useradd
) را اجرا کنید و برای هر کدام رمز عبور موقتی تعیین نمایید.
روش دوم ایجاد یک حساب کاربری واحد به نام «git» روی سرور است، از هر کاربری که قرار است دسترسی نوشتن داشته باشد بخواهید کلید عمومی SSH خود را برای شما ارسال کند و آن کلید را به فایل ~/.ssh/authorized_keys
حساب «git» اضافه کنید.
در این صورت همه میتوانند از طریق حساب «git» به آن سرور دسترسی پیدا کنند.
این موضوع به هیچ وجه روی دادههای کامیت تأثیر نمیگذارد — کاربری که از طریق SSH به آن وصل میشوید، روی کامیتهای ثبتشده تأثیری ندارد.
روش دیگر این است که سرور SSH شما از طریق یک سرور LDAP یا منبع احراز هویت متمرکز دیگری که ممکن است قبلاً راهاندازی کرده باشید، کاربران را احراز هویت کند. تا زمانی که هر کاربر بتواند به شل سرور دسترسی داشته باشد، هر مکانیزم احراز هویتی که به آن فکر کنید باید کار کند.