Github漫游手册

Github是一个面向开源及私有软件项目的托管平台,由于用户人群中多但是男女比例严重失调,在程序届被戏称全球最大同性交友网站。当年Linux系统横空出世,盛况空前,越来越多的程序猿加入到开发维护大军中,如此庞大的项目体量没有一个好的项目托管平台怎么行,于是Linux的创始人Linus大牛花了两周的时间自己用C语言编写了一个分布式版本控制系统,就是Git,然后Git就迅速成为最流行的分布式版本控制系统,在2008年,Github网站上线了,它为开源项目免费提供Git存储,就在去年以75亿美金的价格被微软爸爸收购了(来自贫穷的凝视)。

现在VS Code中内置Git,配置一下文件路径和默认打开方式就可以直接在VS Code中进行Git操作,十分方便快捷。

全球很多顶级的科技公司都将自己的项目贡献到Github上,同时我们也可以在上面找到许多非常优秀的开源项目。感谢Github让我们可以在一个开放畅通的互联网世界任意驰骋,现在Github已经成了产品开发过程中的门面担当,很多企业在面试的时候都会要求应试者提供下Github账户,一个出色的Github账号肯定会为你在求职中增色不少。

简单介绍了GitHub 的诞生和历史,接下来就为大家讲解一下,如何使用操作。


这里是Git的官方网站,涵盖了非常全面的Git文档:

https://git-scm.com/

市面上有很多Git教程,也有相关书籍,通常都是很厚一本,如果你是初学者,推荐廖雪峰老师的Git教程,基本功能都有涵盖,由浅入深,可以让你快速上手使用。这篇文章就是基于他的教程,按照我自己的使用习惯,从一个新手角度再重新整理,认真学习后每个人都会有不同的收获,找到适合自己的就好。

1、安装GIt

首先需要在自己的电脑上本地安装GIt,Mac系统自带Git,windows系统需要下载安装一下,过程很简单方便,这里就不赘述了,针对各个不同系统的具体安装方法请参考廖雪峰老师的博客:

https://www.liaoxuefeng.com/wiki/896043488029600/896067074338496

2、注册Github账户

在Github网站填写用户名、邮箱、密码注册个人账户。

注册成功之后你就会进入到Github主页,上方是导航栏,下方从左到右依次是:

仓库:你创建的所有仓库会在这里显示

时间线:你关注的人的一些活动,比如说他创建了新的仓库,或者star、fork了某些项目等等这些操作就会显示在这里,类似微博动态。

发现新仓库:这里会给推荐一些标星比较高的优秀项目,类似于热门微博。

简单介绍下头部导航栏的各个模块:

LOGO:点击进入Github首页

搜索框:搜索用户或者项目

Pull requestes:查看推送请求信息

Issues:查看问题推送信息

Marketplace:这里提供最新的软件,是代码软件集市

Explore:介绍Github上的热门软件

3、在本地配置Github账户

安装Git完成之后,在命令行输入:

$ git config --global user.name "你的Github用户名"

$ git config --global user.email "你的Github注册邮箱"

来配置你自己的Github用户名和Email地址

4、创建SSH Key密钥

github需要通过ssh协议来确认内容是你推送的,不然任何人都可以往你的仓库中提交修改,就很危险了。使用多台电脑开发就要配置多个SSH Key,通过SSH key来确保你能把内容推送到你本人的仓库中。

首先在本地找到.ssh目录,mac用户使用快捷键:shift+command+G输入~/.ssh快速查找。查看目录下有没有id_rsa(私钥)和id_rsa.pub(公钥)这两个文件,如果没有,可以在终端中运行ssh-keygen -t rsa -C “你的github邮箱"来生成ssh Key。

进入github网站在右上角点击个人头像,在下方找到Settings,在左侧第六个选项中找到SSH and GPG Keys,点击New SSH key,将你的id_rsa.pub里的内容粘贴到Key中,填上任意的Title,保存,此时你就可以在本地向远程github仓库推送内容。

5、将本地仓库Repository同步到远程

(1)初始化一个git仓库:git init

执行完这条命令后当前目录下会多一个.git目录,这个目录是git来跟踪管理版本库的,千万不要把它删除,看不到这个文件的修改一下自己的文件项,打开显示隐藏文件。

(2)把文件添加到仓库命令:

git add 文件名 将指定文件添加到暂存区,多个文件之间用空格隔开

git add /git add -A/git add --all 将工作区内容全部加入暂存区(包括新增、修改、删除文件操作)

git add .将当前目录下的所有内容全部加入暂存区(包括新增、修改文件操作)

执行完添加操作,没有任何显示就对了,在使用git的过程中牢记:没有消息就是好消息,只有出错的时候它才会给你报错的提示信息。

这条命令可以反复多次使用,将你需要添加的文件都提交到暂存区,然后执行一次git commit就可以将多次提交到暂存区的文件一次性提交到当前分支。

(3)把文件提交到当前分支

git commit -m “提交说明”

git status 查看当前工作区的提交状态。全部提交后显示:

nothing to commit, working tree clean

git diff 查看修改的内容。会比对暂存区和工作区的文件内容。

(4)推送到远程仓库

首先新建一个远程仓库,在Github主页右上角点击加号,选择第一个选项new repository,填写Repository name仓库名,Description描述,选择public属性,勾选Initial this repository with a README会自动生成一个MarkDown格式的README文档。这样我们就在远程创建好了一个Git仓库。目前Github上创建公开仓库是免费的,所有人都可以看到仓库中的内容,如果想创建私人仓库是收费的,它鼓励大家开源。

创建好仓库之后他分三种情况给出不同提示:

  • 在本地新建仓库,并推送内容到远程仓库

我们只需要按照如下指令,依次执行:

echo "# Git-Test-Demo" >> README.md 新建一个README文件并写入内容

git init 生成.git版本库

git add README.md将当前工作区的文件提交到暂存区

git commit -m "first commit”将暂存区的内容提交到当前分支

git remote add origin git@github.com:Hanxueqing/Git-Test-Demo.git 在本地关联远程库

这里你可以选择使用HTTPS连接或者SSH连接,使用HTTPS连接时每次推送都会要求有密码验证,相对来说比较安全,缺点是速度慢。如果使用SSH连接,第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

输入yes即可

Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

Warning: Permanently added 'github.com' (RSA) to the list of known hosts.

这个警告只会出现一次,后面的操作就不会有任何警告了。

git push -u origin master将当前分支推送到origin主机的对应分支。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,将本地的master分支推送到origin主机,同时指定origin为默认主机,在以后的推送或者拉取时就可以简化命令,不加任何参数直接使用git push来推送了。

  • 如果本地已有仓库,想的内容快速推送到当前仓库,只需要执行如下两条指令:

git remote add origin git@github.com:Hanxueqing/Git-Test-Demo.git

git push -u origin master

  • 你也可以从其他版本控制系统如Subversion, Mercurial, or TFS project中导入仓库

由于我一开始新建仓库的时候勾选了自动生成README文档,而我本地的文件中又不存在这个文档,所以向远程仓库push的时候会报错,提示:

error: failed to push some refs to 'git@github.com:Hanxueqing/Maoyan-API.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

原因是自己当前版本低于远程仓库版本,可以在push之前先将远程仓库pull到本地,执行git pull origin master命令,再执行git push -u origin master命令推送到远程仓库。

或者新创建一个分支git branch 分支名,然后push到这个新分支上去git push -u origin 分支名

这里我就直接使用了强制push的方法:git push -u origin master -f,但是它会覆盖远程的文件,一般不建议使用,尤其是多人开发的时候。

在本地执行完以上操作后就可以终端中出现提交成功的命令。

此时我们在github账户上进入之前创建的仓库会发现,所有工作区的文件已经在远程同步上传好了。

简单讲解一下仓库中各个模块的功能:

Watch:类似于关注,watch了某个项目之后,以后只要这个项目有任何更新,你都会收到通知提醒。

Star:类似于点赞,在Github上获得标星可比在社交网络中困难多了,一般能获得1000+star的项目就已经非常不错了。前一阵子在开发圈大火的996icu项目目前标星已经达到了245k。

Fork:将这个仓库的项目创建一个分支,添加到自己的仓库中,你就可以在原有仓库的基础上自己开发,等功能完善后再发起pull request请求与原仓库合并分支,将功能进行整合。


Code:显示该仓库的文件列表。

Issues:主要用于BUG报告、功能添加、方向性讨论等,类似于一个讨论区留言板功能,将BUG以Issues的形式进行管理,解决掉后可以手动关闭Issues。

Pull request:查看并管理别人发来的pull request请求。

Projects:这是一个很强大的项目管理模式,可以将你的issues更好地进行管理,有人利用Project+Issues在Github上编写技术博客。

感兴趣的可以关注下:

https://github.com/johnnian/Blog

Wiki:Wiki 是一种比 HTML 语法更简单的页面描述功能。常用于记录开发者之间应该共享的信息或软件文档。

Security:安全警告

Insights:显示仓库的活动信息,检测开发进度

Settings:设置,在这里可以对当前仓库进行设置,例如仓库名更改,描述信息更改,以及删除当前仓库,不过这个操作比较危险,它会让你输入当前仓库名称进行二次确认,如果是仓库中有内容还会让你输入账户和密码再次进行确认,安全等级非常高。


commits:提交日志

branches:分支管理

releases:发行版本管理

contributors:参与开发的人员


Branch:master :切换分支,显示不同分支下的文件列表

New pull request :向原有仓库发起合并请求

Create new file :创建新文件

Upload files :上传文件

Find files :查找文件

Clone or download :提供克隆、下载的https协议或者SSH协议

接下来介绍一些Git的常用基本操作,方便后续使用。

撤销修改

这里我们得先明确几个概念:工作区、暂存区、当前分支、远程仓库

工作区:我们自己电脑里的文件目录

暂存区:.git目录中的stage文件,暂时存放我们对于文件的修改,git add就是把文件添加到暂存区。

