git|Github|Gitee|远程仓库 的基本使用
本篇主要说几个git的场景,单纯是为了让新手能够快速上手(因为我就是新手,我给我自己写了一篇教学用的文章,没毛病)
注:
- 这里不会去写git能够协同工作的原理(因为我自己还没搞明白,未来我是要去重写git,并改写很多功能的(实际上已经在写了))
- 我不会贴效果图,很麻烦,而且我也贴不好。贴好了事半功倍,贴不好令人反胃。
准备材料(软件):
- 使用Windows的可以先下载一个git,如何安装请自行百度官网下载地址
- git使用教程
启点
从这里开始,博客才正式开始
1. 创建项目,所有事物开始的前置条件
永远的第一步,还未产生分支状况。
打开git服务器,可以使用Github
、Gitee(码云)
或者自己搭建的私有Git服务器
,在里面创建一个仓库,简单的创建就好,跟着流程来,自己搭建的git服务器我还没尝试过,所以暂时不会在文章里说明,等未来做完相关内容的时候补充上去。
2. 配置ssh,我们要用更安全,更快捷的方式使用Git
rsa,一种加密算法,我姑且不说加密原理,但是它有一个特性,rsa会生成一堆密钥,分为公钥和私钥,公钥和私钥可以互相破译。举个例子就是,公钥加密的文本,只有私钥可以解密;同理,私钥加密的文本,只有公钥可以解密。且,rsa加密的破译很难。
ssh公钥,采取rsa加密,信息加密者(A)创建一份私钥a和公钥a,然后将公钥a广播出去,信息接受者(B)拿到公钥a之后自己也创建的一份公钥b和私钥b,然后使用公钥a加密自己的公钥b,然后把这段密文发送给A。这个时候A和B已经可以完成了通信要求,A和B的通信便是将自己的信息使用对方的公钥加密即可。当然,这里还会有几个问题,我只是说一下大致的解决思路。
- 身份问题 在这个问题中,虽然通信加密问题解决了,但是如果有一个窥视者(E)伪装成B用B的公钥发送了消息给A,相当于中间的消息就被篡改了。这种情况下,就要说到签名问题啦,A用自己的密钥给自己的公钥加密,便是签名,B用A的公钥解开了签名,如果密文看到和公钥相同,则发送者的身份完成了认证。完整流程请动动你们小脑瓜子,思考一下吧(才不是因为我懒呢)(提示:
百度密文本身 + 签名)- 加密和解密对于计算机的要求比较高,一般开发来说只是使用rsa加密认证双方的身份信息,下一步其实是传递一个密钥(没记错是这样,我好久没看相关的内容惹),未来的很多加密都会使用另一个加密起来性能较高的方式解决
Gitee的一个账号可以添加多个ssh公钥,也就是说这一个账号的所有仓库可以由多台电脑(用户)管理,如果只是在其它电脑上临时使用,建议使用其它账号(副账号)登陆,在自己仓库账号(主账号)中给副账号授权开发同套代码。当然,如果你主账号用完时候删除账号的ssh公钥也是可行的。
这里我仅说一些通用的内容,如果需要了解细节的话,可以百度相关文章看看。如上所说,我没有部署过私有Git服务,也无法提供其使用方法(理论上应该是和Github
过程相同的,都会有一个UI的)
- 在
GitHub
或者Gitee
里,找到设置,然后找与安全相关的
面板,然后再找到ssh公钥
,停在那个界面,留着一会儿用。 - 创建密钥 打开
git
(bash用户请无视),输入ssh-keygen
,然后敲三次回车(第一次是ssh密钥
保存位置,小本本记下来,回来我们需要用到这个位置;第二次是密码,默认为无密码;第三次是确认密码) ——Linux可能不需要管这些东西,但是Windows的command
可没有这个功能,可以选择使用我在开篇让你们下载的git
软件或者使用Powershell
来完成(个人推荐git,因为,,如果Powershell
要是能完成后续的步骤,我还让你们下载git
干嘛。。。。) - 添加公钥 想必在第一步的时候你们应该看到了添加公钥四个大字(英文版当我没说) 打开你的小本本,发现小本本里记录了使用
git
的完整流程,教程到此结束。。。。咳,然后到密钥保存的文件目录,打开id_rsa.pub
文件(安装了office的话会误识别为通讯录文件,.pub
是公钥(public) 不要双击,右键,然后使用记事本打开,然后把这里面的内容抄十遍将这里的内容全选复制下来,粘贴到第一步打开的界面的那个巨大的输入框里,并命一个名字(另一个小的输入框里)(不要在意我的描述,主要还是看文字,公钥粘贴到公钥栏里,标题就是自己的命名,方便自己识别)),然后点下确定或者提交按钮,完成。
目前为止终于是完成了公钥的添加,为什么感觉我这么累的样子,明明三分钟别人就完成的东西我写了三十分钟不止...
3. 配置关于个人的一些基本信息
我早就说了,Powershell是不能撑到这一步的!!!
打开你的git
,然后配置两个基本信息(本龙王终于开始CV大法好了
,等下,就两行命令??还是留着自己敲着玩吧...)
git config --global user.name "Nidhogg" # ....本王名字你们都打算抄过去,打算干什么?
git config --global user.email "Astroline_kamu@outlook.com" # 这是本龙王我的邮箱,不会真的有人傻傻的要复制过去的吧,不会的吧不会的吧!!!
4. 项目的本地创建以及初次提交
其实我在之前几乎把所有和git有关的文章都看了一遍,甚至自己想要写一个模拟器来辅助教学(自己给自己设立的一个java桌面应用的项目,打算完工的时候开源掉。不过时间太久了,忘得差不多了,很多理论的只是以及全调试流程也都忘了,剩下的只有丢在家里自己写下的一份厚厚的纸质档案,每一页纸都是被我鳖爬般的字迹塞满的)
对于使用者来说,还是不要考虑流程的好,我会把几篇讲细节的文章贴到博客末端(也有可能会忘了,可以发邮件给我找我要的撒(我也想感受一下被被关注的滋味QAQ))
...现在我想写一点引用策略,不过避免文章变得太复杂,只能算了Orz
4.1 在原有项目基础上使用
因为我自己就是在项目已经快做完的时候才有了这个需求,所以我把这个标题写在了前面的说....
原本就有的项目,做两件事就好
- 打开git 在项目根目录下(就是能看到src文件夹的目录(项目内的最外层),反正我建项目都喜欢加src文件夹...轻度强迫症,偏爱结构分层的概念,几乎一生都是在不断的做归类)右键,点击
Git Bash Here
。 - 设置忽略文件 使用git命令
touch .gitignore
创建一份默认忽略文档,具体语法规则可以按照默认文档的格式去写,或者网上搜索。对于我们来说,有很多文件是不需要上传的,比如node
产生的node_modules
或者是java产生的target文件(打包) - 将所有文件添加到缓存区
git add .
后置参数有:1.-u
更新(修改和删除)2.-A
所有变化(修改删除和创建)3..
添加文件(修改和创建) 参考文档 你们已经是成年人了,该看看原生的英文文档了...等下,这里可以选择语言了?!!这不对,以前不是这个样子的,一定哪里出了问题,一定! - 添加远程仓库
git remote add origin<自己起的名字> "你的git仓库地址"
参数参考文章 我就喜欢这种工具文章,简单,方便,易于观看....就是不知道为什么显得我有点啰嗦呢... - 代码提交至本地仓库
git -m commit "这里写你对这次代码推送的一些描述"
参数可以自行百度,-m
(message)参数是比较常用的,用于描述提交的代码 不加的话会跳转至git自带的vi编辑器(我感觉应该是开始安装的时候的选择吧,如果选atom可能就直接跳转atom惹...) - 代码推送至远程仓库
git push origin<第四条起的名字> master:master<可省去冒号单写一个master>
参数参考 - 应该会有个弹窗,需要你输入远程仓库的账号密码(输入一次即可,未来推送则应该大概可能不需要账号密码验证了)
到这里结束,我自己在做的时候换了一台电脑,重新pull
了下代码(报了个小错误),然后重新add
,commit
,然后push
(又是一个小错误),但是问题不大,都能百度到,后面我也会说(可能???)。
4.2 创建项目
适用于写项目之前使用的人们用来复盘或者....学习用???
- 在想要开始项目的地方右键打开git
- 初始化项目
git init
- 以下内容重复
4.1
的3 - 7
点即可
5. git拉取项目,对于到了企业第一次做项目的实习生来说的
在企业的项目中若是接手了别人的项目,代码需要先pull下来(pull下来和本地仓库合并),然后再push(push上去与远程仓库合并)。
下面的内容按照该格式编写:<语法> <实例> <如果有简写的方式>
- 添加远程仓库
git remote add <自己起的名字> <你的git仓库地址>
git remote add origin "你的git仓库地址"
永远要先添加远程仓库,为什么我不把它放在最前面呢,啊,我明白了,你们不会一步步向下看过来的,所以我需要一遍遍的重复着一句话,只是为了能让你记住它的用法。 - 远程仓库与本地仓库合并
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master:master
因远程分支名和本地分支名相同,所以可以简写git pull origin master
6. 我还应该说说关于git分支的概念吧?
分支这个东西非常重要,对于我要做的东西来说,是一个非常核心的模块,这个东西的实现,说不定能改变一个行业的走向(做什么美梦呢)
7. 我应该还要说说关于版本切换的
版本切换是git里我第二喜欢的一个模块了!!!
8. 关于分离头指针我也应该提一下对吧
嗯,为了保持高度统一的格式,我决定在这里加一个引用,然后引用我的这段话...(禁止套娃!!!)