CentOS搭建GIT服務器【一】-倉庫搭建以及基於gitosis的SSH方式訪問

一、安裝GIT核心html

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel gcc gcc-c++ -y
wget https://www.kernel.org/pub/software/scm/git/git-2.0.0.tar.gz
tar -zvxf git-2.0.0.tar.gz 解壓

進入git解壓目錄,而後配置、安裝:python

autoconf
.
/configure --with-curl=/usr/local make sudo make install

報錯c++

/usr/bin/perl Makefile.PL PREFIX='/usr/local' INSTALL_BASE='' --localedir='/usr/local/share/locale'
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.
make[1]: *** [perl.mak] 錯誤 2
make: *** [perl/perl.mak] 錯誤 2

看起來應該是perl的問題,perl-version發現perl已經安裝了,google一把,是perl的一個包的問題,參見右邊解決了:http://my.oschina.net/indestiny/blog/223082git

 yum install perl-ExtUtils-MakeMaker package

而後繼續  make && make installgithub

安裝後顯示信息:shell

make[1]: Leaving directory `/usr/local/git-2.0.0/git-gui'
bindir=$(cd '/usr/local/bin' && pwd) && \
        execdir=$(cd '/usr/local/libexec/git-core' && pwd) && \
        { test "$bindir/" = "$execdir/" || \
          for p in git git-shell git-upload-pack git-cvsserver; do \
                rm -f "$execdir/$p" && \
                test -z "" && \
                ln "$bindir/$p" "$execdir/$p" 2>/dev/null || \
                cp "$bindir/$p" "$execdir/$p" || exit; \
          done; \
        } && \
        for p in git-receive-pack git-upload-archive; do \
                rm -f "$bindir/$p" && \
                test -z "" && \
                ln "$bindir/git" "$bindir/$p" 2>/dev/null || \
                ln -s "git" "$bindir/$p" 2>/dev/null || \
                cp "$bindir/git" "$bindir/$p" || exit; \
        done && \
        for p in  git-add git-annotate git-apply git-archive git-bisect--helper git-blame git-branch git-bundle git-cat-file git-check-attr git-check-ignore git-check-mailmap git-check-ref-format git-checkout-index git-checkout git-clean git-clone git-column git-commit-tree git-commit git-config git-count-objects git-credential git-describe git-diff-files git-diff-index git-diff-tree git-diff git-fast-export git-fetch-pack git-fetch git-fmt-merge-msg git-for-each-ref git-fsck git-gc git-get-tar-commit-id git-grep git-hash-object git-help git-index-pack git-init-db git-log git-ls-files git-ls-remote git-ls-tree git-mailinfo git-mailsplit git-merge git-merge-base git-merge-file git-merge-index git-merge-ours git-merge-recursive git-merge-tree git-mktag git-mktree git-mv git-name-rev git-notes git-pack-objects git-pack-redundant git-pack-refs git-patch-id git-prune-packed git-prune git-push git-read-tree git-receive-pack git-reflog git-remote git-remote-ext git-remote-fd git-repack git-replace git-rerere git-reset git-rev-list git-rev-parse git-revert git-rm git-send-pack git-shortlog git-show-branch git-show-ref git-stripspace git-symbolic-ref git-tag git-unpack-file git-unpack-objects git-update-index git-update-ref git-update-server-info git-upload-archive git-var git-verify-pack git-verify-tag git-write-tree git-cherry git-cherry-pick git-format-patch git-fsck-objects git-init git-merge-subtree git-show git-stage git-status git-whatchanged; do \
                rm -f "$execdir/$p" && \
                test -z "" && \
                ln "$execdir/git" "$execdir/$p" 2>/dev/null || \
                ln -s "git" "$execdir/$p" 2>/dev/null || \
                cp "$execdir/git" "$execdir/$p" || exit; \
        done && \
        remote_curl_aliases="git-remote-https git-remote-ftp git-remote-ftps" && \
        for p in $remote_curl_aliases; do \
                rm -f "$execdir/$p" && \
                test -z "" && \
                ln "$execdir/git-remote-http" "$execdir/$p" 2>/dev/null || \
                ln -s "git-remote-http" "$execdir/$p" 2>/dev/null || \
                cp "$execdir/git-remote-http" "$execdir/$p" || exit; \
        done && \
        ./check_bindir "z$bindir" "z$execdir" "$bindir/git-add"

而後查看一下:app

[root@bxcs_repository local]# git
usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

最經常使用的 git 命令有:
   add        添加文件內容至索引
   bisect     經過二分查找定位引入 bug 的變動
   branch     列出、建立或刪除分支
   checkout   檢出一個分支或路徑到工做區
   clone      克隆一個版本庫到一個新目錄
   commit     記錄變動到版本庫
   diff       顯示提交之間、提交和工做區之間等的差別
   fetch      從另一個版本庫下載對象和引用
   grep       輸出和模式匹配的行
   init       建立一個空的 Git 版本庫或從新初始化一個已存在的版本庫
   log        顯示提交日誌
   merge      合併兩個或更多開發歷史
   mv         移動或重命名一個文件、目錄或符號連接
   pull       獲取並整合另外的版本庫或一個本地分支
   push       更新遠程引用和相關的對象
   rebase     本地提交轉移至更新後的上游分支中
   reset      重置當前HEAD到指定狀態
   rm         從工做區和索引中刪除文件
   show       顯示各類類型的對象
   status     顯示工做區狀態
   tag        建立、列出、刪除或校驗一個GPG簽名的 tag 對象

命令 'git help -a''git help -g' 顯示可用的子命令和一些指南。參見
'git help <命令>''git help <指南>' 來查看給定的子命令幫助或指南。

[root@bxcs_repository local]# git --version
git version 2.0.0

安裝成功了。ssh

二、安裝openssl等(執行了最上面的腳本的話就不用了)curl

yum install  -y gettext-devel expat-devel curl-devel zlib-devel openssl-devel

三、安裝python setuptools包fetch

yum install python python-setuptools

四、用咱們剛剛安裝的git下載gitosis並安裝:

下載
git clone git://github.com/res0nat0r/gitosis.git
進入
cd gitosis/
用剛安裝的python 安裝gitosis
python setup.py install

顯示以下信息就說明安裝成功了:

creating /usr/lib/python2.6/site-packages/gitosis-0.2-py2.6.egg
Extracting gitosis-0.2-py2.6.egg to /usr/lib/python2.6/site-packages
Adding gitosis 0.2 to easy-install.pth file
Installing gitosis-init script to /usr/bin
Installing gitosis-run-hook script to /usr/bin
Installing gitosis-serve script to /usr/bin

Installed /usr/lib/python2.6/site-packages/gitosis-0.2-py2.6.egg
Processing dependencies for gitosis==0.2
Searching for distribute==0.6.10
Best match: distribute 0.6.10
Adding distribute 0.6.10 to easy-install.pth file
Installing easy_install script to /usr/bin
Installing easy_install-2.6 script to /usr/bin

Using /usr/lib/python2.6/site-packages
Finished processing dependencies for gitosis==0.2

五、本地生成key,公鑰上傳到server上:

ssh-keygen -t rsa -C "xxxx@xxxxx"

一路回車,把is_rsa.pub公鑰上傳到server的tempKeys目錄上。

六、在Server上新建git管理員用戶,初始化:

 adduser git # 新增一個git用戶
su - git # 切換git用戶
[git@bxcs_repository gitosis]$ gitosis-init <tempPubKeys/id_rsa.pub
初始化空的 Git 版本庫於 /home/git/repositories/gitosis-admin.git/
從新初始化現存的 Git 版本庫於 /home/git/repositories/gitosis-admin.git/

上面的初始化,已經將本地公鑰初始化到gitosis中,本地機器成爲管理員權限機器。

必須以git用戶初始化,不然後來clone gitosis-admin.git時會有問題,必須輸密碼!(主要是倉庫地址要放在/home/git/repositories/gitosis-admin.git/,而不是/home/repositories/gitosis-admin.git/)

七、本地下載管理端項目gitosis-admin:

在本地下載server上的管理端gitosis-admin到目錄/usr/local/gitosis-admin下:

 git clone git@192.168.3.30:gitosis-admin.git

而後看看配置文件:

Administrator@HG-20140421APSR /usr/local/gitosis-admin
$ cat gitosis.conf
[gitosis]

[group gitosis-admin]  #組名
writable = gitosis-admin  #項目名
members = Administrator@HG-20140421APSR #團隊成員名(必須和密鑰名一致),多個用空格隔開

密鑰通通放在下面這個目錄中:

$ ls keydir/
Administrator@HG-20140421APSR.pub

 

 

九、新建項目:

PS:若是有新加入的成員,須要生成公鑰發給管理員。管理員將新的公鑰放在管理項目gitosis-admin的這個目下,而後再上面的conf中配置好權限,commit、push下這個項目到git Server就OK了。以下:

先加權限:

先在gitosis.conf中添加以下分組、成員信息:

[group bxcs]
writable = bxcs
members = xxx@xxx Administrator@HG-20140421APSR

而後在keydir中添加公鑰

提交到admin項目:

git add .
git commit -m "修改權限,建立XXXX項目"
git push

 

初始化項目:

進入咱們的項目工做空間

#初始化
git init
git add .
git commit -m "初始化項目"

#而後提交!
git remote add origin git@192.168.X.XX:bxcs.git
git push origin master

或者用下面一行提交:

git push git@192.168.x.xx:bxcs.git master

OK

 

 

搭建過程參考了:

http://zwm-xl.blog.sohu.com/170050241.html

http://blog.sina.com.cn/s/blog_904dee7f0101gait.html

http://blog.csdn.net/ice520301/article/details/6142503

相關文章
相關標籤/搜索