先放几个相关的参考资料:
http://www.jianshu.com/p/6db06489ba3d
http://www.open-open.com/lib/view/open1356608472385.html
http://blog.chinaunix.net/uid-28621021-id-3487552.html
Git服务器端的架设
公钥先不必纠结,先集中精神把git搭好再说。
网上一大堆资料, 比较准确的部分就是那个用yum命令安装git, 大家都知道用yum install...
说说创建账号:建立个用户组,例如group_git,再建立用户名,例如user_a,那么命令应该是
groupadd git_group useradd -M user_a # 把user_a拉进用户组git_group usermod -G git_group user_a
出于安全考虑,要进行一些用户权限的额外限制
# 进入用户权限管理文件 vim /etc/passwd
在文件里找到对应用户名开头那一行,例如user_a,将之改成类似下方的样子:
user_a:x:1001:1002::/home/git用户组目录:/usr/bin/git-shell
其中x:1001:1002这一段不用管,主要改后边的用户组目录和git-shell,防止其登录linux系统shell
然后找个放git用户组仓库的地方,注意:说的就是用户组仓库,而不是特指某用户的仓库,比如/home/git
cd /homemkdir git
紧接着建立一个用户仓库a.git
mkdir a.git # 进入该仓库目录 cd a.git # 初始化仓库 git --bare init
开发人员客户端
假设你想把git目录放在d盘的git下,那么你先拿鼠标进到git目录里面,右键点空白处拉出菜单,点击git bash here,如果看不到,你得检查git是否安装在你本机
进到这个黑窗口的git shell之后
# 创建源码目录 mkdir 源码目录名 cd 源码目录名 # 初始化git仓库 git init # 建立一个远程目录别名,以免在本文中 git push 那一步卡住 # 多说一句,如果此时你服务器的SSH的端口变了,就写完整的ssh表达式,例如 # ssh://user_a@www.wkwkk.com:新端口/home/git/工程目录名.git git remote add origin user_a@www.wkwkk.com/home/git/工程目录名.git # 准备添加所有当前的文件,如果这个时候你什么源码文件都没塞进去,你到push那一步就会有报错提示 git add . # 准备代码信息和说明 git commit -m "在这里写你的代码提交说明,比如两个控制器" # 向服务端推送数据,此时如果报错,可查看报错信息,以本文下方问题解决方案来对号入座 git push origin master # 往回拉源代码 git pull origin master
其中,www.wkwkk.com是个域名举例,你得改成自己git服务器的ip或域名。
很多人不知道ssh表达式的写法, 特别是不知道端口和用户名怎么也写在表达式里, 那么仔细看看上文代码的注释吧。
相关命令
其中修改指定用户密码的指令是
passwd 用户名
不想每次都输入ip地址,那么可以修改linux的DNS解析文件
vim /etc/hosts
在文件里添加类似内容,和windows的hosts一样玩
127.0.0.1 www.wkwkk.com
找安全日志的命令
vim /var/log/secure
问题解决方案
SSH端口修改
出于安全考虑,SSH可能不是22号端口,那么尽量使用ssh://完整表达式,例如
git remote add origin ssh://user_a@www.wkwkk.com:端口号/home/git/工程目录名.git
出现错误 error: insufficient permission for adding an object to repository database
这个错误会在开发者使用git push也就是推内容的时候触发, 原因是服务端那边没有赋予足够的权限,这个问题个人开发者很少遇到, 遇到多人协作的情况时状况百出, 原来公司的项目经理就遇到过,被气的脖子上起了个大筋包。也搞不明白为什么偶尔会出现权限不足的状况,后期干脆自己写了个go的定时赋权限的小程序给解决掉了。
有关这个错误,其他站点也有对应的资料,可参考:
http://blog.chinaunix.net/uid-12076195-id-3479088.html
实际尝试,这个办法只能临时解决问题,到自己设定的git工程目录里面去运行以下命令
# 假设当前在用户组目录之前的目录位置,例如用户组目录为/home/gituser,则当前路径应为/home chgrp -R git用户组名 git用户组目录名 chmod -R g+rwX git用户组目录名
顺带提一句,以下命令可以改动git仓库所有者:
# 尝试进入用户组目录来改动git仓库的所有者 cd 用户组目录名 chown -R git用户名:git用户组名 工程名.git
如果只是因为新增一个用户,没有设好他的权限,那么只需要用户组目录下面,单独运行上一行命令就可以解决问题了