-
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.4 گیت روی سرور (Git on the server) - نصب و راهاندازی سرور (Setting up server)
نصب و راهاندازی سرور (Setting up server)
اجازه دهید تا گام به گام به راهاندازی دسترسی SSH روی سرور بپردازیم.
در این مثال شما از متد authorized_keys
برای تصدیق هویت کاربرانتان استفاده خواهید کرد.
همچنین ما فرض میکنیم که از یک توزیع استاندارد لینوکس مانند اوبونتو استفاده میکنید.
یادداشت
|
به جای کپی و نصب دستی کلیدهای عمومی، بخش اعظمی از چیزهایی که در اینجا در اینجا توضیح داده شدهاند را میتواند با دستور |
اول یک حساب کاربری git
و یک پوشه .ssh
برای همان کاربر میسازید.
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
بعد از آن، لازم است که چند کلید عمومی SSH از توسعهدهندگان را به فایل authorized_keys
کاربر git
اضافه کنید.
فرض کنیم شما چند کلید عمومی قابل اعتماد دارید و آن را در فایلهای موقتی ذخیره کردهاید.
مجدداً، کلید عمومی چیزی شبیه به این است:
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
شما آنها را به انتهای فایل authorized_keys
در پوشه .ssh
کاربر git
اضافه میکنید:
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
حالا میتوانید با اجرای دستور git init
همراه با آپشن --bare
یک مخزن خالی، یا در واقع بدون پوشه کاری، برای آنها راهاندازی کنید:
$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
سپس، John، Josie یا Jessica میتوانند با افزودن آن به عنوان یک ریموت و ارائه یک برنچ، اولین نسخه از پروژه خود را به آن مخزن پوش کنند.
توجه داشته باشید که هر زمان بخواهید پروژه جدیدی بسازید حتماً شخصی باید به شل آن سیستم وصل شود و یک مخزن بِر بسازد.
حالا بیایید از gitserver
به عنوان نام هاست (Hostname) سروری که روی آن مخزن و کاربر git
را راهاندازی کردیم استفاده کنیم.
اگر آن را به صورت داخلی کار میکنید و DNS برای`gitserver` راهاندازی میکنید تا به آن سرور اشاره کند، میتوانید از دستورات، تقریباً،
همانگونه که هستند استفاده کنید (با فرض اینکه myproject
پروژهای از پیش موجود با فایلهایی در خود است).
# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'Initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
حال، دیگران میتوانند به راحتی آنرا کلون کنند یا تغییرات را به همین سادگی به سرور پوش کنند:
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'Fix for README file'
$ git push origin master
بدین طریق شما سریعاً میتوانید سرور گیتی با قابلیت خواندن/نوشتن راهاندازی کنید و آن در اختیار توسعهدهندگان قرار دهید.
باید به این نکته توجه کنید که در حال حاضر تمامی کاربران میتوانند به داخل سرور ورود کنند و به عنوان کاربر git
یک شل در دست بگیرند.
اگر میخواهید از این موضوع جلوگیری کنید، میبایست شل را در داخل /etc/passwd
به چیز دیگری تغییر دهید.
شما به سادگی میتوانید حساب کاربر git
را فقط به فعالیتهای مربوط به گیت و با ابزار شل محدودی به نام git-shell
که با گیت میآید محدود کنید.
اگر شما این ابزار را به عنوان شل ورودی حساب کاربری git
تنظیم کنید، آن حساب کاربری نمیتواند دسترسی شل معمولی به سرور شما داشته باشد.
برای انجام این کار، باید ابتدا مسیر کامل دستور git-shell
را به /etc/shells
اضافه کنید:
$ cat /etc/shells # see if git-shell is already in there. If not...
$ which git-shell # make sure git-shell is installed on your system.
$ sudo -e /etc/shells # and add the path to git-shell from last command
حالا میتوانید با استفاده از chsh <username> -s <shell>
شل هر کاربر را تغییر دهید:
$ sudo chsh git -s $(which git-shell)
اکنون کاربر git
همچنان میتواند از SSH برای پوش و پول از مخازن گیت استفاده کند اما نمیتواند به شل دستگاه وصل شود.
اگر یکبار امتحان کنید، پیغام رد درخواستی مانند پیغام پایین را مشاهده خواهید کرد:
$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
در حال حاضر، کاربران همچنان میتوانند از پورت-فورواردینگ SSH برای دسترسی به هر میزبانی که سرور گیت میتواند به آن برسد استفاده کنند.
اگر میخواهید از این موضوع جلوگیری کنید میتوانید فایل authorized_keys
را اصلاح کنید و آپشنهای زیر را پیش از هر کلیدی که میخواهید محدود شود اضافه کنید:
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
نتیجه کار باید چیزی شبیه به این باشد:
$ cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6h
PB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541N
YsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcC
IicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBd
LQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJ
ICUvax2T9va5 gsg-keypair
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDEwENNMomTboYI+LJieaAY16qiXiH3wuvENhBG...
حالا دستورات شبکه گیت همچنان به خوبی کار خواهند کرد اما کاربران قادر به گرفتن شل نخواهند بود.
همانطور که خروجی بیان میکند، شما همچنین میتوانید یک پوشه درون پوشه خانه کاربر git
بسازید که دستور git-shell
را کمی سفارشی میکند.
برای مثال، میتوانید دستوراتی که سرور قبول خواهد کرد را محدود کنید یا میتوانید پیامی که کاربران در صورت تلاش به استفاده از SSH میبینند را سفارشی سازی کنید.
برای اطلاعات بیشتر درمورد سفارشی سازی شل git help shell
را اجرا کنید.