使用Gitolite搭建Gitserver

? ? ? ???Gitolite是一款Perl語言開發的Git服務管理工具。通過公鑰對用戶進行認證。并可以通過配置文件對些操作進行基于分支和路徑的精細控制。

Gitolite採用的是SSH協議而且使用SSH公鑰認證。因此不管是管理員還是普通用戶。都須要對SSH有所了解。Gitolite的官網是:https://github.com/sitaramc/gitolite。以下就來細說使用Gitolite搭建Gitserver的過程吧。

? ? ? ? ?硬件需求:Ubuntu電腦(或虛擬機)。正常網絡訪問。

? ? ? ? ?軟件需求:git-core,gitolite, openssh-server, git-daemon-run(ubuntu),msysgit(windows)

? ? ? ? ?Gitolite的搭建過程中,Gitweb、Apache不是必須的,Gitweb、Apache跟Gitolite一起使用。看到的效果類似于?http://git.chromium.org/gitweb/。

1. 安裝配置Gitserver(IP:10.203.138.129)

???????? 安裝Git和openssh。

?????????$ sudo apt-get install git-core openssh-server

?????????新建用戶git,該用戶作為全部代碼倉庫和用戶權限的管理者。

?????????$ sudo groupadd git

???????? $ sudo useradd git –g git –m

???????? $ sudo passwd git?(須要設置用戶git的password)


2. 下載gitolite

???????? 初始化server的全局設置,為安裝gitolite做準備。

在不論什么一臺機器上使用git。第一次必需要先設置user.name和user.email。

?????????$ git config --global user.name “david”

???????? $ git config --global user.email “david@server-pc”(name和email任意)

???????? 安裝一下python的setup tool。

?????????$ sudo apt-get install python-setuptools

???????? 獲取gitolite包。

?????????$ git clone https://github.com/sitaramc/gitolite.git(或者到網上下載相應的gitolite)

? ? ? ??當然,我們也能夠使用包管理器進行安裝。

? ? ? ??$ sudo aptitude install gitolite


3. 配置gitolite

???????? 在git管理員的PC上,先安裝msysgit(windows系統)。安裝后,打開gitbash。執行例如以下命令生成管理員密鑰:

?????????$ ssh-keygen –t rsa

?????????執行以上命令后。能夠默認提示直接回車。回車后在當前用戶文件夾下生成了.ssh/id_rsa和.ssh/id_rsa.pub。

當中.ssh/id_rsa是私玥,.ssh/id_rsa.pub是公鑰。接下來能夠使用例如以下命令將git管理員的公鑰上傳到gitserver。也能夠直接復制到gitserver。

?????????$ scp xxx/.ssh/id_rsa.pub webgod@10.203.138.129:/tmp/admin.pub


? ? ? ???回到Gitserver上。

?????????$ sudo chmod a+r /tmp/id_rsa.pub

? ? ? ???運行Gitolite安裝。

? ? ? ???$ gl-setup /tmp/admin.pub

?????????Initialized empty Git repository in /home/repo/gitolite-admin.git/

Reinitialized existing Git repository in /home/repo/gitolite-admin.git/

?????????Gitolite是通過一個git倉庫來管理配置文件。倉庫放在/home/git/repositories/gitolite-admin.git。

???????? 設置git倉庫權限

?????????$ sudo chown git:git /home/git/repositories

???????? $ sudo chmod 755 /home/git/repositories

???????? $ sudo chmod 755 /home/git/repositories/gitolite-admin.git/hooks/post-update



4. 在server上新建測試項目倉庫

???????? 在server上新建一個空的項目倉庫可。叫“test”。

???????? 切換到git用戶:

?????????$ su – git

???????? $ cd repositories

???????? $ git init --bare test.git

???????? $ exit

?????????到這里,test僅僅是一個空倉庫。它是不能clone下來的。

為了能做clone,必須先讓管理員或有權限的人放一個初始化的版本號到倉庫中。

所以,我們必須先改動一個gitolite-admin。


5. 管理gitolite的配置文件

???????? Gitolite本身的配置也是通過git來實現的。

在剛剛上傳公鑰的機器上,把gitolite-admin.git這個倉庫clone下來,就能夠以管理員的身份改動配置了。

???????? 新建一個目錄,如git129:

?????????$ mkdir git129

???????? $ cd git129

???????? $ git clone git@10.203.138.129:gitolite-admin.git(或使用全路徑)

