git远程仓库

Git 远程仓库(Github)

Git 并不像 SVN 那样有个中心服务器。

目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上。此时就需要远程仓库服务器来存放大家的代码,主要流行的远程仓库有github,gitlab等等。

添加远程仓库

添加秘钥SSHKey操作

实际上我们不需要SSHKey也可以提交代码或从远程仓库拉取代码,但是每次提交都会提示我们输入你的gitHub账号密码。因此配置SSHKey可以帮助我们实现gitHub的免登录解决很多烦恼。其原理主要是通过git指令生成一对秘钥(公钥和私钥),git是免登陆是基于非对称加密。我们将我们的公钥交给gitHub远程仓库服务器,当我们提交代码远程服务器需要验证用户时,会利用我们的公钥加密一段信息给我们,随后我们用本地的私钥去解密这段信息,如果解密成功则可证明我们是合法用户,因而省去了输入账号密码验证用户的过程。

生成SSHKey

如下指令是生产秘钥的指令

$ ssh-keygen -t rsa -C "youremail@example.com"

  • 其中参数中的email需要改为你在github官网注册的邮箱同时也是你的github账号

  • 由于我已有一个key因此会提示是否覆盖,之后会要求确认路径和输入密码(可忽略)
  • 上图中会看到SSHkey生成的默认路径为用户目录下的.ssh目录(是一个隐藏目录)

添加秘钥到ssh-agent

确保 ssh-agent 是可用的。ssh-agent是一种控制用来保存公钥身份验证所使用的私钥的程序,其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。

eval "$(ssh-agent -s)"

添加生成的 SSH key 到 ssh-agent。

$ ssh-add ~/.ssh/id_rsa

将公钥告诉给远程仓库

  1. 复制.ssh目录下的id_rsa.pub文件内的key
  2. 进入你的github仓库
  3. 点击用户-setting-SSH and GPG keys在图中3位置粘贴你的key

  1. 最后点击Add SSH key后会将key生成成功,系统还会给你发送邮件提示

为了验证是否成功,输入以下命令:

$ ssh -T git@github.com

此时,你的秘钥就已经配置成功了

  1. 此外,还需要输入一下指令存储账号密码,且第一次需要输入账号密码

git config --global credential.helper store

创建远程仓库

本例以gitHub为例

git远程仓库创建很简单,当你利用github账号登录后

  1. 点击图标处确保返回主页
  2. 点击绿色new按钮,新建一个远程仓库,后续按说明提示新建一个仓库即可

其实这里我们只需要填一个版本仓库的名字,点击Create repository就OK了。

关联远程仓库

关联仓库路径

首先需要添加远程仓库,shortname可认为是远程仓库的别名,方便以后建立分支后指定远程仓库等操作,通常我们用origin(实际上本操作相当于给远程仓库的url取别名)

git remote add [shortname] [url]

  • 参数shortname为别名
  • 参数url可从github远程仓库中获取如下图

url可从创建成功后的远程仓库中获取到,如下图

也可以在仓库主页上点击绿色按钮”Clone of download”获取到

具体操作

  • 此处包含查看别名,删除别名新增别名等操作

推送分支到远程

  • $ git push -u origin master

将本地的master分支推送到origin主机,同时指定origin为默认主机;-u参数标识将后面两个参数设为默认,以后push就不用加origin master参数了

  • 关于其他分支

如果需要提交其他分支也是需要先将其他分支切换为当前分支然后push如下

$ git checkout fa

$ git push -u origin fa

扩展

在创建一个新的远程仓库后,也可以参考github给的提示操作

  • 在本地创建一个新的仓库并关联远程仓库
1
2
3
4
5
6
echo "# justTest" >> README.md  //编辑README.md文件
git init //在本地目录初始化一个git仓库管理这个目录
git add README.md //添加提交代码
git commit -m "first commit" //提交代码到本地仓库
git remote add origin https://github.com/AndrewJiao/justTest.git //设置远程仓库别名
git push -u origin master //推送代码并设置关联指定远程仓库
  • 推送一个已有的仓库代码到远程仓库
