1、第一个错误:non-fast-forward
多人协同开发,使用Git经常会看到警告信息包含术语:fast forward, 这是何义?
简单来说就是提交到远程中心仓库的代码必须是按照时间顺序的。
比如A从中心仓库拿到代码后,对文件f进行了修改。然后push到中心仓库。
B在A之前就拿到了中心仓库的代码,在A push成功之后也对f文件进行了修改。这个时候B也运行push命令推送代码。
会收到一个类似下面的信息:
- chenshu@sloop2:~/work/189/appengine$ git push
- To ssh://csfreebird@10.112.18.189:29418/appengine.git
- ! [rejected] master -> master (non-fast-forward)
- error: failed to push some refs to 'ssh://csfreebird@10.112.18.189:29418/appengine.git'
- To prevent you from losing history, non-fast-forward updates were rejected
- Merge the remote changes (e.g. 'git pull') before pushing again. See the
- 'Note about fast-forwards' section of 'git push --help' for details.
fast forward能够保证不会强制覆盖别人的代码,确保了多人协同开发。尽量不要使用non fast forward方法提交代码。
git push 错误,因为没有先pull最新的代码,需要以下操作:
- $ git fetch origin
- $ git merge origin/master
- $ git push origin master
$ git fetch origin
$ git merge origin/master
$ git push origin master
{
#设置远程仓库路径方法
git remote add origin /home/BD_Egreat/apk_update/Elancher.git/
}
如果安装git后没有设置你的用户名称和e-mail地址,还需要先执行:
- $ git config --global user.name "cbk"
- $ git config --global user.email <a href="mailto:cbk@ylf.com">cbk@ylf.com</a>
$ git config --global user.name "cbk"
$ git config --global user.email cbk@ylf.com
这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:
重申一遍,你只需要做一次这个设置。如果你传递了 --global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。
具体到此问题,如果没有设置你的用户名称和e-mail地址,则一直正确无法push代码。
2、第二个错误:insufficient permission for adding an object to repository database .git
(去仓库里的object文件夹下 执行 chmod 777 -R *)
Git在pull时报错,发生情况如下:
- [lixinglei@bogon my]$ ll -a|grep .git
- drwxrwxr-x. 8 lixinglei lixinglei 4096 6月 6 19:58 .git
- -rw-rw-r--. 1 lixinglei lixinglei 109 4月 23 14:02 .gitignore
- [lixinglei@bogon my]$ cd .git
- [lixinglei@bogon .git]$ cd objects/
- [lixinglei@bogon objects]$ ll | grep root
- drwxr-xr-x. 2 root root 4096 5月 27 19:37 3b
- drwxr-xr-x. 2 root root 4096 5月 27 19:37 68
根据报错提示,发现是" .git/objects "下有些文件的归属有问题 :
- [lixinglei@bogon my]$ git pull git@XXX.XXX.XXX.XXX:XXX.git
- remote: Counting objects: 29, done.
- remote: Compressing objects: 100% (22/22), done.
- remote: Total 22 (delta 17), reused 0 (delta 0)
- error: insufficient permission for adding an object to repository database .git/objects
- fatal: failed to write object
- fatal: unpack-objects failed
使用root登录并进入该目录:
- [root@bogon objects]# ll | grep root
- drwxr-xr-x. 2 root root 4096 5月 27 19:37 3b
- drwxr-xr-x. 2 root root 4096 5月 27 19:37 68
- [root@bogon objects]# chown lixinglei: 3b
- [root@bogon objects]# ll | grep root
- drwxr-xr-x. 2 root root 4096 5月 27 19:37 68
- [root@bogon objects]# chown lixinglei: 68
- [root@bogon objects]# cd 68
- [root@bogon 68]# ll
- 总用量 4
- -r--r--r--. 1 root root 213 5月 27 19:37 cb6ab3332e342158b1b27341a2c396cd570a4c
- [root@bogon 68]# chown lixinglei: cb6ab3332e342158b1b27341a2c396cd570a4c
- [root@bogon 68]# cd ../
- [root@bogon objects]# cd 3b
- [root@bogon 3b]# ll
- 总用量 4
- -r--r--r--. 1 root root 1647 5月 27 19:37 d60abd850ecacb4002ed870176172426f662d2
- [root@bogon 3b]# chown lixinglei: d60abd850ecacb4002ed870176172426f662d2
重新在git pull,成功