???????? 注:訪問git用戶倉庫的默認路徑是/home/git/repositories/

?????????$ cd gitolite-admin

?????????該文件夾下的keydir文件夾是用來存放全部須要訪問gitserver的用戶的ssh公鑰。

各個用戶依照前面提到的辦法生成各自的ssh公鑰文件后,把全部人的ssh公鑰文件按名字又一次命名一下,然后復制到keydir文件夾下,然后改動gitolite.conf文件,做對應的配置:

?????????[gitolite]

???????? [group gitolite-admin]

???????? writable = gitolite-admin

???????? members = david@DAVID-PC ?tom@TOM-PC

???????? [group team]

???????? writable = test

???????? members = david@DAVID-PC ?tom@TOM-PC ?pitter@PITTER-PC

?????????這個配置文件表達了例如以下含有:gitolite-admin組成員有david,tom,該組對gitolite-admin倉庫有讀寫權限;test組有david,tom,pitter三個成員,該組對test倉庫有讀寫權限。眼下這些配置文件的改動僅僅是在本地,必須推送到遠程的gitserver上才干真正生效。

???????? 增加新文件、提交并push到Gitserver:

?????????$ git add .

???????? $ git commit –m “add test and someusers”

???????? $ git push origin master

? ? ? ???$ sudo chmod a+r /tmp/id_rsa.pub


6. 初始化測試項目

???????? 如今server搭建完成,而且有一個空的項目test在server上。接下來,須要測試一下,空倉庫是不能clone的。所以須要某個有寫權限的人初始化一個版本號。

在client運行:

?????????$ mkdir test-ori

???????? $ cd test-ori

???????? $ git init?(在client運行,初始化一個本地的版本號庫)

?????????$ echo “/* add something */” > hello.c

???????? $ git add .

???????? $ git commit –m “initial version”

???????? $ git remote add origin git@10.203.138.129:test.git

???????? $ git push origin master

?????????到此為止,test已經有了一個版本號了,team的其它成員僅僅要先clone一下test倉庫就能夠了。并且gitolite.conf中賦予的讀寫權限。


7. 加入已有git項目

???????? 假設想將一個現成的git倉庫,放到Gitserver上供team使用(比方clone了一個官方的kernel倉庫,想在內部使用它作為基礎倉庫)。能夠這樣操作:

???????? 首先須要從你的工作倉庫中得到一個純倉庫。比方你的工作文件夾為~/kernel,你想將該純倉庫復制到Gitserver上使用。Gitserver的管理員拿到這個純倉庫(~/kernel)后,將其復制到/home/repo/下,同一時候配置gitolite相關配置文件。比方說:下載ALSA庫。

?????????$ git clone git://android.git.kernel.org/platform/external/alsa-lib.git

?????????$ git clone git://android.git.kernel.org/platform/external/alsa-utils.git

?????????生成bare庫:

?????????$ git clone --bare alsa-lib alsa-lib.git

???????? $ git clone --bare alsa-utils alsa-utils.git

?????????將bare庫移動到Gitserver文件夾:

?????????$ cp alsa-lib.git /home/repo

? ? ? ???注意變更全部者。以獲取提交權限。

? ? ? ???$ chown -R git alsa-lib.git


8. Gitweb和Git Daemon的支持


? ? ? ???Gitolite和Gitweb的整合提供了兩個方面的內容。一個是能夠設置版本號庫的描寫敘述信息,用于在Gitweb項目列表中顯示。還有一個則是自己主動生成項目的列表文件共Gitweb參考,避免Gitweb使用低效率的文件夾遞歸搜索查找Git版本號庫列表。

能夠在授權文件里設定版本號庫的描寫敘述信息,并在gitolite-admin管理庫更新時創建到版本號庫的description文件里。
? ? ? ???repo name = "one line of description"
? ? ? ???repo name "owner name" = "one line of description"
? ? ? ???第一行為名為reponame的版本號庫設定描寫敘述。
? ? ? ???第二行同一時候設定版本號庫的屬主名稱,以及一行版本號庫描寫敘述。

? ? ? ???對于通配符版本號庫。使用這樣的方法就不現實了。Gitolite提供了SSH子命令共版本號庫的創建者使用。
? ? ? ???$ ssh git@server setdesc path/to/repo.git
? ? ? ???$ ssh git@server getdesc path/to/repo.git
? ? ? ???第一條指令用于設置版本號庫的描寫敘述信息。
? ? ? ???第二條指令顯示版本號庫的描寫敘述信息。

