centos 安裝git server


1.yum install lrzsz wget git

  

2.安裝gitosis:gitosis為Git用戶權限管理系統,通過管理服務端的/home/git/.ssh/authorized_key文件來執行對用戶權限的管理,是一個python模塊包

#yum install python python-setuptools

#git clone git://github.com/res0nat0r/gitosis.git

#cd gitosis/

#python setup.py install

顯示Finished processing dependencies for gitosis==0.2即表示成功 

 

3. 

訪問Gitolite需要通過SSH 密鑰來驗證。在用作GIT客戶端的電腦上如果還沒有密鑰(一個公鑰,一個私鑰),那么可以使用ssh-keygen命令生成,然后將公鑰拷貝到GIT服務器上。

$ ssh-keygen -t rsa -C "your_mail@youremail.com"

這里我們沒有指定生成的密鑰文件名稱(可以通過-f filename指定),因此生成的文件為id_rsa和id_rsa.pub,前者是私鑰,后者是公鑰。另外,在Linux下執行ssh-keygen可以同時指定該密鑰主人的email,這將出現在SSH公鑰內容中。

在Gitolite建立的GIT服務器上,是通過修改gitolite-admin.git這個代碼庫中的源代碼來創建新的代碼庫、為GIT客戶添加登錄用的公鑰的。所以要管理Gitolite,必須有一個git virtual user去git clone出gitolite-admin.git的代碼,這也就需要在服務器本機建立一對SSH密鑰。

 

添加git用戶

adduser --system --shell /bin/sh --comment 'git version control' --create-home  --home-dir /home/git git

cd /home/git 

rz  選擇你生成的ssh-key

 

4.su git

gitosis-init < ./id_rsa.pub
chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update


5.使用puttykeygenerator  轉換 pub為ppk

在Linux下產生的私鑰文件putty是不認識的,putty只認識自己的ppk格式,要在這兩種格式之間轉換,需要PuTTYgen這個程序。

 

在安裝tortoisegit的時候會提示有選擇項:

如果選擇第一個,在安裝后配置git的時候就需要注意一些東西,如果選擇第二項則git的連接都是通過ssh完成,后續配置簡單一些。

選擇plink模式在git clone的時候需要加載ppk

putty key的生成方式:

啟動putty key generator

點擊load按鈕將剛才最先生成的ssh中的密鑰id_rsa文件導入,然后彈出對話框提示導入成功,接着點擊save private key來保存ppk文件,最后在git clone的對話框中加載ppk文件即可,連接的時候會提示輸入git用戶的密碼,輸入一下即可git clone gitosis的配置文件。

如果選擇ssh模式的tortoisegit,那么就無需配置ppk,直接git clone。

這里在對話框中的git url填寫的時候需要注意,是直接寫gitosis-admin.git,而不是加有/home/git的絕對路徑了。

 

6.如果是直接在linux服務器上git clone,那么要注意路徑問題:

 

git clone git@localhost:/home/git/repositories/gitosis-admin.git

否則寫會提示: 

1 fatal: 'gitosis-admin.git' does not appear to be a git repository
2 fatal: The remote end hung up unexpectedly

 

如果是windows下,不要加用戶名和絕對路徑否則會報錯

ERROR:gitosis.serve.main:Repository read access denied

 

git clone git@localhost:gitosis-admin.git

 

 

7.gitosis.conf

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = root@vm1        #顯示用戶root@vm1.pub是初始化gitosis公鑰的擁有者,是唯一能管理gitosis-admin項目的人

[group jay_fans]            #組名稱
members = root@vm1        #密鑰用戶名  多個用戶名使用 空格隔開  xx@xx aa@aa
writable = git-test                #項目名稱  

 

 

三、常見問題

首先確定 /home/git/repositories/gitosis-admin.git/hooks/post-update 為可執行即屬性為 0755

1. git操作需要輸入密碼

原因
公密未找到 
解決
上傳id_pub.rsa到keydir並改為'gitosis帳號.pub'形式,如miao.pub。擴展名.pub不可省略 

2. ERROR:gitosis.serve.main:Repository read access denied

原因
gitosis.conf中的members與keydir中的用戶名不一致,如gitosis中的members = foo@bar,但keydir中的公密名卻叫foo.pub
解決
使keydir的名稱與gitosis中members所指的名稱一致。 
改為members = foo 或 公密名稱改為foo@bar.pub

 

(3)出現’gitosis-admin’ does not appear to be a git repository,短路徑無效時替換為全路徑

在服務器上使用短路徑會取現下面這個問題,原因是沒有找到對應匹配的密鑰所致,如果正確使用了ssh密鑰則不會出現這個問題,這里就不去折騰了

root@stu-system:/home/git/repositories# git clone git@127.0.0.1:gitosis-admin.git
Cloning into gitosis-admin...
git@127.0.0.1's password:
fatal: 'gitosis-admin' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

使用以下命令解決,只不過每次push和pull的時候都需要輸入一遍git用戶的密碼,略為繁瑣

git clone git@127.0.0.1:/home/git/repositories/gitosis-admin.git

(4)出現Unable to create temporary file: Permission denied
在Windows上使用TortoiseGit執行Push時出現以下錯誤

git.exe push --force --progress  "origin" master:master

Counting objects: 189, done.
Compressing objects: 100% (187/187)
Writing objects:   7% (14/189)
fatal: Unable to create temporary file: Permission denied
fatal: sha1 file '<stdout>' write error: Invalid argument
error: failed to push some refs to 'git@10.73.4.46:channelv.git'