1
2
git remote add origin https://github.com/AndrewJiao/justTest.git
git push -u origin master
  • 导入其他远程仓库的代码到这个仓库

远程分支跟踪

上述操作可见r分支只能提交远程仓库的master分支,其他分支也是,倘若我们想从本地A分支提交代码到远程B分支,又或是想查看upsteam(上游)分支是否是我们要提交的分支该怎么办?

git branch --set-upstream branch-name origin/branch-name

branch-name分支追踪远程分支origin/branch-name

git branch -u origin/serverfix

也可以用上述指令设置当前分支跟踪远程分支origin/serverfix


  • 如果要查看本地与远程upstream分支的追踪关系可用以下指令

git branch -vv

使用两个秘钥

我们在家里和在公司用不同的电脑提交到我们的远程仓库时,均可以用同一个秘钥,如果你忘记拷贝秘钥到公司,也可以在公司生成一个新的秘钥以同样的方式添加的远程仓库中。那么,如果我们想在同一个地方用不同的秘钥登录不同的远程仓库,应该如何操作才能让git识别不同秘钥呢?

假如在公司,我们已经有了一个工作用的秘钥,此时,可以新建一对秘钥(方法一样,需注意文件名参数需要不一致以保障秘钥不会被覆盖)


创建秘钥

  1. 创建新的 密钥/公钥,并指定密钥名称,比如id_rsa_x(x为任意名称)

ssh-keygen -t rsa -f ~/.ssh/id_rsa_x -C "yourmail@xxx.com"

操作完成后,该目录会多出 id_rsa_x 和 id_rsa_x.pub 两个文件。

  1. 清空本地的 SSH 缓存,添加新的 SSH 密钥 到 SSH agent中

ssh-agent bash

初始化操作

ssh-add -D

清除缓存

ssh-add ~/.ssh/id_rsa_github
sh-add ~/.ssh/id_rsa_gitlab

添加两个私钥给SSH agent管理中心,如果在.ssh目录下可省略文件路径 :ssh-add id_rsa_github

ssh -T git@github.com

ssh -T git@gitlab.com

  1. 分别测试秘钥连接是否可用

xxx! You’ve successfully authenticated, but GitHub does not provide bash access.

出现上述提示,连接成功

git账户设置(此步骤可不需要,只影响提交的用户名)

  • 取消 git 全局用户名/邮箱的设置,设置独立的 用户名/邮箱
    1. 取消全局 用户名/邮箱 配置
      • git config --global --unset user.name
      • git config --global --unset user.email
    2. 进入项目文件夹,单独设置每个repo 用户名/邮箱
      • $ git config user.email "xxxx@xx.com"
      • $ git config user.name "xxxx"

编辑ssh config文件

没有这个文件可以手动创建一个,文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 第一个账号,默认使用的账号
Host github
HostName gitlab.abc.net
User ypjiao
IdentityFile ~/.ssh/id_rsa
# 第二个账号
Host gitlab # second为前缀名,可以任意设置
HostName gitlab.com
User Andrew_Jiao
IdentityFile ~/.ssh/id_rsa_jiao


# 配置文件参数
# Host : Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件(可以直接填写ip地址)
# HostName : 要登录主机的主机名(建议与Host一致)
# User : 登录名(如gitlab的username)
# IdentityFile : 指明上面User对应的identityFile路径
# Port: 端口号(如果不是默认22号端口则需要指定)

该文件内容的意思是

当你希望克隆Andrew_Jiao@gitlab.com:tik5213/aspirin-release-manager.git这个仓库时。你可以使用如下命令来克隆:

git clone home:tik5213/aspirin-release-manager.git

  • testrepo 替换成 git@gitlab.abc.net (即 HostName + User) 最终,使用 IdentityFile 中指明的 ~/.ssh/testrepo_rsa 私钥去请求下载目标仓库。

git远程仓库
https://andrewjiao.github.io/2018/12/24/GIT之远程仓库/
作者
Andrew_Jiao
发布于
2018年12月24日
许可协议