我们接着学习git,到目前为止,我们学习了
git init
git status
git add [file]
git commit (-m [describtion])
git diff
git log
git rm [file]
git checkout -- [file]
**git reset HEAD **[file]
具体可以到GIt本地相关操作(一)与git本地相关操作(二)查看
接下来我们继续学习git基于本地仓库与远程仓库交互的,相关操作
一.关联远程仓库
1. 生成密钥
为了保证远程仓库能够唯一识别一电脑主机的操作,同时保证我们与远程仓库通信的安全,我们需要创建一个SSH key并且在git远程仓库中配置,我们进入linux当前登录的用户目录中,打开.ssh目录查看是否有"id_rsa"和"id_rsa.pub",若没有就执行以下的命令:
ssh-keygen -t rsa -C "example@mail.com"
这里的邮箱也是随意定义的,但是还是建议有实际意义的,执行完成以后到“~/.ssh/”目录下,能看到上述两个文件,如图:

但是我们希望执行sudo命令的时候,要在当前用户的路径下生成文件而不是在root用户目录下呢,我们可以执行以下命令来实现:
sudo ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key<hr>
2. 在远程仓库进行注册
笔者使用的是开源中国提供的git服务,大家也可以选择其他的,其操作大同小异。将“id_rsa.pub”公钥中的内容复制 出来添加到远程的git服务中去,具体操作如下图所示:


3. 创建远程仓库

4. 关联远程仓库
在远程仓库获取http协议的连接或是ssh协议的连接地址,如图:


5. 推送文件到远程仓库
目前本地仓库是有文件的,但是远程仓库是空的,我们需要将本地仓库的文件推送到远程仓库上,这样其他人才能从远程仓库获取到文件进行编辑和修改,实现协同工作的目的。
执行"git push -u origin master"命令,如图:

首先,git push是将本地仓库的数据push到远程仓库,-u的作用是本地仓库第一次向远程仓库推送数据时简历关联,origin是指我们在执行“git remote add origin [远程仓库地址]"以后orgin就代表了远程仓库,而master则是值远程仓库的分支名称,目前远程仓库的分支只有一个默认分支master
然后,我们执行"git push -u origin master"会有一些朋友出现上图上半部分展示的错误信息,我查了相关资料,意思就是说我们在新建远程仓库以后,远程仓库会默认创建一些文件,而这些文件本地仓库没有的,这就藏成了。本地仓库和远程仓库都有彼此没有的文件,解决这种状况有两种方案:
- 强推覆盖远程仓库已有的文件
- 本地仓库拉取远程仓库的文件,本地实现合并然后再push
本文为了省事使用了第一种方案,实际开发过程中推荐第二种方案,相关文章链接:my.oschina.net/uniquejava/…
6. 提交编辑到远程仓库
在第5小节的时候,我们已经将本地仓库与远程仓库的数据实现同步,下面我们在本地修改一下文件然后再把修改的内容提交到远程仓库。



7.从远程仓库复制
通过“git clone <ssh地址或htttps地址或http地址>”来下载远程仓库中的文件到本地,我们继续使用之前的远程仓库,在本地换个目录就可以创建一个新的本地仓库,且两个仓库之间互不影响。如图,我们到远程git获取远程仓库的地址:

到本地执行"git clone"命令下载代码:


二.总结
1. ssh key
是git远程仓库唯一区分本地仓库主机的标识也是安全通信的保证
2. git remote add origin [远程仓库地址]
本地仓库管理远程仓库,并且在本地可以通过orgin来标识, **[远程仓库地址]**可以是ssh协议地址或是http协议地址
3. git remote -vv
查看本地仓库关联的远程仓库地址信息
4. git push origin
分支名称将本地仓库的文件推送到远程仓库,-u表示将本地仓库与远程仓库进行管理,仅在第一push时使用,-f表示强推,orgin在这里的代表的含义要明确,分支名称,就是我们提交的数据是推送到远程仓库的具体分支上
5. 当本地git文件信息与远程仓库文件冲突时的两种解决方案:
- 强推
- 本地同步远程仓库数据,本地解决再push
实际中推荐第二种
6. git clone复制远程仓库的文件到本地目录中
上一节:Git本地相关操作(二)