主要是創建git帳戶以後,禁止git登錄,以及git init --bare創建git倉庫的時候, 要cat /etc/passwd查看git帳戶 vim /etc/passwd 把git帳戶登陸改成: git:x:1001:1001:git version control:/home/git:/usr/bin/git-shell 這樣就能夠正常拉去,或者推送了html
Git服務器搭建python
安裝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即表示成功git
2.2 客戶端安裝: #yum install git #git --version git version 1.7.1github
cat /xxx.pub << /.ssh/authorized_key 服務端查看已經上傳的密鑰:ls ~/id_rsa.pubshell
在服務器端生成管理庫: #sudo -H -u git gitosis-init < ~/id_rsa.pub Initialized empty Git repository in /home/git//repositories/gitosis-admin.git/ Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/vim
註解:安全
修改上傳權限: #chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-updatebash
註解: gitosis.conf文件用來設置用戶、倉庫和權限的控制文件 keydir目錄則是保存全部具備訪問權限用戶公鑰的地方 ./keydir/root@vm1.pub:如前所述,該用戶具備訪問權限服務器
受權和權限控制 #vim gitosis.conf [gitosis]ssh
[group gitosis-admin] writable = gitosis-admin members = root@vm1 #顯示用戶root@vm1.pub是初始化gitosis公鑰的擁有者,是惟一能管理gitosis-admin項目的人
[group jay_fans] #組名稱 members = root@vm1 #密鑰用戶名 writable = git-test #項目名稱
初始、增長及使用項目git-test #cd /git-repo #mkdir git-test #cd git-test #git init #touch README #git add . #git commit -a -m "init git-test" #git remote add origin git@192.168.56.1:git-test.git #git push origin master 註解:在新項目git-test裏首次推送數據到服務器前,需先設定該服務器地址爲遠程倉庫,但你不用事先到服務器上手工建立該項目的裸倉庫— Gitosis 會在第一次遇到推送時自動建立。
客戶端增長其餘成員公鑰到系統中:經過添加用戶的公鑰到keydir目錄便可 #cd /git-repo/gitosis-admin #cp /path/to/member/public/key keydir/ #git add keydir/member.pub 修改gitosis.conf
[group jay_fans] #組名稱 members = jay # 新的密鑰用戶名 writable = git-test
提交修改: #git commit -a -m "granted jay commit rights to git-test" #git push 註解:gitosis其實是從服務器端的/home/git/.gitosis.conf文件讀取信息的,經過以上操做,會將新的權限信息寫入到該文件中,若是搞錯了配置,致使失去了推送權限,能夠經過修改該文件來從新設定,若是你手工編輯該文件的話,它會一直保持到下次向 gitosis-admin 推送新版本的配置內容爲止。 成員jay經過如下命令獲取代碼: #git clone git@192.168.56.1:git-test.git
4 Github的使用 GitHub是一個託管Git項目的網站,對於閉源項目收費,開源項目則免費。使用Github進行代碼發佈和託管的步驟以下:
登陸Github點擊Edit your profile->SSH keys,添加./.ssh/id_rsa.pub中的內容 4. 設置ssh不輸入口令 #eval ssh-agent
#ssh-add
測試是否能鏈接上GIthub #ssh git@github.com PTY allocation request failed on channel 0 Hi rangochan! You've successfully authenticated, but GitHub does not provide shell access. Connection to github.com closed. 鏈接成功
配置Git全局用戶配置
xxx及xxx@gmail.com分別爲Github帳戶名和郵箱
定義遠程服務器別名origin #git remote add origin git@github.com:xxx/github-test.git
本地和遠程實行合併,本地默認爲master #git push origin master
當經過Github以xxx對github-test做出修改時,因爲本地快照與Github遠程服務器上的不一致,會引發如下錯誤:
! [rejected] master -> master (fetch first) error: failed to push some refs to 'git@github.com:xxx/puppet' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解決: 經過pull子命令更新Github項目中做出的更改 #git pull origin master 以後再執行git push origin master Counting objects: 8, done. Delta compression using up to 4 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (7/7), 714 bytes | 0 bytes/s, done. Total 7 (delta 0), reused 0 (delta 0)
登陸https://github.com/xxx/github-test ,可查看到github-test項目
更新到遠程 #git push origin master
切換到新分支
建立新文件
Commit 到本地Git
合併到遠程服務器 若是new-branch分支成熟了,則能夠合併進master #git checkout master #git merge new-branch #git branch
上面的git服務器源已經失效了,能夠利用下面的 大綱:
1、前言
2、搭建Git服務器
yum安裝Git服務器 建立一個git用戶,用來運行git服務 建立客戶端登陸證書 初始化Git倉庫 禁用shell登陸 克隆遠程倉庫
3、安裝客戶端
Windows 客戶端 Linux 客戶端
4、總結
注,測試機 CentOS 5.5 x86_64,Git 服務器版本:git version 1.8.2.1,客戶端版本:git version 1.9.2.msysgit.0。全部軟件請到這裏下載:http://msysgit.github.io/。
1、前言
在上一篇博客中咱們主要講解Git是什麼,Git的基本原理,講解一些有關Git的基礎知識,讓咱們簡單的瞭解一下Git,固然咱們還有不少問題沒有搞清楚,嘿嘿!無論理怎麼樣,在咱們弄清楚這些問題以前,咱們得有臺Git服務器是吧,嘿嘿!好了,下面咱們就來一塊兒搭建一臺Git服務器。
2、搭建Git服務器
1.yum安裝Git服務器
[root@git ~]# cd src/ [root@git src]# wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm [root@git src]# rpm -ivh epel-release-5-4.noarch.rpm Preparing... ########################################### [100%] package epel-release-5-4.noarch is already installed [root@git ~]# yum list [root@git ~]# yum install -y git
2.建立一個git用戶,用來運行git服務
[root@git ~]# adduser git
3.建立客戶端登陸證書
這邊上傳本地到服務器是用scp scp /local/xxx.file servername@serverip:/xxx/xxx/name 會提示輸入servername服務器名的密碼,輸入便可上傳 上傳完成後經過兩種方式複製pub公鑰到authorized_keys 1 cat xxx.pub >> /xx/authorized_keys 2 vim -On xx.pub /xx/authorized_keys 能夠雙屏開啓vim,直接在裏面選中一行yy,ctrl+w再按左右鍵,進入另外一欄p粘貼便可
注,收集全部須要登陸的用戶的公鑰,就是他們本身生成的id_rsa.pub文件,把全部公鑰複製到/home/git/.ssh/authorized_keys文件裏,一行一個。嘿嘿!
1).客戶端生成id_rsa.pub文件的命令
$ ssh-keygen -t rsa $ cat .ssh/id_rsa.pub
注,一路回車便可,將生成的id_rsa.pub,複製給管理員,幫你在服務器上增長一下,下次你用git時就不須要輸入用戶名和密碼了。
2).查看服務器上authorized_keys文件
[root@git ~]# cat /home/git/.ssh/authorized_keys
4.初始化Git倉庫
注,先選定一個目錄做爲Git倉庫,這裏是/data/git/project.git。
[root@git ~]# cd /data/git/ [root@git git]# git init --bare project.git [root@git project.git]# ls branches config description HEAD hooks index info objects refs
執行以上命令 Git命令,會建立一個裸倉庫,裸倉庫沒有工做區,由於服務器上的Git倉庫純粹是爲了共享,因此不讓用戶直接登陸到服務器上去改工做區,而且服務器上的Git倉庫一般都以.git結尾。而後,把owner改成git:
[root@git git]# chown -R git.git project.git [root@git git]# ls -l 總計 4 drwxr-xr-x 7 git git 4096 05-09 13:50 project.git
5.禁用shell登陸 注,出於安全考慮,第二步建立的git用戶不容許登陸shell,這能夠經過編輯/etc/passwd文件完成。找到相似下面的一行: [root@git ~]# cat /etc/passwd | grep git git:x:1001:1001:git version control:/home/git:/usr/bin/git-shell
改成: [root@git ~]# vim /etc/passwd git:x:1001:1001:git version control:/home/git:/usr/bin/git-shell 我這邊是改成/sbin/nologin 必須是在/etc/shells下面的shell,若是使用""空,則系統默認會分配shell,因此是沒用的 這樣,git用戶能夠正常經過ssh使用git,但沒法登陸shell,由於咱們爲git用戶指定的git-shell每次一登陸就自動退出。
6.克隆遠程倉庫 注,如今能夠經過git clone命令克隆遠程倉庫了,在各自的電腦上運行: 注,$ git clone git@git.jjhh.com:/data/git/project.git,其中git用戶名,git.jjhh.com服務器,/data/git/prgject.git是倉庫路徑。好了,到這裏服務器的搭建到這裏就完成了,下面咱們來安裝一下客戶端。
3、安裝客戶端 1.Windows 客戶端 1).下載客戶端 注,你們到這裏下載http://msysgit.github.io/。下面簡單演示一下安裝過程,比較簡單: 好了,到這裏就安裝完成了,安裝好之後會在桌面上有個圖標,你雙擊打開便可。以下圖: 2.Linux 客戶端 注,Linux客戶端安裝就比較簡單了,直接用yum安裝一下就好! [root@test ~]# yum install -y git 到這裏git就安裝完成了,下面咱們查看一下版本: [root@test ~]# git --version git version 1.8.2. 下面咱們生成公鑰並複製到服務器上:
[root@test ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 48:3c:22:76:02:f1:a2:e5:27:22:cb:4f:a7:a0:98:9d root@test.com [root@test ~]# cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwrmgNAca77BKzXl6BP11fdaclAoWfW+x4kPDZMPj1zFoML9JfOAS7DGY9quLMitwwfg5+U7zP/egPmAhSKCECubmodzMucnRSkJGgKCt1SlctRNDRN3OIvrecAtdZfDcBaWKLjaVzGPmhweLhr6HzfqeZU09Ccis4yK3RMwip2f+K1ZZVIOKUmL4AVFl9dqtxnQ4HlW61PUxvM/ug2M68Z0jQk5DVG8w5+dvGqX1qr5YABD1NX5Jz6aUbVVx7yyoORENxu6SK83GI/V7eOkrvBMDh9nDdwvDhPhuhBDSfE+Xi92hPJPKdNroF1vx8HMvpHME20MmjSwavPrz+B18MQ== root@test.com
下面咱們複製id_rsa.pub裏的公鑰到服務器的authorized_keys文件中。
[root@git ~]# su git bash-3.2$ cd bash-3.2$ vim .ssh/authorized_keys 或者使用cat xxx.pub >> /xxx/authorized_keys
下面咱們clone一個倉庫到本地的目錄中。 [root@test ~]# cd /data/dev [root@test dev]# git clone git@git.jjhh.com:/data/git/project.git Cloning into 'project'... The authenticity of host 'git.jjhh.com (114.112.173.150)' can't be established. RSA key fingerprint is ca:ec:a2:7e:e6:89:ca:19:d3:93:7f:4b:c3:c0:c7:fd. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'git.jjhh.com,114.112.173.150' (RSA) to the list of known hosts. remote: Counting objects: 50, done. remote: Compressing objects: 100% (42/42), done. remote: Total 50 (delta 21), reused 0 (delta 0) Receiving objects: 100% (50/50), 4.02 KiB, done. Resolving deltas: 100% (21/21), done. [root@test dev]# ls project [root@test dev]# cd project/ [root@test project]# ls index.html 好了,到這裏咱們的git客戶端到這裏就所有安裝完成了。