当前分支:git为我们自动创建一个master主分支,git commit就是把文件修改提交到当前分支。

远程仓库:我们一开始创建的Repository,git push就是把所有修改推送到远程仓库。


撤销工作区的修改(此时你只是修改了文件,但是还没有进行任何git操作):git checkout -- file

撤销暂存区的修改(此时你不仅修改了文件,还git add将修改添加到了暂存区):git reset HEAD <file> 再执行git checkout -- file

撤销提交到分支的修改(此时你不仅修改了文件,还git add将修改添加到了暂存区,同时git commit提交到了当前分支):进行接下来要讲到的版本回退操作

版本切换

如果你向当前的仓库中多次提交了修改文件,可以使用git log查看完整的提交日志,commit后面的一大串数字就是版本号,git通过让内部HEAD指针指向特定版本号来实现版本的回退与前进。

image

如果你多次提交,有一长串的提交日志,不想显示Author和Date,只需要第一行数据可以运行git log --pretty=oneline

如果你觉得commitId太长,只想保留几位有效数字,可以运行git log --oneline --graph

回退命令:git reset --hard commit_id 可以回退到指定版本

git reset --hard HEAD^ HEAD指向的是当前版本,HEAD就是上一个版本,上上个版本就是HEAD^,如果回退到更早期的版本可以写成HEAD-数字(回退到之前的多少个版本)

前进命令:执行过版本回退命令后再执行git log会发现此版本之后更新的版本不见了,此时也不用惊慌,它并没有被删除或者覆盖,git提供了一个命令:git reflog来记录你的每一次命令,只要找到你想恢复文件的commit id,再执行git reset --hard commit_id就可以来到指定版本了。

文件删除

(1)你在工作区删除了某一个文件,想同步修改到远程仓库。

git status查看当前状态,显示当前工作区中该文件已被删除,使用git rm 文件名命令将版本库中的该文件删除,然后git commit上传到当前分支。

(2)你在工作区误删除了某一个文件,想从远程仓库将该文件恢复回来。(前提是你在工作区删除的这个文件之前已经提交过版本库)

git checkout -- 文件名

Git checkout其实是用版本库里的文件替换工作区的文件,无论工作区是修改还是删除文件,都可以一键还原,但是你只能恢复文件到版本库中的最新版本,如果你在提交版本库后又做了一些修改但是没有及时提交,git不会自动帮你记录这些修改。

分支操作

首先我们来理解一下分支的概念,之前已经提到过git会为我们自动创建一个master主分支,但是在多人项目开发的时候,我们不能所有人都往主分支上提交修改,那样存在很大的安全隐患,这时候git鼓励我们使用分支完成任务,HEAD指针指向当前分支,每个人往自己的分支上提交文件,互不干扰,平时自己开发项目时也可以使用分支来管理不同功能模块,最后使用合并分支命令,将文件整合到一起,这和直接在master分支上工作效果是一样的,但过程更安全。

也就是说,在实际开发中,master分支应该是非常稳定的,仅用来发布新版本,平时不能在上面操作,具体的操作我们可以在dev上进行,把每个人的分支合并到dev分支上,在版本发布的时候再把dev的分支合并到master上。

创建分支

git checkout -b 分支名

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch 分支名创建分支

$ git checkout 分支名切换分支

将本地创建的分支推送到远程

git push origin 分支名

查看分支

git branch命令会列出所有分支,当前分支前面会标一个*号。

git branch -r查看远程分支

git branch -a查看所有分支

合并分支

git merge 分支名 (注:合并前要切回要并入的分支,不能在当前分支下进行合并)

删除分支

git branch -d 分支名

git branch -D 分支名强行删除一个没有被合并过的分支,默认情况下是不允许删除没有被合并过的分支的。

克隆远程仓库

git clone 仓库地址仓库首页可以找到仓库地址,通过clone命令克隆到本地。

关于Github的使用就简单介绍到这里,但是它的功能远不止于此,知乎上有个回答,如何有效的使用Github,有人用它放简历、写博客、写书、看资讯,有人把它当朋友圈、微博,跟技术大牛互动,把链接贴上来,有兴趣的可以关注看看:

https://www.zhihu.com/question/21248859

总之,它就像一个宝藏,永远有闪光点和值得学习的地方有待于我们去发掘。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,381评论 0 7
  • 安装Git Git的下载地址:Git官网下载地址 Git本地仓库和命令 配置用户 下载完Git后,右键会有一个Gi...
    TokyoZ阅读 4,479评论 1 7
  • (预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的...
    axiaochao阅读 1,920评论 1 8
  • 1.GitHub 有什么用 学习优秀的开源项目开源社区一直有一句流行的话叫「不要重复发明轮子」,某种意义上正是因为...
    Clemente阅读 1,416评论 1 14
  • 第37讲 | 经济计算问题 计划经济的支持者,是深受物理学的成功鼓舞的。 经济不可以预测的三个原因。 个人的偏好,...
    知鱼君阅读 749评论 0 0