? ? ? ???Git服務由git-daemon的服務軟件提供。

盡管git-daemon能夠支持寫操作,但由于git-daemon沒有提供認證支持。因此非常少人會配置git-daemon來提供匿名的寫服務。

使用git-daemon提供的Git版本號庫僅僅讀服務效率非常高。

故,git-daemon一直是Git版本號庫僅僅讀服務的首選。

? ? ? ???假設想使用git協議,那么就須要安裝git-daemon。

?????????$ sudo apt-get install git-daemon-run

?????????編輯git-daemon配置文件:

?????????$ sudo gedit /etc/sv/git-daemon/run

? ? ? ??

?????????#!/bin/bash

???????? exec2>&1

???????? echo‘git-daemon starting.’

???????? execchpst -ugitdaemon

?????????????????? “$(git--exec-path)”/git-daemon --verbose?--export-all--enable=receive-pack --enable=upload-pack --enable=upload-archive?--reuseaddr --base-path=/home/webgod/? ? ??


?????????說明:

???????? --base-path????? 指向Gitserver的根文件夾

???????? --enable=receive-pack

???????? --enable=upload-pack

???????? --enable=upload-archive

???????? 以上三個是與git-clone,git-push。git-pull相關的。

查看詳情使用命令:$ man git-daemon查看。

????????

???????? 重新啟動gitserver:

?????????$ sudo sv restart git-daemon


? ? ? ? ?在Gitserver上:

?????????$ cd /home/webgod

???????? $ mkdir RepoServer

???????? $ cd RepoServer

???????? $ git init --bare manifest.git

????????

?????????切換到其它文件夾:

?????????$ cd ~/test

???????? $ git clonegit://127.0.0.1/RepoServer/manifest.git

?????????(è $ git clone git@127.0.0.1:/home/webgod/RepoServer/manifest.git)

???????? 這里就實現了所謂的“匿名訪問”。



轉載于:https://www.cnblogs.com/claireyuancy/p/7229837.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371658.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371658.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371658.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java任務分支和合并_合并/分支戰略

我會給出與Adarsh Shah相同的建議,因為在大多數情況下,2個分支(MAIN,RELEASE)就足夠了,并且使用feature branches用于你不想立即提交到MAIN的東西,因為它需要一段時間才能完全準備好測試 . 通過RELEASE,我指…

Spring安全:防止暴力攻擊

Spring Security可以為您做很多事情。 帳戶被封鎖,密碼鹽。 但是蠻力阻斷劑呢? 那是你必須自己做的。 幸運的是,Spring是一個非常靈活的框架,因此對其進行配置并不是什么大問題。 讓我向您展示一些如何針對Grails應用程序執行…

NopCommerce計劃任務

NopCommerce計劃任務轉載于:https://www.cnblogs.com/chenjz/p/6293210.html

簡單談談js中的MVC

MVC是什么? MVC是一種架構模式,它將應用抽象為3個部分:模型(數據)、視圖、控制器(分發器)。 本文將用一個經典的例子todoList來展開(代碼在最后)。 一個事件發生的過程&a…

BTrace:Java開發人員工具箱中的隱藏寶石

這篇文章是關于BTrace的 ,我正在考慮將其作為Java開發人員的隱藏寶藏。 BTrace是用于Java平臺的安全,動態跟蹤工具。 BTrace可用于動態跟蹤正在運行的Java程序(類似于DTrace,適用于OpenSolaris應用程序和OS)。 不久&am…

python 圖片轉視頻ffmpeg_python圖片轉視頻(opencv),ffmpeg壓縮視頻

要注意:1. 圖片傳視頻要自己設置幀率和分辨率2.讀取圖片后分辨率要resize為和視頻分辨率一樣才可以3.寫完.avi視頻后視頻比較大,用ffmpeg將avi視頻壓縮為mp4import cv2from cv2 import VideoWriter, VideoWriter_fourcc, imread, resizeimport osfrom su…

門面模式

門面模式的定義 門面模式(Facade Pattern)也叫做外觀模式,是一種比較常用的封裝模式,其定義如 下: Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface tha…

Mysql數據庫申請

前段時間大部門下新成立了一個推廣百度OCR、文字識別、圖像識別等科技能力在金融領域應用的子部門。因為部門剛成立,基礎設施和人力都是欠缺的。當時分到我們部門的任務是抽調一個人做新部門主站前端開發工作。本來說的是只負責頁面的開發工作。當我參加過需求品審會…

