git客户/服务器配置

来源:互联网 发布:买票软件哪个好知乎 编辑:程序博客网 时间:2024/05/17 08:03
---------------------git服务器搭建与线上代码检出配置------------
* 服务器操作


*) 安装git


查找git安装程序:
yum search git
从结果中看到符合的:git.x86_64 : Fast Version Control System






安装git:
yum install git.x86_64




*) 修改web service用户的信息,如nginx使用nginx用户
=> 列出用户信息:cat /etc/passwd,定位到nginx行
=> 查看行中倒数第二个:号字符,是home_dir目录,然后再看一下/home/nginx目录是否存在?
=> 不存在用户目录,就需要创建用户目录,比较好的方式就是删除nginx用户,再创建一次,删除前需要修改nginx service,否则使用中的用户是不允许修改的.
=> 停止nginx服务:service nginx stop
=> 删除用户(删除着记得上面的用户信息,uid与gid,就是第一节与第二节,记住它后,可以在创建新nginx用户时,直接使用旧的uid与gid,这样就不用去处理属于旧nginx的文件再改变用户uig与gid后,需要使用chown 命令来修正,可以使用ls -Al 来显示文件的用户与组,如果本来是nginx:nginx变成410:419这样的形态,就是说明新nginx用户信息的uid与gid不一样导致,就需要使用chown来修正了),注意这个用户删除命令的破坏性,如果不明白,请使用userdel -h来查看参数作用:userdel -r nginx
=> 使用which命令找到git-shell的路径:which git-shell
=> 重新建立nginx用户与home_dir目录,/usr/bin/git-shell作用,一定要放这个shell,这同时也是防止git账户通过ssh登录,这里不能放/sbin/nologin,否则使用git remote show host1-discuz时,它会提示fatal: protocol error: bad line length character: This :useradd -s /usr/bin/git-shell /-m -d /home/nginx -u 旧uid -g 旧gid nginx
=> 进入nginx home目录:cd /home/nginx
=> 建立.ssh目录:sudo -u nginx ssh-keygen ,然后一直回车下去就可以了,可以把所有的生成./ssh下面的文件删除
=> 进入.ssh,把需要连接服务器的机器的rsa公匙加入文件,authorized_keys:echo id_rsa.pub文件中的内容(这个文件创建见下面步骤) >> authorized_keys
=> 建立web目录:mkdir /data/www/discuz
=> 把目录所有者与组改成nginx的,以让nginx可以正常的读写:chown -R nginx:nginx /data/www/discuz
=>建立git版本(不含工作目录,即不能在里面修改文件内容,只用于保存版本):mkdir /data/git/discuz.git/
=> 进入/data/git/discuz.git:cd /data/git/discuz.git
=> 建立git bare版本:git --bare init
=> 编写提交自动同步脚本hooks:cd hooks & cat >post-receive
在提示中输入以下脚本内容(GIT_WORK_TREE是设置git工作目录变量,还有一个是GIT_DIR是版本目录,如果二个变量都设置了,就可以在任意一个目录运行下面命令checkout命令,因为git要求,必须要有git版本目录与工作目录才能使用,也同时注意,变量必须与git命令在同一行,使用空白隔开即可,如GIT_WORK_TREE=/data/www GIT_DIR=/data/git git 命令)
#!/bin/sh
GIT_WORK_TREE=/data/www/discuz git checkout -f
换行后按ctrl+d保存
=> 组pos-receive运行属性:chmod +x ./post-receive
=> 把目录所有者与组改成nginx的,以让nginx可以正常的读写:chown -R nginx:nginx /data/git/discuz.git
=> 到此,服务器的配置已经完成,要求就是web与git版本使用用户必须相同,这样,checkout时,才有权限,同时写入的文件,nginx才能让php有写入权限,同时,git push时也才有写入git版本的权限




