Gitolite 服務器架設教程

Gitolite 服務器架設教程

適用環境

  • ubuntu 16.04
  • git版本管理
  • gitolite企業輕量級版本管理
  • 沒有代碼提交審覈機制
  • IP: 192.168.1.132

安裝 gitolite

  • 安裝 gitolite

$ aptitude search gitolite

  • 創建專用賬戶 git

$ sudo adduser git

  • 把管理員公鑰準備就緒

$ cp Tony132_admin.pub /tmp/Tony132_admin.pub

  • 創建目錄

$ sudo mkdir -p /usr/share/gitolite/conf /usr/share/gitolite/hooks

  • 下載gitolite源代碼

$ git clone git://github.com/ossxp-com/gitolite.git

  • 執行安裝

$ cd gitolite/src
$ sudo ./gl-system-install /usr/local/bin/ /usr/share/gitolite/conf /usr/share/gitolite/hooks

  • 切換專用git賬戶執行安裝腳本

sudo su git
gl-setup /tmp/Tony132_admin.pub

  • 使用管理員賬戶克隆gitolite-admin庫

su tony
git clone [email protected]:gitolite-admin.git

版本庫基本操作

基於testing.git進行操作

下載遠程版本

初始上傳,需要管理員上傳默認創建master分支,然後就可以進行 push / pull 操作

$ git clone [email protected]:testing.git

$ git config --global push.default simple
選擇這個配置

$ git push

Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 233 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: *** hooks.mailinglist is not set so no email will be sent
remote: *** for refs/heads/master update 0000000000000000000000000000000000000000->9d125e498915bcbdf5f2bf00ff6f1810660d3722
To [email protected]:testing.git
 * [new branch]      master -> master
~/linux/testing$ cat .git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = [email protected]:testing.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

上傳修改

git add file.name
git push
git pull

本地創建遠程分支提交

創建遠程分支,同樣需要管理員身份創建,普通用戶沒有權限

git checkout -b develop

$ git push origin develop
Counting objects: 2, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 229 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: *** hooks.mailinglist is not set so no email will be sent
remote: *** for refs/heads/develop update 0000000000000000000000000000000000000000->4518518abe9a4e5898a564dc1d86c012c4b4c13e
To [email protected]:testing.git
 * [new branch]      develop -> develop

然後執行

$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> develop

git branch --set-upstream-to=origin/develop develop

查看配置文件如下所示

$ cat .git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = [email protected]:testing.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master
[branch "develop"]
	remote = origin
	merge = refs/heads/develop

Git服務器版本管理應用實例

新建一個版本庫上傳到服務器

以管理員身份增加 conf/gitolite.conf

$ vim conf/gitolite.conf
+repo    ai-base
+        RW+     = @admin
+        RW      = @developer
+

在本地提交修改後 ,上傳
gitolite-admin$ git push
Counting objects: 4, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 435 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: *** hooks.mailinglist is not set so no email will be sent
remote: *** for refs/heads/master update 23e01eb692615e898ba761b2d154285c29d25a60->f5f3db17a2e43ed883bce8be263098526c0dfee7
remote: Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/'(sub { <-- HERE .*})'/ at /usr/local/bin/gl-compile-conf line 523.
remote: creating ai-base...
remote: Initialized empty Git repository in /home/git/repositories/ai-base.git/
To [email protected]:gitolite-admin.git
   23e01eb..f5f3db1  master -> master

remote: creating ai-base…
remote: Initialized empty Git repository in /home/git/repositories/ai-base.git/
這個地方就是自動在提交的時候創建一個空的版本庫

查看遠程版本庫的生成情況

$ ssh [email protected]
PTY allocation request failed on channel 0
hello alex, this is gitolite v1.5.4-452-g96775cf running on git 2.7.4
the gitolite config gives you the following access:
    @R_    	gitolite-admin
     R   W 	ai-base
    @R_ @W_	testing
 @C  R   W 	users/alex/[a-zA-Z].*

alex創建私人版本庫 /users/alex/xxx.git

以普通用戶的身份創建屬於用戶本身的版本庫

$ mkdir track
$ cd track/
$ git init
$ git commit --allow-empty
$ git remote add origin [email protected]:users/alex/track.git

$ git push origin master
Initialized empty Git repository in /home/git/repositories/users/alex/track.git/
Counting objects: 2, done.
Writing objects: 100% (2/2), 160 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
remote: *** hooks.mailinglist is not set so no email will be sent
remote: *** for refs/heads/master update 0000000000000000000000000000000000000000->deb7edc7ae01d236e7e33ed16df82abdb53e16d8
To [email protected]:users/alex/track.git
 * [new branch]      master -> master

遷移SVN到GIT

安裝 git-svn

$ sudo aptitude install git-svn

使用svn創建一個本地版本庫

  • 創建一個svn的版本庫
