gitosis vs gitolite? [ปิด]


139

ฉันกำลังมองหาการติดตั้งเซิร์ฟเวอร์ git เพื่อแบ่งปันโครงการกับทีมของฉัน ฉันไม่ต้องการสร้างบัญชีผู้ใช้บนเซิร์ฟเวอร์ด้วยการเข้าถึง SSH สำหรับนักพัฒนาแต่ละคนที่ต้องการการเข้าถึงคอมไพล์ ดูเหมือนว่ามีวิธีแก้ไขพร้อมกันสองรายการที่ครอบคลุมปัญหานี้: gitosis & gitolite

ฉันไม่พบการเปรียบเทียบระหว่างโซลูชันทั้งสอง อะไรคือความแตกต่างที่สำคัญระหว่างพวกเขา มีวิธีแก้ไขปัญหาอื่นที่คล้ายคลึงกันหรือไม่

คำตอบ:


191

ฉันกำลังมองหาการติดตั้งเซิร์ฟเวอร์ git เพื่อแบ่งปันโครงการกับทีมของฉัน

คุณสามารถเพียงแค่ใช้คอมไพล์

ในการมีเซิร์ฟเวอร์ git สิ่งเดียวที่คุณต้องการบนเซิร์ฟเวอร์ระยะไกลคือ git หากคุณไม่ต้องการการอนุญาตที่ละเอียด (การแบ่งปันกับทีมของคุณเท่านั้นที่แนะนำว่าเป็นไปได้) หรือฟีเจอร์พิเศษใด ๆ คุณไม่จำเป็นต้องมี gitolite หรือสิ่งที่คล้ายกัน

ทางออกที่ไม่ได้ติดตั้ง

ถ้า git นั้นมีอยู่บนรีโมตเซิร์ฟเวอร์คุณสามารถทำสิ่งที่คุณต้องการได้ทันทีโดยไม่ต้องทำอะไรเลย

ssh [user@]server
cd repos/are/here/
mkdir project.git
cd project.git
git init --bare

ท้องที่:

cd projects/are/here/project
git remote add origin [user@]server:repos/are/here/project.git
git push -u origin master

การตั้งค่าเซิร์ฟเวอร์ git นั้นง่ายมาก

ถ้าคุณต้องการทำสิ่งต่าง ๆ กับผู้ใช้ git โดยเฉพาะเอกสารสำหรับการตั้งค่าเซิร์ฟเวอร์ gitนั้นสั้น - เพราะมันง่ายมากที่จะทำ

สรุป:

  • ติดตั้ง git
  • สร้างผู้ใช้ชื่อ git
  • เพิ่มกุญแจสาธารณะของคุณและทีมของคุณไปยัง.ssh/authorized_keysไฟล์ของผู้ใช้คอมไพล์
  • เปลี่ยนเชลล์ผู้ใช้ git เป็น git-shell
  • สร้าง repos บนเซิร์ฟเวอร์
  • เริ่ม git pull / push ไปที่ git@yourserver.com

เพียงความแตกต่างระหว่างการใช้ผู้ใช้คอมไพล์ทุ่มเทและไม่ได้คือว่าถ้าคุณตั้งค่าผู้ใช้คอมไพล์ที่จะใช้git-shellมันจะไม่อนุญาตให้ตัวเองไปทำอะไรอย่างอื่น ในแง่ของการทำหน้าที่เป็นเซิร์ฟเวอร์คอมไพล์มันก็เหมือนกับโซลูชั่นที่ไม่ได้ติดตั้ง


13
หลังจากติดตั้งสัตว์ร้ายนั่นคือ GitLab + Gitolite หากคุณไม่ต้องการการควบคุมอย่างละเอียดในโครงการอื่น ๆ นี่คือวิธีที่จะไป
Andrew T Finnell

ขอบคุณสำหรับคำตอบนี้! จริง ๆ แล้วเมื่อฉันบอกว่าฉันไม่ต้องการสร้างบัญชีผู้ใช้สำหรับแต่ละฉันควรได้กล่าวว่าฉันไม่ต้องการให้ผู้ใช้ git ของฉันสามารถเข้าถึงเชลล์เซิร์ฟเวอร์ผ่าน ssh ด้วยโซลูชันของคุณฉันคิดว่าพวกเขาจะสามารถเข้าถึงเชลล์ผ่านผู้ใช้ "git" ใช่ไหม?
greydet

2
@wsams: git push -u origin masterและคุณสามารถใช้งานได้git pushหลังจากนั้น ฉันชอบ gito * เพราะในความคิดของฉันไม่มีใครเข้าถึง repo ควรจะใส่ใจเกี่ยวกับเส้นทางที่แน่นอนที่มีอยู่ในระบบระยะไกล
ThiefMaster

8
@ThiefMaster ลองเดาดูว่าคุณหมายถึงอะไรถ้าคุณใส่ repos ใน/home/git/url เพื่อเข้าถึงโปรเจ็กgit@server:project.gitต์
AD7six

1
@wsams อ่านส่วนนี้ของคำตอบ "เปลี่ยนเชลล์ผู้ใช้ git เป็น git-shell"
fabspro

142

ความแตกต่างที่สำคัญคือตอนนี้ gitosis ล้าสมัยและไม่ได้รับการบำรุงรักษาอีกต่อไป

Gitolite มากคุณลักษณะที่สมบูรณ์มากขึ้นและเพิ่งเปิดตัวรุ่นที่สาม