*) 在其它机器提交版本及配置
=> 在window上安装git,按默认选择来安装即可,安装成功后,会在右键菜单上出现一个git bash here菜单;如果不好用,也可以使用 tortoisegit
=> 例了目录,在d:/web/www/test/下建立一个目录叫discuz;
=> 进入discuz目录,点击右键中的git bash here打开git控制面板
=> 把当前目录加入版本控制,会在目录下生成一个.git目录:git init
=> 可以在版本的根目录下,建立一个.gitignore文件来控制本版本中要忽略的文件或目录,语法看git的线上文档:http://www.git-scm.com/docs/gitignore


=> 提示,下面使用$开头的都是在git bash here窗口中输入的,输入时只需要输入$后面的字符,$时表示这个命令是在bash窗口输入而已
=> 创建本机的ssh连接的公匙,window下,一般是存放在当前用户目录下的.ssh目录下的,输入后面的命令一直回车下去即可,qidizi@qq.com是用于注释这个rsa是谁的,不加时,它默认使用本地主机的window账户+主机名,rsa生成路径,会在命令中提示,一般不要修改:$ ssh-keygen -t rsa -C "qidizi@qq.com"
=> 把生成的公匙.ssh/id_rsa.pub中的内容复制并加入服务器/home/nginx/.ssh/authorized_keys中,加入方式见上面
=> 把服务器加入本地版本的推送主机,可以通过git remote -h来查看其它用法,如修改git-url,修改remote名字等:$ git remote add discuz-service ssh://nginx@主机ip:/data/git/discuz.git
=>提示,如果remote 的url写错了,一般会出现以下提示:30 port 22: Bad file number
=> 如果是写错了ssh登录名字,就会提示输入密码
=> 随意在本版本目录下加入一个文件,并写入内容,加入本地版本控制:$ git add kkk.txt
=> 把kkk.txt提交到本地版本库,可以二步命令:$ git add . 然后再 $ git commit -m "提交时的备注内容" 或是一步命令(把所有的更改都提交):$ git commit -a -m "备注"
=> 把更改提交到公共主版本库,把本地的主分支,提交到线上的主分支,在这里提示一下,本地可以有n多分支,但是线上服务器不允许push出多个分支,只应该有一个master主分支,因为线上的运行需要永远只需要一个版本;如果在push时,提示reject(fetch first),就是提示,线上版本已经有新的改动,请把线上别人的改动先拉到本地合并后才能提交:$ git push discuz-service  master:master
=> 如果需要拉线上,使用命令,把线上的主分支拉到现在的工作目录:$ git pull discuz-service master
=> 建立dev分支:$ git branch dev
=> 如果需要切换到其它本地分支,如开发分支dev:$ git checkout dev
=> 注意,切换分支前,注意把分支的改动先commit后,再切换,否则会有问题,不允许切换的.也因为只有切换后,它需要清理工作目录,所以,再变回原有的分支,就会导致没有提交到本地版本库中的改动会丢失,所以,就需要先清理完成后才能切换
=> 如果需要切换回主分支:$ git checkout master
=> 把其它分支合并过来当前工作分支:$ git merge dev
=> 分支作用是,你可以随意的修改某些文件,然后提交到本分支,如解决一个bug,为了不影响master,你就需要建立新分支,然后在这个分支上做修改,修改好了,测试没有问题时,就可以合并到merge,如果修改到一半时,却又要开发新功能,那么就可以在提交部分更改到本地版本,然后切换到dev继续开发,开发完后,再切换回来bug分支.是非常方便的.








*) git 配置
=> tortoisegit添加的user.name这些可能是保存在~/.config/git/config

=> 其它的可以通过git config --global -e等来配置



如果在安装 tortoisegit 不小心选择了putty验证方式时,可以在设置-网络-ssh客户端 选择git的ssh.exe即可C:\Program Files (x86)\Git\bin\ssh.exe


因为使用ssh.exe连接非常方便;

免费的ssh服务器,可以选择github.com或是coding.net,

然后多人合作时,每个人注册一个账户,再把公钥上传到个人设置中的ssh中,而不是项目setting中的那个,

然后在每个项目上,把每个人加到项目中成员,就可以push代码了.

0 0
原创粉丝点击