git did not exit cleanly (exit code 1)

原來是服務器上是用root賬戶建立的庫目錄,導致git賬戶無權寫入,方法就是修改文件夾的所屬用戶和所屬用戶組

root@stu-system:/home/git/repositories# chown -R git *
root@stu-system:/home/git/repositories# chgrp -R git *

(5)出現failed to push some refs to ‘git@10.73.4.46:channelv.git’

在Windows上使用TortoiseGit執行Push時出現以下錯誤

git.exe push --progress  "origin" master:master

Counting objects: 189, done.
Compressing objects: 100% (158/158)
Writing objects: 100% (189/189), 1016.00 KiB | 997 KiB/s
Writing objects: 100% (189/189), 1.12 MiB | 997 KiB/s, done.
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To git@10.73.4.46:channelv.git
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'git@10.73.4.46:channelv.git'

git did not exit cleanly (exit code 1)

在服務器對應的庫目錄下執行以下命令增加配置即可

git config --bool core.bare true


6. 在git clone出gitolite-admin.git的代碼的時候,可能會出現”Agent admitted failure to sign using the key”這個問題,然后讓我們輸入hosting user的密碼。

$ git clone git@localhost:gitolite-admin.git
Cloning into 'gitolite-admin'...
Agent admitted failure to sign using the key.
git@localhost's password: 
Permission denied, please try again.
git@localhost's password: 
Permission denied, please try again.
git@localhost's password: 
Permission denied (publickey,password).
fatal: The remote end hung up unexpectedly
$

這是SSH的問題。參考資料[3]中提供了解決方法:

https://help.github.com/articles/error-agent-admitted-failure-to-sign

 

 

Gitosis Server 設定專案、新增帳號

  1. Gitosis 的專案權限 / 帳號管理 是使用 Git 來管理, 專案名稱: gitosis-admin.git
  2. git clone gitosis@localhost:gitosis-admin.git # 因為 Gitosis 是用 gitosis-admin.git 來管理, 所以需要抓下來修改、設定(未來所有管理也是如此)
  3. cd gitosis-admin # 會看到下述
    • gitosis.conf # 設定檔, 設定誰可以讀寫哪個專案的 Repository
    • keydir # 目錄, 放每個帳號的 public key. 放置的檔案命名: user1.pub, user2.pub (user1, user2.. 為帳號名稱, 請自行修改)

新增帳號

  1. cp /tmp/id_rsa_user1.pub keydir/user1.pub # 請依照實際帳號命名, 不要取 user1, user2
  2. cp /tmp/id_rsa_user2.pub keydir/user2.pub
  3. git add keydir/user1.pub keydir/user2.pub
  4. git commit -m 'add user1, user2 public key'
  5. git push
  6. 注意: gitosis 認定的帳號, 是 id_rsa.pub 最后面 "xxx@example.com", 以 @ 前面的 "xxx" 為帳號(此帳號也是 gitosis 設定的帳號), 若帳號不同, git push 就會出現如下述的錯誤

    ERROR:gitosis.serve.main:Repository read access denied
    fatal: The remote end hung up unexpectedly

設定專案權限

  1. vim gitosis.conf # 會看到下述, 不要動他, 於最下方設定自己的 Group / 專案名稱即可.

    [group gitosis-admin]
    writable = gitosis-admin
    members = admin@example.com

  2. 增加下述, myteam 是 group name, 此 group 有 user1, user2 的使用者, 可以寫入 project_name.git 的專案

    [group myteam]
    writable = project_name
    member = user1 user2

  3. git commit -m 'add user1, user2 write access to project_name' -a
  4. git push

建立專案

  1. cd ~/
  2. mkdir project_name
  3. cd project_name
  4. git init
  5. git remote add origin gitosis@example.com:project_name.git # gitosis 會自行於 /srv/gitosis/repositories 新增
  6. touch readme
  7. git add .
  8. git commit -m 'initial'
  9. git push origin master:refs/heads/master # 或 git push origin master

gitosis.conf 更多設定條件

下述摘錄自: Gitosis - ArchWiki

[gitosis]
gitweb = yes

[repo foobar]
description = git repository for foobar
owner = user

[group devs]
members = user1 user2

[group admins]
members = user1

[group gitosis-admin]
writable = gitosis-admin
members = @admins

[group foobar]
writable = foobar
members = @devs

[group myteam]
writable = free_monkey
members = jdoe

下述摘錄自: Pro Git 服務器上的 Git 權限管理器 Gitosis

[group mobile]
writable = iphone_project
members = scott josie jessica

[group mobile_ro]
readonly = iphone_project
members = john

開放 Gitosis 公開存取

  • sudo -u gitosis git-daemon --base-path=/srv/gitosis/repositories/ --export-all

常用命令

下述全部都在 gitosis-admin.git 內操作

新增帳號
  1. cp /tmp/id_rsa_user1.pub keydir/user1.pub
  2. vim gitosis.conf # 增加 members
設定專案
  1. vim gitosis.conf # 增加 group、writeable 的項目
新增專案
    1. mkdir project_name; cd project_name
    2. git init
    3. git remote add origin gitosis@example.com:project_name.git
    4. git commit
    5. git push origin master

 

最好在 /srv/gitosis/repositories 

mkdir project

cd project 

git init --bare

 

 

https://wiki.archlinux.org/index.php/Gitosis#Public_access


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM