
起因
都说做攻城狮是需要积累的,果然不错,积累到一定阶段就会发现自己已经弄了很多东西,但是这些东西都很零散不好管理。然后就想,有什么工具可以帮我管理这些东西呢?这时候,一个以前一直觉得没用的东西就跳入脑海了:GitHub。
没错,GitHub就是用来管理零散的物件的仓库,而Git则是配套的工具。
Git和GitHub的基本概念
在学习一个新工具的时候,我们首先需要了解关于新工具的一些基本概念。这是非常重要的一个步骤,如果连基本概念都不了解,你能用只不过是运气好而已,遇到一点问题就会不知所措。要解决这些问题最根本的就是要靠这些基本概念,也就是我们平常所说的基础。那么,Git和GitHub的基本概念有哪些呢?
Git是什么?
Git是全球最先进的分布式版本控制系统。重点是版本控制系统,前面的都是噱头。
那么什么是版本控制系统呢?
想象一个这样的场景:你正在写一个文件,名叫游戏策划案.docx。写完之后,给老板看,结果老板说要改,你一想,那就改吧,谁让他是老板呢。接着,你的游戏策划案(改).docx完成了,继续给老板过目。
这时候,老板办公室正好有其他人在,就一起看了这份文档,其他人自然也想发挥一下他们的聪明才智,就提出了各种各样的意见,老板一拍桌子,改!你就回去继续改你的策划案了。经过了无数的挣扎和煎熬,你的游戏策划案(改改).docx完成了。
然后,你满怀希望地又走进了老板办公室,结果发现老板办公室又有人了。他们也对这个策划有点看法,于是你就又回去修改了,这时候你发现要写得东西太多,你想让别人帮忙一起弄,然后拷贝了一份游戏策划案(改改)-副本.docx给了他。又经过了一番挣扎,终于把游戏策划案(改改改).docx完成了,这时候同事的游戏策划案(改改改)-副本.docx也完成了,你就纠结了!怎么合并这两份文档呢?
好不容易将文档合并好了,你又满怀希望地去了老板办公室,老板看了你的策划案之后,悠悠的说了一句:“还是之前的策划比较好”。Duang,你就倒地了,上哪去找之前的策划案啊?

这个时候,就需要Git出马了。你可以将所有的修改通过Git提交,保存每一次修改的副本,这样你就可以在任何时候获取到以前改过的版本。更棒的是,它可以让你同事也受益,你不用再拷贝文档给同事让他改,而是从Git仓库中获取文档,改完之后提交,你使用Git扫一眼就看出有什么差别,这样就太省事了。
注意:所有的版本控制系统都只能跟踪文本文件的改动,比如txt文件、网页、程序代码等等,Git也不例外。
GitHub是什么?

GitHub是一个仓库。使用Git总是需要一个保存这些文件的地方,这个地方就是仓库。你可以在本地创建一个仓库,也可以使用远程仓库,GitHub就是一个远程仓库。你可以将代码或者文档保存到这个仓库里,别人也可以访问你的仓库,从你的仓库中获取你想要分享的重要内容。同时,其他人修改了仓库中的内容也可以上传(当然需要经过你的同意),这样,你的内容就更完整,更充实了。
Git在Windows上的安装
因为笔者是在Windows下进行开发,所以只介绍Windows下的安装方式。其实很简单,去官网下载安装程序,然后一路next安装完成即可。安装完成后,在某一个目录下面右击查看是否有Git的按钮,如果有,表示已经安装成功:

点击Git Bash Here按钮,打开Shell,我们还有最后一步要设置。在命令行下面输入:
git config --global user.name "Name"
git config --global user.email "email@email.com"
用你的名字和电子邮件地址替换上面的Name和email@email.com。因为Git是分布式版本控制系统,所以每个机器都需要又自己的“门牌号”,name和email就相当于是你机器的门牌号。不用担心有人故意冒充别人的门牌号,这是有办法可以查的。
Git的基本操作
设置好后,我们来熟悉一下基本操作。最常用的操作有:
- 初始化仓库
- 添加文件
- 提交修改
- 状态查询
- 文件比较
- 日志查看
- 版本回滚
- 删除文件
初始化仓库
随便在哪个目录下创建一个文件夹,取名为repository,表示仓库。当然你可以随便取什么名字,只要不取中文名就可以(路径中也不能有中文)。
在repository文件夹下启动Git命令行,输入下面的命令:
git init
当看到有如下的输出的时候,仓库就初始化好了:

