1271290
1.客户端和服务器端安装git (sudo apt-get install) 2.在服务器端可以直接再root下面建立自己的git仓库也可以建一个用户git 在里面建git仓库
步骤为:
- 创建git init -bare (仓库名) //使用--bare参数因为我想把项目放在库外面,如果项目放在仓库里面可以不适用
- 在客户端进行跟服务器仓库关联 git remote add origin (用户名如root)@(服务器ip):(仓库路径) git remote add必须在仓库目录下执行
- 现在你可以clone,但你需要在客户端每次需要输入密码,所以你可以把客户端公钥(在~/.ssh/id_rsa.pub里面用vi打开)复制到服务器端authorized_keys(在~/.ssh里面用),如果不存在用vi 新建authorized_keys复制进去就行,这样就不需要每次都输密码
- 现在已经可以在本地向服务器仓库上传文件了(详情看 廖雪峰老师的git教程),git push origin master这时候可能出现如下错误,这是因为你用户权限不对(我是给仓库给了root权限本应该给git权限我也不太懂) remote: error: insufficient permission for adding an object to repository database ./objects remote: fatal: failed to write object error: unpack failed: unpack-objects abnormal exit To git×××××:/home/git/project ! [remote rejected] master -> master (unpacker error)
3.自动同步
现在建成的只是库,你可以在别的机器克隆到该项目,但你不能在仓库看到,所以需要写个脚本来实现git的钩子(hooks)来实现自动把其他机器上传的文件更新的工作目录,也可以使用直接把仓库clone到工作目录但需要手动git pull origin master,钩子(hooks)是一些在$GIT-DIR/hooks目录的脚本, 在被特定的事件(certain points)触发后被调用。所以下面我们需要新建一个post-receive(post-receive:这个hook由远程资源库的'git-receive-pack'触发,此时,本地资源库的'git push'已经完成,且所有ref已经更新.) sudo vim post-receive 并写入 #!/bin/sh
GIT_WORK_TREE=/XXXX/XXXX git checkout -f //其中/XXXX/XXXX为你的工作目录 再设置文件权限sudo chmod +x post-receive这样就能实时更新了 git错误集合