'\" t .\" Title: git-http-backend .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 2026-06-29 .\" Manual: دستورات عمومی کاربر .\" Source: Git 2.55.0 .\" Language: Persian .\" .TH "GIT\-HTTP\-BACKEND" "1" "2026\-06\-29" "Git 2\&.55\&.0" "دستورات عمومی کاربر" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" git-http-backend \- پیاده‌سازی سمت سرور گیت از طریق پروتکل HTTP .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fIgit http\-backend\fR .fi .sp .SH "توضیحات (DESCRIPTION)" .sp یک برنامه ساده CGI برای ارائه محتویات یک مخزن گیت به کلاینت‌های گیت که از طریق پروتکل‌های http:// و https:// به مخزن دسترسی دارند\&. این برنامه هم از دریافت (fetch) کلاینت‌ها با استفاده از پروتکل هوشمند HTTP (smart HTTP) و پروتکل سازگار با گذشته سنتی HTTP (dumb HTTP)، و هم از ارسال (push) کلاینت‌ها با استفاده از پروتکل هوشمند HTTP پشتیبانی می‌کند\&. همچنین در صورت پیکربندی مناسب، از پروتکل کارآمدتر نسخه ۲ ("v2") گیت پشتیبانی می‌نماید؛ به توضیحات مربوط به \fBGIT_PROTOCOL\fR در بخش متغیرهای محیطی در ادامه مراجعه کنید\&. .sp این برنامه بررسی می‌کند که آیا دایرکتوری دارای فایل ویژه "git\-daemon\-export\-ok" هست یا خیر، و از صادر کردن هر دایرکتوری گیت که صراحتاً به این روش برای صدور مشخص نشده باشد خودداری خواهد کرد (مگر اینکه متغیر محیطی \fBGIT_HTTP_EXPORT_ALL\fR تنظیم شده باشد)\&. .sp به‌طور پیش‌فرض، تنها سرویس \fBupload\-pack\fR فعال است که به کلاینت‌های \fIgit fetch\-pack\fR و \fIgit ls\-remote\fR سرویس‌دهی می‌کند؛ این کلاینت‌ها از \fIgit fetch\fR، \fIgit pull\fR و \fIgit clone\fR فراخوانی می‌شوند\&. اگر کلاینت احراز هویت شده باشد، سرویس \fBreceive\-pack\fR فعال می‌شود که به کلاینت‌های \fIgit send\-pack\fR سرویس‌دهی می‌کند که از \fIgit push\fR فراخوانی می‌شود\&. .SH "سرویس‌ها (SERVICES)" .sp این سرویس‌ها را می‌توان با استفاده از فایل پیکربندی هر مخزن فعال/غیرفعال کرد: .PP http\&.getanyfile .RS 4 این مورد به کلاینت‌های گیت قدیمی‌تر از نسخه 1\&.6\&.6 که قادر به استفاده از سرویس upload pack نیستند سرویس‌دهی می‌کند\&. در صورت فعال بودن، کلاینت‌ها قادرند هر فایلی را در مخزن بخوانند، از جمله اشیایی که دیگر از طریق هیچ شاخه‌ای قابل دستیابی نیستند اما همچنان وجود دارند\&. این گزینه به‌طور پیش‌فرض فعال است، اما هر مخزن می‌تواند با تنظیم این مقدار پیکربندی روی \fBfalse\fR آن را غیرفعال کند\&. .RE .PP http\&.uploadpack .RS 4 این مورد به کلاینت‌های \fIgit fetch\-pack\fR و \fIgit ls\-remote\fR سرویس‌دهی می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است، اما هر مخزن می‌تواند با تنظیم این مقدار پیکربندی روی \fBfalse\fR آن را غیرفعال کند\&. .RE .PP http\&.receivepack .RS 4 این مورد به کلاینت‌های \fIgit send\-pack\fR سرویس‌دهی کرده و اجازه push را می‌دهد\&. این گزینه به‌طور پیش‌فرض برای کاربران ناشناس غیرفعال و برای کاربرانی که توسط وب‌سرور احراز هویت شده‌اند فعال است\&. می‌توان آن را با تنظیم این مقدار روی \fBfalse\fR غیرفعال کرد، یا با تنظیم آن روی \fBtrue\fR برای همه کاربران، از جمله کاربران ناشناس، فعال نمود\&. .RE .PP http\&.uploadarchive .RS 4 این مورد به کلاینت‌های \fIgit archive\fR جهت ایجاد آرشیو دوردست از طریق پروتکل‌های HTTP/HTTPS سرویس‌دهی می‌کند\&. این گزینه به‌طور پیش‌فرض غیرفعال است\&. این مورد تنها در پروتکل نسخه ۲ کار می‌کند\&. .RE .SH "ترجمه نشانی (URL TRANSLATION)" .sp برای تعیین مکان مخزن بر روی دیسک، \fIgit http\-backend\fR متغیرهای محیطی PATH_INFO که به‌طور خودکار توسط وب‌سرور تنظیم می‌شود، و GIT_PROJECT_ROOT که باید به‌طور دستی در پیکربندی وب‌سرور تنظیم گردد را به یکدیگر متصل می‌کند\&. اگر GIT_PROJECT_ROOT تنظیم نشده باشد، \fIgit http\-backend\fR متغیر PATH_TRANSLATED را می‌خواند که آن نیز به‌طور خودکار توسط وب‌سرور تنظیم می‌شود\&. .SH "مثال‌ها (EXAMPLES)" .sp تمام مثال‌های زیر \fBhttp://$hostname/git/foo/bar\&.git\fR را به \fB/var/www/git/foo/bar\&.git\fR نگاشت می‌کنند\&. .PP Apache 2\&.x .RS 4 اطمینان حاصل کنید که mod_cgi، mod_alias و mod_env فعال هستند، GIT_PROJECT_ROOT (یا DocumentRoot) را به‌درستی تنظیم کرده و یک ScriptAlias به این CGI ایجاد نمایید: .sp .if n \{\ .RS 4 .\} .nf SetEnv GIT_PROJECT_ROOT /var/www/git SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git/ /usr/libexec/git\-core/git\-http\-backend/ # این کار در صورت استفاده از آپاچی و نسخه مدرنی از git\-http\-backend # کاملاً ضروری نیست، زیرا وب‌سرور هدر را در متغیر محیطی # به صورت HTTP_GIT_PROTOCOL ارسال می‌کند و http\-backend آن را در # GIT_PROTOCOL کپی خواهد کرد\&. اما ممکن است به این خط نیاز داشته باشید # (یا خطی مشابه اگر از وب‌سرور دیگری استفاده می‌کنید)، یا اگر می‌خواهید # از نسخه‌های قدیمی‌تر گیت که این کپی را انجام نمی‌دادند پشتیبانی کنید\&. # # تنظیم GIT_PROTOCOL توسط وب‌سرور حتی در نسخه‌های جدید نیز کاملاً # مناسب است (و بر HTTP_GIT_PROTOCOL تقدم خواهد داشت، به این معنی که # می‌توان از آن برای نادیده گرفتن درخواست کلاینت استفاده کرد)\&. SetEnvIf Git\-Protocol "\&.*" GIT_PROTOCOL=$0 .fi .if n \{\ .RE .\} .sp برای فعال کردن دسترسی خواندن ناشناس اما دسترسی نوشتن با احراز هویت، برای هر دو مورد اعلان ارجاع اولیه (که آن را از طریق پارامتر service در رشته پرس‌وجو به عنوان یک push تشخیص می‌دهیم) و خود فراخوانی receive\-pack به احراز هویت نیاز است: .sp .if n \{\ .RS 4 .\} .nf RewriteCond %{QUERY_STRING} service=git\-receive\-pack [OR] RewriteCond %{REQUEST_URI} /git\-receive\-pack$ RewriteRule ^/git/ \- [E=AUTHREQUIRED:yes] Order Deny,Allow Deny from env=AUTHREQUIRED AuthType Basic AuthName "Git Access" Require group committers Satisfy Any \&.\&.\&. .fi .if n \{\ .RE .\} .sp اگر \fBmod_rewrite\fR را برای تطبیق با رشته پرس‌وجو در دسترس ندارید، کافی است تنها از خود \fBgit\-receive\-pack\fR محافظت کنید، مانند: .sp .if n \{\ .RS 4 .\} .nf AuthType Basic AuthName "Git Access" Require group committers \&.\&.\&. .fi .if n \{\ .RE .\} .sp در این حالت، سرور تا زمانی که کلاینت عملاً مرحله مذاکره شیء (object negotiation) عملیات push را آغاز نکند، در طول تماس اولیه درخواست احراز هویت نخواهد کرد\&. به همین دلیل، باید گزینه پیکربندی \fBhttp\&.receivepack\fR را در هر مخزنی که باید یک push را بپذیرد فعال کنید\&. رفتار پیش‌فرض در صورتی که \fBhttp\&.receivepack\fR تنظیم نشده باشد، رد هرگونه push توسط کاربران احراز هویت‌نشده است؛ بنابراین درخواست اولیه حتی بدون دادن فرصت برای احراز هویت، خطای \fB403\fR \fBForbidden\fR را به کلاینت گزارش خواهد داد\&. .sp برای الزام احراز هویت برای هر دو عملیات خواندن و نوشتن، از یک دستورالعمل Location پیرامون مخزن یا یکی از دایرکتوری‌های والد آن استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf AuthType Basic AuthName "Private Git Access" Require group committers \&.\&.\&. .fi .if n \{\ .RE .\} .sp برای ارائه gitweb در همان نشانی وب، از ScriptAliasMatch فقط برای آن نشانی‌هایی که \fIgit http\-backend\fR می‌تواند مدیریت کند استفاده کرده و بقیه را به gitweb هدایت نمایید: .sp .if n \{\ .RS 4 .\} .nf ScriptAliasMatch \e "(?x)^/git/(\&.*/(HEAD | \e info/refs | \e objects/(info/[^/]+ | \e [0\-9a\-f]{2}/[0\-9a\-f]{38} | \e pack/pack\-[0\-9a\-f]{40}\e\&.(pack|idx)) | \e git\-(upload|receive)\-pack))$" \e /usr/libexec/git\-core/git\-http\-backend/$1 ScriptAlias /git/ /var/www/cgi\-bin/gitweb\&.cgi/ .fi .if n \{\ .RE .\} .sp برای ارائه چند مخزن از فضاهای نام مختلف \fBgitnamespaces\fR(7) در یک مخزن واحد: .sp .if n \{\ .RS 4 .\} .nf SetEnvIf Request_URI "^/git/([^/]*)" GIT_NAMESPACE=$1 ScriptAliasMatch ^/git/[^/]*(\&.*) /usr/libexec/git\-core/git\-http\-backend/storage\&.git$1 .fi .if n \{\ .RE .\} .sp .RE .PP Apache 2\&.x شتاب‌یافته برای محتوای ایستا (Accelerated static Apache 2.x) .RS 4 مشابه مورد بالا، اما می‌توان از آپاچی برای بازگرداندن فایل‌های ایستای ذخیره‌شده بر روی دیسک استفاده کرد\&. در بسیاری از سیستم‌ها این کار می‌تواند کارآمدتر باشد زیرا آپاچی می‌تواند از هسته سیستم‌عامل بخواهد تا محتویات فایل را مستقیماً از فایل‌سیستم به شبکه کپی کند: .sp .if n \{\ .RS 4 .\} .nf SetEnv GIT_PROJECT_ROOT /var/www/git AliasMatch ^/git/(\&.*/objects/[0\-9a\-f]{2}/[0\-9a\-f]{38})$ /var/www/git/$1 AliasMatch ^/git/(\&.*/objects/pack/pack\-[0\-9a\-f]{40}\&.(pack|idx))$ /var/www/git/$1 ScriptAlias /git/ /usr/libexec/git\-core/git\-http\-backend/ .fi .if n \{\ .RE .\} .sp این مورد را می‌توان با پیکربندی gitweb ترکیب کرد: .sp .if n \{\ .RS 4 .\} .nf SetEnv GIT_PROJECT_ROOT /var/www/git AliasMatch ^/git/(\&.*/objects/[0\-9a\-f]{2}/[0\-9a\-f]{38})$ /var/www/git/$1 AliasMatch ^/git/(\&.*/objects/pack/pack\-[0\-9a\-f]{40}\&.(pack|idx))$ /var/www/git/$1 ScriptAliasMatch \e "(?x)^/git/(\&.*/(HEAD | \e info/refs | \e objects/info/[^/]+ | \e git\-(upload|receive)\-pack))$" \e /usr/libexec/git\-core/git\-http\-backend/$1 ScriptAlias /git/ /var/www/cgi\-bin/gitweb\&.cgi/ .fi .if n \{\ .RE .\} .sp .RE .PP Lighttpd .RS 4 اطمینان حاصل کنید که ماژول‌های \fBmod_cgi\fR، \fBmod_alias\fR، \fBmod_auth\fR، \fBmod_setenv\fR بارگذاری شده‌اند، سپس \fBGIT_PROJECT_ROOT\fR را به‌درستی تنظیم کرده و همه درخواست‌ها را به CGI هدایت کنید: .sp .if n \{\ .RS 4 .\} .nf alias\&.url += ( "/git" => "/usr/lib/git\-core/git\-http\-backend" ) $HTTP["url"] =~ "^/git" { cgi\&.assign = ("" => "") setenv\&.add\-environment = ( "GIT_PROJECT_ROOT" => "/var/www/git", "GIT_HTTP_EXPORT_ALL" => "" ) } .fi .if n \{\ .RE .\} .sp برای فعال کردن دسترسی خواندن ناشناس اما دسترسی نوشتن با احراز هویت: .sp .if n \{\ .RS 4 .\} .nf $HTTP["querystring"] =~ "service=git\-receive\-pack" { include "git\-auth\&.conf" } $HTTP["url"] =~ "^/git/\&.*/git\-receive\-pack$" { include "git\-auth\&.conf" } .fi .if n \{\ .RE .\} .sp که در آن \fBgit\-auth\&.conf\fR چیزی شبیه به این است: .sp .if n \{\ .RS 4 .\} .nf auth\&.require = ( "/" => ( "method" => "basic", "realm" => "Git Access", "require" => "valid\-user" ) ) # \&.\&.\&. و پیکربندی auth\&.backend در اینجا .fi .if n \{\ .RE .\} .sp برای نیاز به احراز هویت برای هر دوی خواندن و نوشتن: .sp .if n \{\ .RS 4 .\} .nf $HTTP["url"] =~ "^/git/private" { include "git\-auth\&.conf" } .fi .if n \{\ .RE .\} .sp .RE .SH "متغیرهای محیطی (ENVIRONMENT)" .sp \fIgit http\-backend\fR به متغیرهای محیطی \fBCGI\fR تنظیم‌شده توسط وب‌سرور فراخوان اتکا دارد، از جمله: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} PATH_INFO (اگر GIT_PROJECT_ROOT تنظیم شده باشد، در غیر این صورت PATH_TRANSLATED) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} REMOTE_USER .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} REMOTE_ADDR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} CONTENT_TYPE .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} QUERY_STRING .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} REQUEST_METHOD .RE .sp متغیر محیطی \fBGIT_HTTP_EXPORT_ALL\fR می‌تواند به \fIgit\-http\-backend\fR ارسال شود تا بررسی وجود فایل "git\-daemon\-export\-ok" در هر مخزن را پیش از اجازه دادن به صدور (export) آن مخزن نادیده بگیرد\&. .sp متغیر محیطی \fBGIT_HTTP_MAX_REQUEST_BUFFER\fR (یا گزینه پیکربندی \fBhttp\&.maxRequestBuffer\fR) را می‌توان برای تغییر بزرگ‌ترین درخواست مذاکره ارجاع (ref negotiation) که گیت در حین دریافت (fetch) پردازش می‌کند تنظیم کرد؛ هر دریافتی که به بافر بزرگ‌تری نیاز داشته باشد ناموفق خواهد بود\&. این مقدار در حالت عادی نیازی به تغییر ندارد، اما در صورتی که از مخزنی با تعداد فوق‌العاده زیادی از ارجاع‌ها دریافت انجام می‌دهید می‌تواند مفید باشد\&. این مقدار را می‌توان همراه با یک واحد مشخص کرد (به عنوان مثال، \fB100M\fR برای ۱۰۰ مگابایت)\&. مقدار پیش‌فرض ۱۰ مگابایت است\&. .sp کلاینت‌ها ممکن است با استفاده از هدر HTTP با نام \fBGit\-Protocol\fR قابلیت‌های اختیاری پروتکل (مانند پروتکل v2) را بررسی کنند\&. به منظور پشتیبانی از این قابلیت‌ها، محتویات آن هدر باید در متغیر محیطی \fBGIT_PROTOCOL\fR ظاهر شود\&. اکثر وب‌سرورها این هدر را از طریق متغیر \fBHTTP_GIT_PROTOCOL\fR به CGI ارسال می‌کنند و \fBgit\-http\-backend\fR به‌طور خودکار آن را در \fBGIT_PROTOCOL\fR کپی خواهد کرد\&. با این حال، برخی از وب‌سرورها ممکن است در انتخاب هدرهایی که ارسال می‌کنند گزینشی‌تر عمل کنند، که در این صورت باید به‌طور صریح پیکربندی شوند (به ذکر \fBGit\-Protocol\fR در پیکربندی آپاچی در بخش مثال‌ها در بالا مراجعه کنید)\&. .sp فرآیند بک‌اند متغیر GIT_COMMITTER_NAME را روی \fI$REMOTE_USER\fR و GIT_COMMITTER_EMAIL را روی \fI${REMOTE_USER}@http\&.${REMOTE_ADDR}\fR تنظیم می‌کند، و بدین ترتیب تضمین می‌نماید که هرگونه reflog ایجادشده توسط \fIgit\-receive\-pack\fR حاوی اطلاعات هویتی کاربری دوردستی باشد که ارسال (push) را انجام داده است\&. .sp تمام متغیرهای محیطی \fBCGI\fR برای هر یک از قلاب‌ها (hooks) که توسط \fIgit\-receive\-pack\fR فراخوانی می‌شوند در دسترس هستند\&. .SH "همچنین ببینید (SEE ALSO)" .sp \fBgit\fR(1), \fBgit-daemon\fR(1), \fBgithooks\fR(5), \fBgitnamespaces\fR(7) .SH "گیت (GIT)" .sp بخشی از مجموعه \fBgit\fR(1)