Spring–添加SpringMVC –第2部分

在上一部分中,我們為經理和員工實現了控制器。 既然我們知道了解決方法,我們將做很少(但僅做很少)更復雜的事情–任務和時間表的控制器。 因此,讓我們從org.timesheet.web開始。 TaskController 。 首先創建一個類&…

php 正則分隔_探討PHP函數split()如何使用正則表達式切割字符串

對于初學者來說,掌握PHP中常用函數的用法,是其繼續學習的基礎。今天我們就為大家詳細介紹有關PHP函數split()的一些使用方法,希望大家能通過這篇文章介紹的內容增加自己的知識庫。說明array split ( string $pattern, string $string [, int …

通用的ProtostuffSerializer for Java

以前使用 protobuf或protostuff的時候覺得很麻煩,每個類都要單獨定制,于是封裝了一個類。 同事測試過,性能和壓縮率都很好,尤其是相比json的序列化。 需注意:只支持Pojo類(即需要有get/set方法)…

SAS筆記(6) PROC MEANS和PROC FREQ

PROC MEANS和PRC FREQ在做描述性分析的時候很常用,用法也比較簡單,不過這兩個過程步的某些選項容易忘記,本文就梳理一下。 在進入正文前,我們先創建所需的數據集TEST_SCORES: DATA TEST_SCORES; INPUT COUNTY : $9. SC…

休眠:保存vs持久并保存或更新

save和saveOrUpdate之間的區別是什么或save和persist之間的區別是任何Hibernate面試中常見的面試問題,就像Hibernate中get和load方法之間的區別一樣。 Hibernate Session類提供了幾種通過save , saveOrUpdate和persist等方法將對象保存到數據庫中的方法。…

php搜索數據庫設計,PHP數據庫搜索功能設計

其實搜索功能的設計很簡單,幾行代碼就可以完成。下面是form表單。從表單發出的數據名為search,然后發送到../admin/article_SearchResult.php這個文件處理。下面講下article_SearchResult.php這個文件如何實現搜索。$searchs $_POST[‘search‘];?>…

2016 Android Top 10 Library

過去的 2016 年,開源社區異常活躍,很多個人與公司爭相開源自己的項目,讓人眼花繚亂,然而有些項目只是曇花一現,有些項目卻持久創造價值,為開發者提供了極大的便利,這些終究由時間來判斷。今天&a…

集成JavaFX和Swing

我剛剛完成了對使用Swing的應用程序組件的重寫,現在正在使用JavaFX,最后得到了與更大的swing應用程序集成的JavaFX組件。 這是一個很大的應用程序,重寫花了我一段時間,最后一切都很好,我很高興自己做到了。 您可能想在…

提示錯誤:“應為“providerInvariantName”參數的非空字符串。”

我在調試Petapoco的T4模版的時候&#xff0c;鏈接一直報如題那個錯誤。在定性問題為配置文件后找的原因如下&#xff1a; <connectionStrings><add name"這個不行" connectionString"Data Sourcexxx;Initial Catalog數據庫名;User ID帳號;Password密碼…

php oop面試題,PHP面試題 - 對面向對象的理解

具體的題目應該是&#xff1a;什么是面向對象&#xff1f;主要的特征是什么&#xff1f;當然還有很多類似的題目&#xff0c;如果你說一下你對面向對象的理解&#xff0c;或者是你對比一下面向過程等等&#xff0c;諸如此類吧&#xff1f;如果我來回答這個問題&#xff0c;我會…

NOIP2014自測(晚自習兩節+上午兩節 共5個小時)

昨天剛剛考完試然后就翹晚自習跟今天上午兩節課的語文和英語做做noip2014的題目。然后去評測了一番。首先day1day2的t1基本都是模擬&#xff0c;一看就出思路那種&#xff0c;直接ac掉。代碼如下 day1t1&#xff1a;#include<iostream>#define maxn 209using namespace s…

您在eXo平臺上的第一個Juzu Portlet

菊珠是佛教的佛珠。 一句話&#xff0c;我相信您已經學到了什么&#xff0c;印象深刻嗎&#xff1f; 好的&#xff0c;我在這里不談論佛教。 Juzu還是一個用于快速開發Portlet&#xff08;以及即將推出的獨立應用程序&#xff09;的新框架。 您可以在Juzu網站上找到所需的所有…