-
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.6 گیت روی سرور (Git on the server) - HTTP هوشمند (Smart HTTP)
HTTP هوشمند (Smart HTTP)
ما اکنون دسترسی احراز هویت شده از طریق SSH و دسترسی بدون احراز هویت از طریق git://
داریم، اما پروتکلی نیز وجود دارد که میتواند هر دو را همزمان انجام دهد.
راهاندازی Smart HTTP اساساً فقط فعال کردن یک اسکریپت CGI است که با گیت ارائه میشود و در سرور git-http-backend
نام دارد. (دستورات گیت، "http-backend")
این CGI مسیر و هدرهای ارسال شده توسط git fetch
یا git push
به یک URL HTTP را میخواند و تعیین میکند که آیا کلاینت میتواند از طریق HTTP ارتباط برقرار کند (که برای هر کلاینتی از نسخه ۱.۶.۶ به بعد درست است).
اگر CGI ببیند که مشتری باهوش است، با او هوشمندانه ارتباط برقرار میکند؛ در غیر این صورت به رفتار سادهلوحانه بازمیگردد (بنابراین برای خواندن با مشتریان قدیمیتر سازگار با نسخههای قبلی است).
بیایید یک راهاندازی بسیار ساده را مرور کنیم. ما این را با آپاچی به عنوان سرور CGI راهاندازی خواهیم کرد. اگر آپاچی را راهاندازی نکردهاید، میتوانید این کار را روی یک سرور لینوکس با چیزی شبیه این انجام دهید:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
این همچنین ماژولهای mod_cgi
، mod_alias
و mod_env
را فعال میکند که همگی برای عملکرد صحیح این کار لازم هستند.
همچنین باید گروه کاربری یونیکس دایرکتوریهای /srv/git
را روی www-data
تنظیم کنید تا سرور وب شما بتواند به مخازن دسترسی خواندن و نوشتن داشته باشد، زیرا نمونه آپاچی که اسکریپت CGI را اجرا میکند (به طور پیشفرض) با آن کاربر اجرا خواهد شد:
$ chgrp -R www-data /srv/git
بعداً باید چیزهایی به پیکربندی آپاچی اضافه کنیم تا git-http-backend
را به عنوان هندلر هر چیزی که به مسیر /git
سرور وب شما میآید، اجرا کنیم.
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
اگر متغیر محیطی GIT_HTTP_EXPORT_ALL
را حذف کنید، گیت فقط مخزنهایی را که فایل git-daemon-export-ok
در آنها وجود دارد، درست مانند گیت دیمون، به کلاینتهای بدون احراز هویت سرویس میدهد.
در نهایت، میخواهید به آپاچی بگویید که درخواستها به git-http-backend
را مجاز کند و نوشتنها را به نوعی احراز هویت کند، احتمالاً با یک بلوک Auth مانند این:
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /srv/git/.htpasswd
Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
Require valid-user
</Files>
این کار مستلزم ایجاد یک فایل .htpasswd
است که حاوی رمز عبور تمام کاربران معتبر باشد.
در اینجا نمونهای از اضافه کردن کاربر “schacon” به فایل آورده شده است:
$ htpasswd -c /srv/git/.htpasswd schacon
راههای زیادی برای احراز هویت کاربران توسط آپاچی وجود دارد، شما باید یکی از آنها را انتخاب و پیادهسازی کنید. این فقط سادهترین مثالی بود که توانستیم به آن برسیم. همچنین تقریباً مطمئناً میخواهید این را روی SSL راهاندازی کنید تا تمام این دادهها رمزگذاری شوند.
ما نمیخواهیم خیلی وارد جزئیات پیکربندی آپاچی شویم، زیرا ممکن است شما از سرور دیگری استفاده کنید یا نیازهای احراز هویت متفاوتی داشته باشید.
ایده این است که گیت همراه با یک CGI به نام git-http-backend
ارائه میشود که هنگام فراخوانی، تمام مذاکرات برای ارسال و دریافت دادهها از طریق HTTP را انجام میدهد.
خودش هیچ احرازی هویت را پیادهسازی نمیکند، اما این را میتوان به راحتی در لایه وب سروری که آن را فراخوانی میکند، کنترل کرد.
شما میتوانید این کار را تقریباً با هر سرور وب دارای قابلیت CGI انجام دهید، بنابراین سروری را انتخاب کنید که بهترین شناخت را از آن دارید.
یادداشت
|
برای اطلاعات بیشتر در مورد پیکربندی احراز هویت در آپاچی، مستندات آپاچی را در اینجا بررسی کنید: https://httpd.apache.org/docs/current/howto/auth.html [^]. |