Git-远程库

PUSH 提交

在Github上创建远程库后,进入仓库页面,获取HTTPS / SSH 。Git支持多种协议,但通过ssh支持的原生git协议速度最快。

1552406762673

如果是已创建的仓库,可以在Clone or download 按钮下获取

1552439806502

根据github的提示,创建一个新库时的操作如下:

//…or create a new repository on the command line   
git init
git add README.md
git commit -m "first commit"
git remote add origin 【这里换成远程库的 HTTPS/SSH】
git push -u origin master

git push origin与git push -u origin master的区别

  • $ git push origin 将当前分支推送到origin主机的对应分支。
  • $ git push 不带任何参数的git push,默认只推送当前分支,这叫做simple方式。
  • $ git push -u origin master 将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。

保存远程库地址别名

1552435197602

提交到远程库

1552435609526

1552435769231

CLONE 克隆

git clone [远程库地址 HTTPS/SSH]

效果:

  • 完整地将远程库下载到本地
  • 自动创建远程地址别名
  • 初始化本地库(/.git 文件夹)

1552436261348

关于使用SSH连接时报错

问题描述

//错误信息
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

1552440794236

上面以SSH方式访问用项目出现权限问题

设置SSH免密登录

1.首先,如果你没有ssh key的话,在git.bash窗口输入

ssh-keygen -t rsa -C [邮箱地址] //注意大小写

1552444803020

途中会让你输入密码啥的,不需要管,一路回车即可,会生成你的ssh key。(如果重新生成的话会覆盖之前的ssh key)

操作成功后会在C:\Users\Administrator用户目录下生成一个.ssh目录,Id-rsa是你的私钥,id_rsa.pub是公钥,内容如下:

1552441413226

 2.然后再ternimal下执行命令:

ssh -v [email protected] 

  最后两句会出现:

1552442931616

  3.这时候再在ternimal下输入:

ssh-agent -s 

  然后会提示类似的信息:

1552443097088

  4.接着再输入:

ssh-add ~/.ssh/id_rsa

  这时候应该会提示:

  Identity added: ...(这里是一些ssh key文件路径的信息)

如果出现错误提示:

Could not open a connection to your authentication agent.

请执行命令:ssh-agent bash 再执行即可。

关于 ssh-agent 和 ssh-add 命令

ssh-agent是管理多个ssh key的代理,受管理的私钥通过ssh-add来添加

好处1:不用重复输入密码。

好处2:不用到处部署私钥

  5.打开你刚刚生成的id_rsa.pub,将里面的内容复制,进入你的github账号,在settings->SSH and GPG keys->new SSH key,title随便取一个名字,然后将id_rsa.pub里的内容复制到Key中,完成后Add SSH Key。

  6.验证Key

  在ternimal下输入命令:

  ssh -T [email protected]

  提示:Hi xxx! You've successfully authenticated, but GitHub does not provide shell access. 表示配置成功。

PULL 拉取

git pull命令其实是 git fetchgit merge 操作的结合。

git fetch

git fetch origin master //将远程仓库内容下载到本地库,但未合并分支

1552452847479

将更新git remote 中所有的远程仓库所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中
git fetch更新远程仓库的方式如下:

git fetch origin master:tmp 
//在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
git diff tmp 
//来比较本地代码与刚刚从远程下载下来的代码的区别
git merge tmp
//合并temp分支到本地的master分支
git branch -d temp
//如果不想保留temp分支 可以用这步删除

FETCH_HEAD: 是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。

commit-id:在每次本地工作完成后,都会做一个git commit 操作来保存当前工作到本地的repo, 此时会产生一个commit-id,这是一个能唯一标识一个版本的序列号。 在使用git push后,这个序列号还会同步到远程仓库。

git pull

git pull <远程主机名> <远程分支名>:<本地分支名>
//取回远程主机某个分支的更新,再与本地的指定分支合并。

1552453671179

多人协作

加入团队

大多数情况我们是需要多人完成同一个项目。当另外你的同事在另外一台电脑上clone了你的项目,忙碌了一天后准备把他的劳动成果push到远程库时,会发现报如下错误:

1552446539779

这是因为该账户还没有加入团队,此时你可以在项目的远程仓库下邀请该账号加入

1552446885350

1552447431241

1552447905000

需要将邀请链接发给你的同事,并在他的github账号下登录后访问该链接,点击同意就可以了。

此时再输入git push origin master 命令时发现不需要再输入密码了。这里需要解释一下,其实Git本身并不保存密码,而是windows自带的凭据管理器保存了该信息,可以在控制面板搜索该功能进行修改。

1552448174564

解决冲突

1552454742378

如果不是基于Github最新版所做的修改,不能推送,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送。

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

总结

  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

跨团队合作

1552455551650

1552456207411

需要先以乙方团队的账号对项目仓库进行Fork操作,这时该项目相当于在乙方团队账号下进行了备份,该库就相当于乙方团队的,操作和之前都一样。

当乙方团队需要将自己的远程库版本信息退送给甲方团队时,可以使用Pull request 进行推送。

1552456603284

1552456888140

参考文献

git push origin与git push -u origin master的区别

Permission denied (publickey). fatal: Could not read from remote repository.1

Permission denied (publickey). fatal: Could not read from remote repository.2

Permission denied (publickey). fatal: Could not read from remote repository.3

ssh-agent

Git文档-添加公钥到Github

详解git fetch与git pull的区别

猜你喜欢

转载自www.cnblogs.com/jerzy/p/10535302.html