$ sudo mkdir -p /path/to/svn/repos/demo
$ svnadmin create /path/to/svn/repos/demo
  • 下載版本庫
$ svn co file:///path/to/svn/repos/demo svndemo
  • 創建主幹,里程碑和分支
$ cd svndemo/
$ mkdir trunk tags branches
$ svn add *
$ sudo svn ci -m "initialized."
$ svn log
  • 增加內容提交
$ echo hello > trunk/README
$ svn add trunk/README 
$ sudo svn ci  -m "hello"
$ svn up
  • 創建分支和里程碑
$ svn cp trunk branches/demo-1.0
$ sudo svn ci -m "new branch: demo-1.0"
$ sudo svn cp -m "new tag: v1.0" trunk file:///path/to/svn/repos/demo/tags/v1.0

git-svn 下載 svn庫

1 使用git下載svn版本庫

$ git svn clone -s file:///path/to/svn/repos/demo git-svn-demo
Initialized empty Git repository in /home/tony/linux/git_test/git-svn-demo/.git/
r1 = 9a7482685476790c32c32ae61b20006a03bdce80 (refs/remotes/origin/trunk)
	A	README
r2 = e1fd65728b801cb72ed4d76805bb01372651ed55 (refs/remotes/origin/trunk)
Found possible branch point: file:///path/to/svn/repos/demo/trunk => file:///path/to/svn/repos/demo/branches/demo-1.0, 2
Found branch parent: (refs/remotes/origin/demo-1.0) e1fd65728b801cb72ed4d76805bb01372651ed55
Following parent with do_switch
Successfully followed parent
r3 = 5d546cefc53cabcda7f692317208a9cf5810c8cd (refs/remotes/origin/demo-1.0)
Found possible branch point: file:///path/to/svn/repos/demo/trunk => file:///path/to/svn/repos/demo/tags/v1.0, 2
Found branch parent: (refs/remotes/origin/tags/v1.0) e1fd65728b801cb72ed4d76805bb01372651ed55
Following parent with do_switch
Successfully followed parent
r4 = 2194c2521040ddbe1caa45d31f0c73ae60983eb8 (refs/remotes/origin/tags/v1.0)
Checked out HEAD:
  file:///path/to/svn/repos/demo/trunk r2

2 查看版本庫
會發現多了一個 .git/ 目錄

$ cat .git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[svn-remote "svn"]
	url = file:///path/to/svn/repos/demo
	fetch = trunk:refs/remotes/origin/trunk
	branches = branches/*:refs/remotes/origin/*
	tags = tags/*:refs/remotes/origin/tags/*

3 查看文件及內容

$ cd git-svn-demo/
$ ls
README

$ $ cat README 
hello

4 查看提交日誌

$ git log
commit e1fd65728b801cb72ed4d76805bb01372651ed55
Author: root <root@8aff20e5-da2e-4909-ac8e-e0ee3fba95ef>
Date:   Mon Oct 21 07:16:22 2019 +0000

    hello
    
    git-svn-id: file:///path/to/svn/repos/demo/trunk@2 8aff20e5-da2e-4909-ac8e-e0ee3fba95ef

commit 9a7482685476790c32c32ae61b20006a03bdce80
Author: root <root@8aff20e5-da2e-4909-ac8e-e0ee3fba95ef>
Date:   Mon Oct 21 07:14:56 2019 +0000

    initialized.
    
    git-svn-id: file:///path/to/svn/repos/demo/trunk@1 8aff20e5-da2e-4909-ac8e-e0ee3fba95ef

5 查看提交分支和里程碑

$ git branch -a
* master
  remotes/origin/demo-1.0
  remotes/origin/tags/v1.0
  remotes/origin/trunk

從已有的git版本庫創建遠程版本庫上傳

新建一個本地版本庫 markdown

$ mkdir markdown
$ cd markdown
$ git init
$ vim Gitolite服務器架設.md
$ git add -A
$ git commit -m "Gitolite服務器架設.md test.md initialized"

增加內容

$ vim test.md
$ git add test.md
$ git commit -m "git add test.md"

使用gitolite 創建遠程一個空庫

$ cd gitolite-admin/
$ vim conf/gitolite.conf
  4 repo    markdown
  5         RW+     =   @admin
  6         R       =   @all

...此處省略掉一些提交的操作
$ git push

在本地已有的.git上傳

1 從服務器下載版本庫

$ git clone git@server:markdown.git

2 備份版本庫配置信息

$ cd markdown/
$ cp -fv .git/config config

3 把本地的版本庫覆蓋下載的版本庫

$ cp -rfv localdir/markdown/.git/* .git/*

4 恢復配置信息

$ cp config .git/config

5取出版本提交服務器

$ git reset HEAD --hard
$ git push

能看到這裏,完成這一步,那麼恭喜你,成功了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章