主要是建立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 这样就可以正常拉去,或者推送了
Git服务器搭建
- 安装 #yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel #wget http://git-core.googlecode.com/files/git-1.9.0.tar.gz #tar zxvf git-1.9.0.tar.gz #cd git-1.9.0 #make prefix=/usr/local all #make prefix=/usr/local install #root用户运行 查看版本号:git --version
安装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即表示成功
2.2 客户端安装: #yum install git #git --version git version 1.7.1
- ssh设置 客户端生产密钥并上传到服务器端: #ssh-keygen -t rsa #scp ~/.ssh/id_rsa.pub root@192.168.56.1:~/
cat /xxx.pub << /.ssh/authorized_key 服务端查看已经上传的密钥:ls ~/id_rsa.pub
- 服务器上生成git用户,使用git用户并初始化gitosis 添加用户git: #useradd -r -s /bin/sh -c 'git version control' -d /home/git git 设置权限: #mkdir -p /home/git #chown git:git /home/git
在服务器端生成管理库: #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/
注解:
- 生成的gitosis-admin为Git的用户访问权限管理库,gitosis通过这个git库来管理所有git库的访问权限。
- 通过执行初始化,该公钥的拥有者就能修改用于配置gitosis的那个特殊Git仓库了
修改上传权限: #chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
- 客户端导出管理 #mkdir -p /git-repo/ #cd /git-repo/ #git clone git@192.168.56.1:gitosis-admin.git #cd gitosis-admin #find . ./gitosis.conf ./keydir ./keydir/oot@vm1.pub
注解: gitosis.conf文件用来设置用户、仓库和权限的控制文件 keydir目录则是保存所有具有访问权限用户公钥的地方 ./keydir/root@vm1.pub:如前所述,该用户具有访问权限
- 客户端创建及设置管理项目 #cd /git-repo/gitosis-admin 查看已经上传密钥 #ls keydir/ root@vm1.pub
授权和权限控制 #vim gitosis.conf [gitosis]
[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官网https://github.com/ ,申请Github账户,并创建名为github-test的Repository
- 安装Git客户端(Linux) #yum install git git-gui
- 生成密钥对,并拷贝到Github网站 #ssh-keygen -t rsa -C “xxx@gmail.com” xxx@gmail.com为你注册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全局用户配置
git config --global user.name xxx
git config --global user.email xxx@gmail.com
xxx及xxx@gmail.com分别为Github账户名和邮箱
- 创建本地新项目 #mkdir github-test #cd github-test/ #git init #touch README #git add README #git commit -m 'my first commit'
定义远程服务器别名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项目
- 更新文件 #vim README just for test 自动commit更改文件 #git commit -a
更新到远程 #git push origin master
- 创建和合并分支 #git branch
- master 显示当前分支是master #git branch new-branch 创建分支
git checkout new-branch
切换到新分支
vi check.py
创建新文件
git add check.py
git commit -a -m "added a python script"
Commit 到本地Git
git push origin new-feature
合并到远程服务器 如果new-branch分支成熟了,则可以合并进master #git checkout master #git merge new-branch #git branch
- master new-banch #git push 执行合并,master中也合并了new-branch中的更新 登录到GitHub,点击"Switch Branches"可以更改分支来查看不同分支下代码情况。
上面的git服务器源已经失效了,可以利用下面的 大纲:
一、前言
二、搭建Git服务器
yum安装Git服务器
创建一个git用户,用来运行git服务
创建客户端登录证书
初始化Git仓库
禁用shell登录
克隆远程仓库
三、安装客户端
Windows 客户端
Linux 客户端
四、总结
注,测试机 CentOS 5.5 x86_64,Git 服务器版本:git version 1.8.2.1,客户端版本:git version 1.9.2.msysgit.0。所有软件请到这里下载:http://msysgit.github.io/。
一、前言
在上一篇博客中我们主要讲解Git是什么,Git的基本原理,讲解一些有关Git的基础知识,让我们简单的了解一下Git,当然我们还有很多问题没有搞清楚,嘿嘿!不管理怎么样,在我们弄清楚这些问题之前,我们得有台Git服务器是吧,嘿嘿!好了,下面我们就来一起搭建一台Git服务器。
二、搭建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是仓库路径。好了,到这里服务器的搭建到这里就完成了,下面我们来安装一下客户端。
三、安装客户端 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客户端到这里就全部安装完成了。