在OS环境下在VScode内使用github基础(一)本地仓库中已经介绍了,如何在本地新建一个仓库。这里将继续介绍一下自己将本地仓库与远程仓库建立连接的方式。
新建的本地仓库与clone下来的本地仓库间还是有着比较大的区别的。由于从远程clone到本地的分支自动建立关联,而本地与远程建立了pull的关系但无法push,强行push会出现upstream问题,建立连接的过程会比较繁琐,在大部分情况下,直接在github内建立仓库然后clone至本地会是更加简便的方法。
上篇文章中,已经完成了本地仓库的建立与commit操作,接下来要实现的就是将本地仓库push至远程仓库。
1. 配置SSH
1.1 生成SSH
上传github有两种方式,使用配对的SSH密钥或者账号密码方式,前者一次设定即可,后者应该也有记忆功能,但在个人使用过程中出不来要求输入密码的界面,有两次出现后输入密码后并不显示,光标在原地不动,根据他人经验贴,实际密码已经输入进去了,只需要回车即可。有兴趣的读者可以自己尝试,若知道为何时而才出现输入密码命令,希望可以分享一下~这里密钥的配置方法也是手册的直接转述。
密钥一般默认存储在~/.ssh目录下,生成密钥前,可以首先检查一下是否已经生成过密钥。使用 cd ~/.ssh 命令,若有密钥将会出现以下内容:
$ cd ~/.ssh
ls
authorized_keys2 id_dsa known_hosts
config id_dsa.pub
其中.pub文件为公钥而另一个即对应的私钥。第一次设置本地仓库连接前应当是没有密钥的,需要我们生成一对公钥与私钥。输入ssh-keygen -t rsa -C "邮箱地址" 命令后,就可以看到以下文本了
$ ssh-keygen -t rsa -C "email@email.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/schacon/.ssh/id_rsa):
Created directory '/home/schacon/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/schacon/.ssh/id_rsa.
Your public key has been saved in /home/schacon/.ssh/id_rsa.pub.
The key fingerprint is:
d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local
其中后面的几行是分开出现的,只需要我们按几次enter键确认即可。当最后四行出现时,我们的密钥就生成完毕了,然后再使用 cat命令调用出.pub文件即公钥的内容,并复制到github中就完成了SSH的配置。要复制的内容是从第二行开始的所有文本。
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3N...
...NrRFi9wrf+M7Q== schacon@mylaptop.local
1.2 在gihub中配置SSH
复制好公钥后,登陆github帐户,点击头像,依次点击Settings -> 左边栏 SSH and GPG keys -> New SSH key,会出现两个内容框tittle与key,在key中粘贴刚才复制的公钥,tittle可以随便输入,建议设置为私钥所在的设备,如Steve's Macbook Air。
2. 初次上传
cd 项目所在目录 #首先cd至项目所在目录
git init #初始化本地仓库,若已初始化可以省略
git add README.md
git commit -m "first commit" #add并commit''README.md''文件至本地仓库中
git remote add origin git@github.com:XXXX/XXXX.git #初始化所要上传的远程仓库
git push -u origin master #将本地仓库push至远程仓库
代码中前四行为本地仓库操作不做赘述。刚开始操作时,只需复制黏贴所有内容即可,若想要更好理解5、6两行的内容,后面是一些解释说明。
首先,第5行''git remote add origin''后的内容是仓库地址,要获取地址在仓库内点击clone -> Use SSH 就可以看到SSH方式上传所用的仓库地址,直接复制即可。初始化远程仓库后,所在的本地仓库在之后都会以此作为对应的远程仓库。以后要是想知道这个仓库对应远程仓库信息,使用git remote -v命令即可。
git remote -v #查看当前对应的远程仓库信息
如果想要更改对应的远程仓库,就需要首先删除当前设置的origin,然后再次添加新的origin。
git remote rm origin #删除设置
git remote -v #再次查看远程信息应当不会显示任何内容
git remote add origin git@github.com:XXXX/XXXX.git #初始化所要上传的远程仓库
关于origin具体所指的是什么,可以参考这篇文章github中origin和upstream的区别。
然后,我们再来解释'git push -u origin master'命令。git push十分易于理解,即一个push命令。使用参数-u是因为使用后,下次可以直接使用git push代替git push origin master。master是指定上传master分支。
$ git push
The current branch master has no upstream branch.To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
若看过上一个文章链接,会对upstream有更多一些的理解。具体对此命令解释可以参考此篇文章git push origin和git push -u origin master区别。
*可能遇到的问题:
如果远程仓库并非一个新建的空仓库,直接push,github会操作失败。因为本地和远程的内容不一致,远程有本地所没有的文件,github并不会只把本地仓库中远程仓库没有的文件或后续更新上传。我们首先需要把远程仓库文件pull到本地。使用git pull命令即可。若出现问题可以尝试以下命令:
git pull origin master --allow-unrelated-histories #这个命令会强制把远程库中不在本地的文件全部pull到本地
接下来再使用git push即可,如果成功,打开github,会看到之前在本地但不在远程仓库中的文件已经被添加进了仓库中。
一点备注:
个人在VScode内使用github时,基本都是使用终端操作,只有commit和push可能会使用VScode内的按键而非终端命令。不过,VScode目前觉得唯一的优点在于可以很方便的看到仓库内版本状况,如文件在仓库内但还未追踪,或是更改后但尚未commit。
以上就是目前为止的进度,关于github的使用暂时探索到这个程度。
原本准备4月10号更的文章一直拖到现在才更,是由于之前毕业论文要求定稿了,又有两场考试突然通知,急急忙忙需要复习,今晚八点刚刚完成了考试,安排接下来的计划时,想起欠的这篇文章赶紧写掉。距离毕业只剩下答辩和一门通识课程了,接下里会安心学习编程和CFA,可以返校后也要拿到教材开始复习考研了。