服務器搭建翻墻,使用 Gitolite 搭建 Git 服務器

 2023-10-08 阅读 28 评论 0

摘要:Gitolite 是在 Git 之上的一個授權層,依托 sshd 或者 httpd 來進行認證。(認證是確定用戶是誰,授權是決定該用戶是否被允許做他想做的事情)。 通過 Gitolite 你可以設置訪問權限,不只作用于倉庫,還可以作用到每個 branch 和 tag n

Gitolite 是在 Git 之上的一個授權層,依托 sshd 或者 httpd 來進行認證。(認證是確定用戶是誰,授權是決定該用戶是否被允許做他想做的事情)。

通過 Gitolite 你可以設置訪問權限,不只作用于倉庫,還可以作用到每個 branch 和 tag name。你可以定義確切的人(或一組人)只能 push 特定的 "refs" (或者 branches 或者 tags )。

寫在前面

如果你熟悉 Git 和 SVN 的區別,相信你不會認為 Git 服務器有多復雜。而事實上,搭建一個無需授權管理的Git服務器確實很簡單。因為這個服務器僅僅是一個遠程裸倉庫(無工作區),用來作為24小時開機的交換中心而已。如果你的需求如此簡單,推薦學習 廖雪峰 《Git 教程》中的 搭建 Git 服務器 一節。

如果你還沒離開,那接下來,我們聊聊 Git 的權限管理這點事兒。Git 本身是不支持權限控制的,可能它也不想這么做。由于 Git 支持鉤子(hook),因此可以在服務器端編寫一系列腳本來控制 Git 的各種操作,達到權限控制的目的。

服務器搭建翻墻。Gitolite 只是 Git 權限管理工具中的一種,具有同樣功能的還有:

  • GitLab 可以說是 GitHub 的開源版本,一開始是使用 Gitolite 作為授權管理的解決方案,后來因為兩個項目的開發和同步等方面出現問題,在2013年2月,GitLab 宣布與 Gitolite 分道揚鑣。總之,GitLab 是一個重量級的版本,要使用它,你需要安裝很多額外的軟件,如 PostgreSQL, Redis, Sidekiq, Unicorn, nginx and gitlab-shell 等。所以說,它是資源密集型的,但功能確實強大,也更有利于開發團隊的高效率協作,比較適合大型團隊。

  • Gitosis 和 Gitolite 沒什么區別,只是這個項目已經停止維護了,所以我也懶得去費時間進行了解,這里只是提一下。

  • 其他 肯定會有其他的解決方案,只是我覺得知道以上的就足夠了。

簡單介紹

到現在我們也只是知道,Gitolite 是一款 Git 授權管理工具,那么它具體是怎樣的呢?我們姑且從它的幾個特性來簡單了解下:

  • 服務器搭建ftp服務,在服務器端,使用一個 unix 用戶作為遠程訪問的對象

  • 為多用戶提供訪問權限,但他們不是真正的用戶,不會獲得 shell 權限

  • 控制對多個 git 倉庫的訪問,讀訪問被repo層控制,寫訪問在 branch/tag/file/directory 層控制,包括誰能夠 rewind,create 以及 delete branches/tags

  • 能夠不經過root允許進行安裝,假設git和perl已經被安裝了 (這句話不懂,暫時直譯過來)?

  • 認證通常采用sshd,但是也可以使用httpd

  • 搭建自己的linux服務器?能夠簡化你的倉庫路徑,類似 GitHub 那樣,例如:git@your_server.com:your-project.git

開始搭建

  1. (服務端) 切換到 root 身份

    `su - root`
    
  2. (服務端) 安裝依賴

    `apt-get install git-core ssh`
    
  3. (服務端) 創建一個用戶供 Gitolite 使用:

    `useradd --system --shell /bin/bash --create-home git`
    
  4. (服務端) 設置密碼

    `passwd git`
    
  5. 搭建虛擬服務器,(客戶端) 生成 SSH 公鑰并復制到服務器的 git 家目錄

    `cd ~`  `ssh-keygen`  `scp ~/.ssh/id_rsa.pub git@your_server:admin.pub`
    
  6. (服務端) 安裝 Gitolite

    `su - git``mkdir bin``git clone git://github.com/sitaramc/gitolite.git``~/gitolite/install -to ~/bin`\# 將你的公鑰 admin.php 設置為 Gitolite 超級管理員  
    `~/bin/gitolite setup -pk ~/admin.pub` 
    
  7. (客戶端) 克隆神奇的授權管理倉庫

    \# 如果克隆成功,說明 Git 服務器已經搭建完成。  
    `git clone git@your_server:gitolite-admin` 

使用方法

  1. 添加 Gitolite 項目成員

    將項目成員通過 ssh-keygen 命令生成的公鑰文件重命名成唯一標識的文件,如macken.pub,然后放到 gitolite-admin/keydir 目錄下,addcommitpush之后,這樣新成員就算加入了。新成員默認可以克隆任何沒有被權限控制的倉庫,如 Gitolite 自帶的 "testing"。

  2. 路由器搭建web服務器,創建 Gitolite 項目倉庫

    倉庫的創建不需要你登錄服務端,只需要用編輯器打開 gitolite-admin/conf/gitolite.conf,加入兩行:

    repo new_repo

    RW = macken

    然后將變動提交到服務器,遠程的 Gitolite 就會自動幫你創建好一個空倉庫并分配給 macken 讀寫的權限。是不是很方便?

  3. git服務器。項目授權管理

    • 要方便的進行授權,那就有必要將項目的成員分組:

      @admins = macken steven

      @interns = ashok

      @engineers = macken steven wally alice

      境外服務器搭建。@staff = @admins @engineers

    • 可以對倉庫的分支和標簽進行正則匹配授權:

      repo @oss_repos

      RW int$ = @interns

      RW eng- = @engineers

      自建web服務器。RW refs/tags/rc[0-9] = @engineers

      RW+ = @admins

      interns 組只能對以 “int“ 結尾的分支有讀寫權限;

      engineers 組可以對以 “eng-“ 開頭的分支以及該倉庫的 “rc[0-9]“ 的標簽分支有讀寫權限;

      admins 組則對本倉庫所有的分支有讀寫權限,而且 “+” 代表可以有強推的權限。

      git搭建。其它更詳盡的授權設置請參閱 官方文檔

寫在最后

Git 是極具開源精神的分布式版本控制系統,但并不意味著在 Git 基礎上加上授權控制是有什么不妥,目的不在于防著誰,而在于明確職責劃分,方便協調管理,避免因為任何人都可以接觸所有代碼而產生不必要的麻煩。就像 GitHub 那樣,任何人都可以 fork 別人的項目,從而生成一個分支到自己的倉庫,但你無法直接操作別人的 master 分支,只能由項目的創建者根據你提交的 PR 來進行 merge。這樣,才是一個有秩序的開源實踐。

最后,推薦一篇關于 Git Workflow 的經典老文:A successful Git branching model。

原文鏈接: https://macken.me/article/use...

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/131636.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息