先放几个参考资料,用浏览器打开备用
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搭好再说。
先建立个用户组,例如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
注意:如果这个目录你给写错了,比如写成/user/bin/git-shell,那么/user目录并不存在时,就会不停地报permission denied的错误。
然后找个放git用户组仓库的地方, 说的就是用户组仓库,而不是特指某用户的仓库,比如/home/git
cd /home mkdir 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或域名
相关命令
其中修改指定用户密码的指令是
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
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 # 如果只是因为新增一个用户,没有设好他的权限,那么只需要用户组目录下面,单独运行上一行命令就可以解决问题了