打开repository文件夹,发现文件夹下面有一个.git的隐藏文件夹:

添加文件与提交修改
在repository目录下新建一个readme.txt文件,输入两行文字:
Git is a very useful tool.
GitHub is a very wonderful repository.
我们只需要简单的两步就可以将readme.txt文件纳入Git的管辖下。第一步:将文件添加到仓库。第二步:提交文件到仓库。转换成Git命令就是:
git add readme.txt
git commit -m "Add readme file"
解释一下'git commit'命令,-m
参数后面输入的是本次提交的说明,比如"Add readme file"这种。说明必须是有意义的,说明本次提交了哪些内容,做了什么修改,这样别人不用看你的文件光看说明就可以知道你做了什么,便于协作。

提醒:每次提交都必须有有意义的说明,否则时间长了就会找不到文件!!!
状态查看
继续修改文件,添加一行I use git to control my files.
。这时候,有一个快递来了,你去收了个快递,回来之后忘记了这个文件有没有提交怎么办?哼哼,别急,有方法。在Shell中输入git status就可以看到了:

Git提示,有一个文件修改了但是没有提交,修改的文件是readme.txt。
文件比较
一个激灵,你忘了修改了什么东西,于是使用另一个命令来比较文件:
git diff readme.txt
git就提示了你有什么东西修改了:

确定无误之后,你使用
git add
和'git commit'命令上传了文件。为了确定上传成功,你又使用了'git status'命令查看状态,发现上传成功了。
日志查看与版本回滚
某天夜里,你加班到很晚,心里非常烦躁,咒骂着老板没人性,在文档里写下了My boss is so stupid
并且提交了。第二天,你清醒了,那个着急啊,写了老板坏话还提交了,要是被老板看到了这不得翻了天吗。可是你忘了提交的版本号,这可怎么办?赶紧查git手册,所幸发现了一条命令可以查看日志,于是你兴高采烈的输入了git log
:

终于抓到了罪魁祸首,就是那个'my boss is stupid'的版本。这下你就放心了,志得意满的输入了回滚命令'git reset --hard HEAD^'

Git提示你已经回到了
7123466
版本,你松了一大口气,因为这版本号是上一个版本的版本号。赶紧上传覆盖,以免其他人看到。
HEAD^ 表示上一个版本,HEAD^ ^ 表示上上一个版本,HEAD^ ^ ^
嘛,相信你不会想这么用。我们可以直接用版本号来替代,版本号不用输完整,只需要前几位让Git能准确找到版本就可以了。比如,上面的命令可以换成git reset --hard 7123466
,一样可以达到目的。
小提示:如果git log出来的日志太多,你已经查到想要的版本,可以按q键退出日志查看命令,注意不能用ctrl+c,会无法继续输入命令,切记切记!
删除文件
时光荏苒,你发现readme文件没有用了,这时候你就想将它从仓库中删除,于是,你输入了'git rm readme.txt'命令:

Git提示,你已经把readme文件删掉了,你长长的呼出一口气,事情总算是完结了。
分支
代码管理中,最常用的就是分支功能。在开发版本上打一个分支用于修复BUG,修复之后把分支合并到开发版本中,这几乎是工作的常态。
要查看当前的分支状况,我们需要用到的命令是git branch
。

可以看到,当前我的版本中有两个分支,master和test。其中,test显示为绿色字,并且前面还有一个*号,说明我们当前所操作的就是这个test分支。要切换分支也很容易,使用命令
git checkout 分支名
就可以了:
如果你想创建一个新分支,可以使用git checkout -b 分支名
:

现在你在分支上做了一半的工作,想把它推送到远程仓库,你可以使用这个命令:
git push origin 分支名:分支名
比如:

分支如愿的推送到远程仓库。
当你在新分支上的工作完成,想将新分支的内容合并到老分支上时,首先必须要切换到老分支上,然后使用git merge 新分支名
来合并:

这里合并没有什么问题,非常顺利。当然也有不顺利的时候,这时候你就要处理冲突了,有时候冲突解决起来是个非常麻烦的事情。所以,最好的方式就是解决完一个问题就合并一次,这样,在多人协作的时候效率会高点。
末了,新分支也没啥用了,删掉吧:

删除之前要注意,你不能删除正在操作的分支。也就是说,如果你想要删除newtest分支,你必须先切换到别的分支上(例如master),然后再调用
git branch -d newtest
来删除newtest分支。删除完之后检查一下,确保分支确实被删除了。
剩下的是一些随着时间流逝,慢慢才会用到的命令
命令 | 注释 |
---|---|
git add . | 添加所有未纳入仓库管理的文件 |
git checkout . | 丢弃所有修改,将文件恢复到之前的干净状态 |
git tag | 用于给代码打上标签,标记当前代码的状态是什么。常见的形式如:git tag -a v0.0 -m "注释"。表示当前代码版本号为0.0,并且可以加上注释来说明这个版本是做什么用的(在封板的时候极为有用) |
GitHub的基本操作
首先,到官网去注册一个账号,根据它的提示一步步来就可以。

完成注册后就登录,在界面上点击右侧的“start a project”或者右上角的“+”号选择“new repository”


给你的仓库取一个响亮的名字,比如大名鼎鼎的Hello World,填上描述,选择Public托管方式(事实上你也没法选Private,因为Private是要保护费的),然后点击左下角的“Create repository”按钮就成功创建了一个仓库。
完了,GitHub的准备工作就完成了。
Git与GitHub的交互
为了使本地的Git和远程的GitHub能相互识别,我们需要让双方都保存一份凭据。
创建凭据(SSH Key)
打开Git Bash,输入下面的命令
ssh-keygen -t rsa -C "youremail@example.com"
一路回车,不需要设置其他的东西,完成之后再用户主目录里找到一个.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是凭据(SSH Key),id_rsa里存放的是私钥,id_rsa.pub里存放的是公钥。打开id_rsa.pub,复制其中的内容。
设置GitHub账户中的SSH Key
点击头像旁的小下三角按钮,在弹出的菜单中选择Settings。在左侧的Personal settings里选择“SSH and GPG keys”。点击SSH keys右侧的New SSH key按钮:

将复制的公钥拷贝到Key下方的编辑框里,设置一个合适的Title(比如Company),点击Add SSH key。我们的凭据就设置好了。
从远程库中克隆
上一步我们创建了一个Hello World仓库,怎么把它down到本地呢,很简单,使用git clone
命令就可以了。

clone的路径可以点击项目中的“Clone and download”按钮找到:

点击图中框起来的按钮,你就可以找到SSH路径了。
down下来之后,你就可以使用上面的命令来操作本地库了。操作完成后,使用git push
就可以将本地仓库中的内容推送到GitHub中:

如果你网页上对文件做了改动,那也没什么关系,在对应的目录中使用'git pull'就可以把最新的文件down下来了:

怎么样,是不是非常简单?对攻城狮来说简直就是天大的福音,顿时被一股巨大的幸福感包围!
用命令行不方便?不要紧,我们有图形界面!
.net Framework 4.7.2 离线安装包
sourcetree安装包
安装完成之后的配置
绕过注册的方式
https://blog.csdn.net/mjg0101001/article/details/78653994
添加ssa密钥的方式

小结
经过上面的学习,相信你已经可以使用Git和GitHub了。当然,这只是初步的使用,我们学习的目的就是为了使用,所以在文章中没有涉及到任何复杂的东西(甚至连绕个弯的东西都没有),只要能开始使用,剩下的一切都好说。
网友评论