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
将公钥告诉给远程仓库
- 复制.ssh目录下的id_rsa.pub文件内的key
- 进入你的github仓库
- 点击用户-setting-SSH and GPG keys在图中3位置粘贴你的key
- 最后点击Add SSH key后会将key生成成功,系统还会给你发送邮件提示
为了验证是否成功,输入以下命令:
$ ssh -T git@github.com
此时,你的秘钥就已经配置成功了
- 此外,还需要输入一下指令存储账号密码,且第一次需要输入账号密码
git config --global credential.helper store
创建远程仓库
本例以gitHub为例
git远程仓库创建很简单,当你利用github账号登录后
- 点击图标处确保返回主页
- 点击绿色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 |
|
- 推送一个已有的仓库代码到远程仓库
1 |
|
- 导入其他远程仓库的代码到这个仓库
远程分支跟踪
上述操作可见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识别不同秘钥呢?
假如在公司,我们已经有了一个工作用的秘钥,此时,可以新建一对秘钥(方法一样,需注意文件名参数需要不一致以保障秘钥不会被覆盖)
创建秘钥
- 创建新的 密钥/公钥,并指定密钥名称,比如id_rsa_x(x为任意名称)
ssh-keygen -t rsa -f ~/.ssh/id_rsa_x -C "yourmail@xxx.com"
操作完成后,该目录会多出 id_rsa_x 和 id_rsa_x.pub 两个文件。
- 清空本地的 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
- 分别测试秘钥连接是否可用
xxx! You’ve successfully authenticated, but GitHub does not provide bash access.
出现上述提示,连接成功
git账户设置(此步骤可不需要,只影响提交的用户名)
- 取消 git 全局用户名/邮箱的设置,设置独立的 用户名/邮箱
- 取消全局 用户名/邮箱 配置
git config --global --unset user.name
git config --global --unset user.email
- 进入项目文件夹,单独设置每个repo 用户名/邮箱
$ git config user.email "xxxx@xx.com"
$ git config user.name "xxxx"
- 取消全局 用户名/邮箱 配置
编辑ssh config文件
没有这个文件可以手动创建一个,文件内容如下
1 |
|
该文件内容的意思是
当你希望克隆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 私钥去请求下载目标仓库。