คุณลักษณะที่น่าสนใจที่สุดคือVirtual Reference (VREF for short)ซึ่งช่วยให้คุณประกาศhook การอัพเดตได้มากเท่าที่คุณต้องการซึ่งช่วยให้คุณสามารถ จำกัด การพุชโดย:

  • dir / ชื่อไฟล์ :
    สมมติว่าคุณไม่ต้องการให้ผู้พัฒนารุ่นเยาว์ผลักดันการเปลี่ยนแปลงไปยัง Makefile เพราะมันค่อนข้างซับซ้อน:
    - VREF/NAME/Makefile = @junior-devs

  • จำนวนไฟล์ใหม่ :
    สมมติว่าคุณไม่ต้องการให้นักพัฒนารุ่นเยาว์ผลักดันไฟล์มากกว่า 9 ไฟล์ต่อการคอมมิชชันเพราะคุณต้องการให้คอมมิชชันขนาดเล็ก :
    - VREF/COUNT/9/NEWFILES = @junior-devs

  • การตรวจจับประเภทไฟล์ขั้นสูง :
    บางครั้งไฟล์มีนามสกุลมาตรฐาน (ซึ่งไม่สามารถเป็น 'gitignore'd) ได้ แต่มันถูกสร้างขึ้นโดยอัตโนมัติจริง ๆ นี่คือวิธีหนึ่งในการตรวจจับ:
    - VREF/FILETYPE/AUTOGENERATED = @all
    ดูsrc/VREF/FILETETYPEเพื่อดูกลไกการตรวจจับ

  • ตรวจสอบอีเมลผู้เขียน :
    บางคนต้องการให้แน่ใจว่า "คุณสามารถผลักดันการกระทำของคุณเอง" ดู
    - VREF/EMAIL-CHECK = @all
    src/VREF/EMAIL-CHECK

  • การออกเสียงลงคะแนนในการกระทำ : การดำเนินการขั้นพื้นฐานของการออกเสียงลงคะแนนในการกระทำที่น่าแปลกใจเป็นเรื่องง่าย:

    - VREF/EMAIL-CHECK = @all
    # 2 votes required to push master, but trusted devs don't have this restriction
    # RW+ VREF/VOTES/2/master = @trusted-devs
    # - VREF/VOTES/2/master = @devs
    ดูsrc/VREF/VOTESการใช้งาน

  • และอื่น ๆ ...


3
ฉันใช้ Gitolite มานานกว่า 3 ปีแล้ว ไม่เคยมีปัญหาใด ๆ กับมัน ฉันเซิร์ฟเวอร์การผลิตและการจัดเตรียมของเรามีการเข้าถึง repos แบบอ่านอย่างเดียวที่จำเป็น และเป็นเรื่องง่ายที่จะแบ่งปันโครงการกับทีมพัฒนาอื่น ๆ นอกจากนี้มันเป็นเรื่องง่ายที่จะติดตั้งถ้าคุณรู้ว่ายูนิกซ์และคอมไพล์แล้ว :)
complistic

เอกสารของ Gitolite รวมถึงการเปรียบเทียบกับทางเลือก: gitolite.com/gitolite/gitolite.html#alt
Quinn Comendant

15

เพียง sidenote คุณสามารถใช้Gerritสำหรับความต้องการของคุณ:

Gerrit Code Review

ครั้งแรกดูเหมือนว่า Gerrit จะใช้สำหรับการตรวจสอบโค้ด แต่คุณสามารถใช้งานได้จริงในการจัดการผู้ใช้และให้การอนุญาตที่ดีแก่พวกเขา คุณสามารถข้ามการตรวจสอบโค้ด ( การควบคุมการเข้าถึงรางน้ำ) และใช้เพื่อจัดการโครงการและ ssh-keys เท่านั้น Gerrit มีกลไกการควบคุมการเข้าถึงที่ดีมาก:

การควบคุมการเข้าถึงของ Gerrit

คุณสามารถ จำกัด การผลักดันให้กับสาขาแท็กหรือสิ่งใดก็ตามที่คุณนึกออกซึ่งกำหนดไว้ในเอกสารการควบคุมการเข้าถึง


8

สำหรับการแก้ปัญหาที่รวดเร็วและสกปรกยิ่งขึ้นเพียงใช้git daemonและ go-to-peer นี่คือบทความเกี่ยวกับการทำเช่นนั้น

แก้ไข: ฉันรู้ว่านี่ไม่ได้ตอบคำถามของ OP อย่างเคร่งครัด ฉันใส่สิ่งนี้ไว้ที่นี่เป็นหลักสำหรับคนเช่นฉันที่เจอสิ่งนี้ในขณะที่มองหาวิธีที่แย่และสกปรกในการแชร์รหัสจนกว่าจะมีการตั้งค่าบัญชี GitHub ขององค์กร


2

ฉันได้รับ messing รอบในขณะที่ได้รับเซิร์ฟเวอร์ git ทำงานกับการเข้าถึง LDAP, การควบคุมการเข้าถึงอย่างละเอียดเม็ดเล็ก ๆ ... พบการเปิดเผย: ใช้Gitlab :

  • git repositories
  • การเข้าถึงเม็ดเล็กละเอียด (afitik gitlab ใช้ gitolite ใต้ฝากระโปรง)

ถ้าคุณต้องการวิธีการติดตั้งที่รวดเร็วและรวดเร็ว: ใช้ตัวติดตั้ง bitnami


ใช่ แต่ GitLab (กับ gitlab-shell) สูญเสียตะขอ VREF ทั้งหมดที่คุณสามารถตั้งค่าได้อย่างง่ายดายด้วย Gitolite และผู้คนมากมายอยากให้พวกเขากลับมา: github.com/gitlabhq/gitlab-shell/issues/14และgithub.com/gitlabhq/gitlab-shell/pull/85
VonC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.