GitHub是目前全世界最大的git远程托管平台,下面记录下如何和远程仓库相互协作
一、创建远程仓库
- 在GitHub上点击你的头像->Your Profile->Repositories->New
- 填入仓库名(你可以认为这就是一个文件夹的名字),除了仓库名是必填的以外其他都是可选项,例如仓库描述、公开或私有、用README文件初始化(如果是新项目强烈推荐勾选这个选项,因为这样可以直接克隆而不需要在本地进行额外的一些同步操作了),如果忘了勾选README也没关系,空仓库中GitHub会给你一个新建文件的提示链接,点击README可以快速创建。如果是已有本地项目的话,就不用添加了了,新建仓库后会有提示教你如何将本地项目和远程仓库关联起来。
二、克隆仓库
- https克隆方式:
git clone https://github.com/hch814/JavaLab.git
该方式走的是https协议,克隆起来很方便,不需要往GitHub账户添加ssh秘钥,但是后续推送很麻烦,需要每次输入用户名密码(mac例外:有钥匙串功能输入一次就会记住了) - ssh克隆方式:
git clone git@github.com:hch814/JavaLab.git
该方式走的是ssh协议,克隆前需要将本地ssh公钥复制到GitHub账户中,否则会报“Please make sure you have the correct access rights”的错误。如果还没有本地ssh秘钥可以使用ssh-keygen
生成,然后输入cat ~/.ssh/id_rsa.pub
查看,将输出的结果复制到SSH keys中(头像->Settings->SSH and GPG keys) - 本地查看远程仓库链接:
git remote -v
如果使用的clone方式是https则显示如下:
如果使用的clone方式是ssh则显示如下:origin https://github.com/hch814/JavaLab.git (fetch) origin https://github.com/hch814/JavaLab.git (push)
origin git@github.com:hch814/JavaLab.git (fetch) origin git@github.com:hch814/JavaLab.git (push)
- 切换链接:
git remote set-url origin https://github.com/hch814/JavaLab.git
或者git remote set-url origin git@github.com:hch814/JavaLab.git
三、拉取和推送
-
拉取:
git pull
若远程仓库有更新(可能是其他人的也可能是你自己在异地的提交),使用该命令可以将更新合并至本地 -
推送:
git push [--set-upstream origin master]
如果你切换过远程仓库链接,那么你后面的第一次推送需要加上–set-upstream origin master -
创建本地分支并同时追踪远程:
git checkout -b <branch name> --track origin/<branch name>
现在考虑一个场景:有时候我们开发需要开一个分支,例如修复bug和开发一个新特性,这样可以有效的并行开发。然后再往GitHub或者GitLab中提交merge request
开分支有两种方式:
一种是在远程开好分支,本地直接拉下来$ git checkout -b feature-branch origin/feature-branch #检出远程的feature-branch分支到本地
另一种是本地先开好分支然后推送到远程
$ git checkout -b feature-branch #创建并切换到分支feature-branch $ git push origin feature-branch:feature-branch #推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)
四、代理设置
由于某些不可抗拒因素导致我们访问GitHub很慢,设置代理后可以提高拉取和推送的速率
- 查看飞机场的监听地址和端口
- 设置http代理
git config --global http.proxy "socks5://127.0.0.1:1086" git config --global https.proxy "socks5://127.0.0.1:1086"
- 设置ssh代理
$vim ~/.ssh/config # 必须是 github.com Host github.com HostName github.com User hch814 # 走 HTTP 代理 # ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=1087 # 走 socks5 代理(如 Shadowsocks) ProxyCommand nc -v -x 127.0.0.1:1086 %h %p