זהו הפקודה git-http-backend שניתן להריץ בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS
תָכְנִית:
שֵׁם
git-http-backend - הטמעה בצד השרת של Git על HTTP
תַקצִיר
סילון http-backend
תיאור
תוכנית CGI פשוטה לשרת את התוכן של מאגר Git ללקוחות Git שניגשים אליהם
המאגר על פרוטוקולי http:// ו https://. התוכנית תומכת בשליפת לקוחות
משתמש גם בפרוטוקול ה-HTTP החכם וגם בפרוטוקול ה-HTTP המטומטם התואם לאחור, כמו
כמו גם לקוחות שדוחפים באמצעות פרוטוקול HTTP חכם.
זה מוודא שלספרייה יש את קובץ הקסם "git-daemon-export-ok", והוא
לסרב לייצא כל ספריית Git שלא סומנה באופן מפורש לייצוא בדרך זו
(אלא אם הוגדר המשתנה הסביבתי GIT_HTTP_EXPORT_ALL).
כברירת מחדל, רק שירות ה-Upload-pack מופעל, המשרת סילון להביא-חבילה ו סילון
ls-remote לקוחות, אשר מופעלים מ סילון לְהָבִיא, סילון למשוך, ו סילון לשבט. אם
הלקוח מאומת, שירות חבילת קבלת מופעל, המשרת סילון שלח-חבילה
לקוחות, אשר מופעל מ סילון לדחוף.
שירותים
ניתן להפעיל/להשבית שירותים אלה באמצעות קובץ התצורה לכל מאגר:
http.getanyfile
זה משרת לקוחות Git מעל גרסה 1.6.6 שאינם מסוגלים להשתמש בהעלאה
שירות אריזה. כאשר מופעל, לקוחות יכולים לקרוא כל קובץ בתוך המאגר,
כולל חפצים שכבר אינם נגישים מסניף אך עדיין קיימים. זה
מופעל כברירת מחדל, אך מאגר יכול להשבית אותו על ידי הגדרת תצורה זו
פריט לשווא.
http.uploadpack
זה משרת סילון להביא-חבילה ו סילון ls-remote לקוחות. זה מופעל כברירת מחדל, אבל א
המאגר יכול להשבית אותו על ידי הגדרת פריט תצורה זה ל-false.
http.receivepack
זה משרת סילון שלח-חבילה לקוחות, מה שמאפשר דחיפה. זה מושבת כברירת מחדל עבור
משתמשים אנונימיים, ומופעל כברירת מחדל עבור משתמשים המאומתים על ידי שרת האינטרנט. זה
ניתן להשבית על ידי הגדרת פריט זה ל-false, או לאפשר אותו עבור כל המשתמשים, כולל
משתמשים אנונימיים, על ידי הגדרתו כ-true.
כתובת האתר תִרגוּם
כדי לקבוע את מיקום המאגר בדיסק, סילון http-backend משרשרת את
משתני סביבה PATH_INFO, המוגדרים אוטומטית על ידי שרת האינטרנט, ו
GIT_PROJECT_ROOT, שיש להגדיר באופן ידני בתצורת שרת האינטרנט. אם
GIT_PROJECT_ROOT לא מוגדר, סילון http-backend קורא PATH_TRANSLATED, שגם הוא מוגדר
אוטומטית על ידי שרת האינטרנט.
דוגמאות
כל הדוגמאות הבאות ממפות את http://$hostname/git/foo/bar.git אל
/var/www/git/foo/bar.git.
אפאצ'י 2.x
ודא ש-mod_cgi, mod_alias ו-mod_env מופעלים, הגדר את GIT_PROJECT_ROOT (או
DocumentRoot) בצורה מתאימה, וצור ScriptAlias ל-CGI:
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
כדי לאפשר גישת קריאה אנונימית אך גישת כתיבה מאומתת, דרש הרשאה
עבור שני פרסומת ה-Ref הראשונית (שאנו מזהים כדחיפה דרך השירות
פרמטר במחרוזת השאילתה), והזמנת חבילת receiver עצמה:
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/git/ - [E=AUTHREQUIRED:yes]
סדר הכחיש, אפשר
דחה מ-env=AUTHREQUIRED
AuthType בסיסי
AuthName "Git Access"
דורשים מתחייבים לקבוצה
לספק כל
...
אם אין לך mod_rewrite זמין להתאמה מול מחרוזת השאילתה, זה כן
מספיק רק להגן על git-receive-pack עצמו, כמו:
AuthType בסיסי
AuthName "Git Access"
דורשים מתחייבים לקבוצה
...
במצב זה, השרת לא יבקש אימות עד שהלקוח בפועל
מתחיל את שלב המשא ומתן על האובייקט של הדחיפה, ולא במהלך הראשוני
איש קשר. מסיבה זו, עליך להפעיל גם את האפשרות http.receivepack config ב
כל מאגרים שאמורים לקבל דחיפה. התנהגות ברירת המחדל, אם http.receivepack
לא מוגדר, הוא לדחות כל דחיפה של משתמשים לא מאומתים; הבקשה הראשונית תהיה
לכן דווח על 403 אסור ללקוח, מבלי לתת אפילו הזדמנות לכך
אימות.
כדי לדרוש אימות גם לקריאה וגם לכתיבה, השתמש בהנחיית מיקום בסביבה
המאגר, או אחת מספריות האב שלו:
AuthType בסיסי
AuthName "גישה פרטית ל-Git"
דורשים מתחייבים לקבוצה
...
כדי להגיש gitweb באותה כתובת אתר, השתמש ב-ScriptAliasMatch רק לאותן כתובות URL סילון
http-backend יכול לטפל, ולהעביר את השאר ל-gitweb:
ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(העלה|קבל)-pack))$" \
/usr/libexec/git-core/git-http-backend/$1
ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
לשרת מספר מאגרים ממגוון gitnamespaces(7) במאגר יחיד:
SetEnvIf Request_URI "^/git/([^/]*)" GIT_NAMESPACE=$1
ScriptAliasMatch ^/git/[^/]*(.*) /usr/libexec/git-core/git-http-backend/storage.git$1
Apache סטטי מואץ 2.x
בדומה לאמור לעיל, אך ניתן להשתמש ב- Apache כדי להחזיר קבצים סטטיים המאוחסנים
דִיסק. במערכות רבות זה עשוי להיות יעיל יותר שכן Apache יכול לבקש מהקרנל להעתיק
תוכן הקובץ ממערכת הקבצים ישירות לרשת:
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/
ניתן לשלב זאת עם תצורת gitweb:
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 \
"(?x)^/git/(.*/(HEAD | \
info/refs | \
objects/info/[^/]+ | \
git-(העלה|קבל)-pack))$" \
/usr/libexec/git-core/git-http-backend/$1
ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
Lighttpd
ודא ש-mod_cgi, mod_alias, mod_auth, mod_setenv נטענים, ואז הגדר
GIT_PROJECT_ROOT כראוי והפנה מחדש את כל הבקשות ל-CGI:
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" => ""
)
}
כדי לאפשר גישת קריאה אנונימית אך גישת כתיבה מאומתת:
$HTTP["querystring"] =~ "service=git-receive-pack" {
כלול "git-auth.conf"
}
$HTTP["url"] =~ "^/git/.*/git-receive-pack$" {
כלול "git-auth.conf"
}
איפה git-auth.conf נראה משהו כמו:
auth.require = (
"/" => (
"שיטה" => "בסיסי",
"realm" => "Git Access",
"require" => "משתמש חוקי"
)
)
# ...והגדר כאן Auth.backend
כדי לדרוש אימות גם לקריאה וגם לכתיבה:
$HTTP["url"] =~ "^/git/private" {
כלול "git-auth.conf"
}
הסביבה
סילון http-backend מסתמך על משתני סביבת CGI שנקבעו על ידי שרת האינטרנט המעורר,
ובכלל זה:
· PATH_INFO (אם מוגדר GIT_PROJECT_ROOT, אחרת PATH_TRANSLATED)
· REMOTE_USER
· REMOTE_ADDR
· סוג תוכן
· QUERY_STRING
· REQUEST_METHOD
ניתן להעביר את המשתנה הסביבתי GIT_HTTP_EXPORT_ALL git-http-backend לעקוף
לבדוק את הקובץ "git-daemon-export-ok" בכל מאגר לפני מתן אפשרות לייצוא של
המאגר הזה.
משתנה הסביבה GIT_HTTP_MAX_REQUEST_BUFFER (או התצורה http.maxRequestBuffer
משתנה) עשוי להיות מוגדר כדי לשנות את בקשת המשא ומתן הרפי הגדולה ביותר ש-git יטפל בה
במהלך אחזור; כל אחזור הדורש מאגר גדול יותר לא יצליח. הערך הזה צריך
בדרך כלל לא צריך לשנות, אבל עשוי להיות מועיל אם אתה מביא ממאגר
עם מספר גדול מאוד של שופטים. ניתן לציין את הערך עם יחידה (למשל, 100M
עבור 100 מגה-בייט). ברירת המחדל היא 10 מגה בייט.
תהליך הקצה האחורי מגדיר את GIT_COMMITTER_NAME ל $REMOTE_USER ו-GIT_COMMITTER_EMAIL אל
${REMOTE_USER}@http.${REMOTE_ADDR}, להבטיח שכל רילוגים שנוצרו על ידי git-receive-pack
מכיל מידע מזהה של המשתמש המרוחק שביצע את הדחיפה.
כל משתני סביבת CGI זמינים לכל אחד מה-hooks המופעלים על ידי
git-receive-pack.
GIT
חלק מ סילון(1) סוויטה
השתמש ב-git-http-backend מקוון באמצעות שירותי onworks.net