Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >你可能不知道的15个有用的Github功能

你可能不知道的15个有用的Github功能

作者头像
前端森林
发布于 2020-06-22 02:47:03
发布于 2020-06-22 02:47:03
1.1K00
代码可运行
举报
文章被收录于专栏:前端森林前端森林
运行总次数:0
代码可运行

引言

我们平时的工作中,github是必不可少的代码托管平台,但是大多数同学也只是把它做为了托管代码的地方,并没有合理的去运用。

其实github里面有非常多好玩或者有趣的地方的。当然,这些技巧也能对你的工作效率有很大的提升。

我整理了一些自己平时用的比较多的一些功能/技巧,也希望能给你的工作带来一些帮助!

Gist

可能很多人并没有听过Gist。它在github首页的子目录下:

这是github提供的一个非常有用的功能。Gist作为一个粘贴数据的工具,就像 Pastie 网站一样,可以很容易地将数据粘贴在Gist网站中,并在其他网页中引用Gist中粘贴的数据。

作为GitHub的一个子网站,很自然地,Gist使用Git版本库对粘贴数据进行维护,这是非常方便的。

进入Gist网站的首页,就会看到一个大大的数据粘贴对话框. 只要提供一行简单的描述、文件名,并粘贴文件内容,即可创建一个新的粘贴。

每一个新的粘贴称为一个Gist,并拥有一个单独的URL

当一个粘贴创建完毕后,会显示新建立的Gist页面, 点击其中的embed(嵌入)按钮,就会显示一段用于嵌入其他网页的JavaScript代码,将上面的JavaScript代码嵌入到网页中,即可在相应的网页中嵌入来自Gist的数据,并保持语法高亮等功能。

通过 web 界面创建文件

在有些时候,我们可能不太想用本地创建文件,然后通过git推送到远程这种方式去创建文件,那么有没有简单高效的一种做法呢?

很简单,通过github提供的 web 界面创建方式(create new file)去创建就可以了:

文件查找

有时,我们想在一个庞大的 git 仓库中去查找某一个文件,如果一个一个的去看,可能需要一段时间(我之前时常感觉在github仓库中去查找一个文件真的好麻烦)。

其实 github 提供了一个快捷的查找方式:按键盘'T'键激活文件查找器,按 ⬆️ 和 ⬇️ 上下选择文件,当然也可以输入你要查找的文件名,快速查找。

github cli(命令行)

当我们将本地代码提交到 GitHub 后,就可以在 GitHub 网站上查看到各种的交互信息了,例如其它开发者提的 Issue,或者提交的代码合并请求等。但是,如果我们能在命令行上直接查看、处理这些信息,那么这一定非常酷。

下面让我带你从 0 到 1 上手GitHub CLI吧!

安装

要安装 GitHub CLI 非常简单。

macOS下面可以使用Homebrew工具进行安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ brew install github/gh/gh
# 如果需要更新执行下面的命令即可
$ brew update && brew upgrade gh

Windows下可以使用如下命令行进行安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scoop bucket add github-gh https://github.com/cli/scoop-gh.git
scoop install gh

安装完成后直接在命令行中执行gh命令,看到如下图所示的信息就说明已经安装成功了:

其他平台的安装参考官方文档即可: https://cli.github.com/manual/installation

使用

使用的时候需要我们进行一次授权:

在命令行中输入回车键就会在浏览器中打开授权页面,点击授权即可:

授权成功回到命令行,我们发现通过gh issue list指令已经拿到了issue列表:

我这边列举几个常用的操作。

创建 issue

我们通过 CLI 先交互式地提交了一条issueissueBody 需要通过nano编辑。

筛选 issue

issue列表往往存在有太多的条目,通过指定条件筛选issue是一个很常见的需求:

如上图所示,它将筛选出label动态规划的所有issue

快速浏览

找到一个你关注的issue过后,要想查看该issue的具体信息,可以使用如下命令在浏览器中快速将issue的详细信息页面打开:

接下来可以选择打开网页,预览并提交。当然,我们也可以选择直接在命令行进行提交。

这里我只是简单介绍了issue相关的几个常用命令,更多的使用方式可以查看官方文档了解更多:https://cli.github.com/manual/examples

GitHub Actions

GitHub ActionsGitHub持续集成服务。

通常持续集成是由很多操作组成的,比如抓取代码、执行脚本、登录远程服务器、发布到第三方服务等。GitHub将这些操作称作actions

如果你需要某个 action,不必自己写复杂的脚本,直接引用他人写好的 action 即可,整个持续集成过程,就变成了一个 actions 的组合。

GitHub 做了一个官方市场,可以搜索到他人提交的 actions

下面分别从基本概念和发布流程详细说明一下GitHub Actions

基本概念

  • workflow (流程):持续集成一次运行的过程,就是一个 workflow。
  • job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
  • step(步骤):每个 job 由多个 step 构成,一步步完成。
  • action (动作):每个 step 可以依次执行一个或多个命令(action)。

实例:React 项目发布到 GitHub Pages

这里通过 GitHub Actions 构建一个 React 项目,并发布到 GitHub Pages。最终代码都在这个仓库里面,发布后的网址为https://jack-cool.github.io/github-actions-demo/

生成密钥

由于示例需要将构建成果发到GitHub仓库,因此需要 GitHub 密钥。按照官方文档,生成一个密钥。然后,将这个密钥储存到当前仓库的Settings/Secrets里面。

我这里环境变量的名字用的是ACCESS_TOKEN

创建 React 项目

使用create-react-app初始化一个 React 应用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npx create-react-app github-actions-demo
$ cd github-actions-demo

在项目的package.json中,添加一个homepage字段(表示该应用发布后的根目录)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"homepage": "https://jack-cool.github.io/github-actions-demo"
创建 workflow 文件

在项目的.github/workflows目录,创建一个workflow文件,这里用的是ci.yml

上面已经提到GitHub有一个官方的市场,这里我们直接采用的是JamesIves/github-pages-deploy-action

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name: GitHub Actions Build and Deploy Demo
on:
  push:
    branches:
      - master
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      # 拉取代码
      - name: Checkout
        uses: actions/checkout@v2 # If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly.
        with:
          persist-credentials: false
      # 安装依赖、打包
      - name: Install and Build
        run: |
          npm install
          npm run-script build

      # 部署到 GitHub Pages
      - name: Deploy
        uses: JamesIves/github-pages-deploy-action@releases/v3
        with:
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
          BRANCH: gh-pages
          FOLDER: build

这里梳理下配置文件都做了些什么:

1、 拉取代码。这里用的是 GitHub 官方的 action: actions/checkout@v2

2、安装依赖、打包

3、部署到GitHub Pages。使用了第三方作者的 action:JamesIves/github-pages-deploy-action@releases/v3。我这里详细介绍下这个 action

使用 with 参数向环境中传入了三个环境变量:

  • ACCESS_TOKEN:读取 GitHub 仓库 secretsACCESS_TOKEN 变量,也就是我们前面设置的
  • BRANCH:部署分支 gh-pagesGitHub Pages 读取的分支)
  • FOLDER:需要部署的文件在仓库中的路径,也就是我们使用 npm run build 生成的打包目录

❝这里有一点需要注意:我使用的是 v3 版本,需要使用 with 参数传入环境变量,且需要自行构建;网上常见的教程使用的是 v2 版本,使用 env 参数传入环境变量,不需要自行构建,可使用 BUILD_SCRIPT 环境变量传入构建脚本。 ❞

到这里,配置工作就完成了。

以后,你每次有代码 pushmaster 分支时,GitHub 都会开始自动构建。

分享具体代码

平时我们可能有一行非常好的代码,想分享给其他同事看,那么可以在url后面加上#L 行号,比如:https://github.com/Jack-cool/rest_node_api/blob/master/app/models/users.js#L17,效果如下图:

如果是想分享某几行的,可以在url后面添加如#L 开始行号-L 结束行号,像https://github.com/Jack-cool/rest_node_api/blob/master/app/models/users.js#L17-L31,效果如下图:

通过提交的msg自动关闭 issue

我们先来看一下关闭issues的关键字:

  • close
  • closes
  • closed
  • fix
  • fixes
  • fixed
  • resolve
  • resolves
  • resolved

关闭同一个仓库中的 issue

如果是在同一个仓库中去关闭issue的话,可以使用上面列表中的关键字并在其后加上issue编号的引用。

例如一个提交信息中含有fixes #26,那么一旦这次提交被合并到默认分支,仓库中的 26 号issue就会自动关闭。

❝如果这次提交不是在默认分支,那么这个issue将不会关闭,但是在它下面会有一个提示信息。这个提示信息会提示你某人添加了一个提交提到了这个issue,如果你将它合并到默认分支就会关闭该issue。 ❞

关闭不同仓库中的 issue

如果想关闭另一个仓库中的issue,可以使用username/repository/#issue_number这样的语法。

例如,提交信息中包含closes Jack-cool/fe_interview/issues/113,将会关闭fe_interview中的113issue

❝关闭其他仓库issue的前提是你将代码push到了对应的仓库 ❞

查看项目的访问数据

在自己的项目下,点击 Insights,然后再点击 Traffic,里面有 Referring sitesPopular content 的详细数据和排名。

其中 Referring sites 表示大家都是从什么网站来到你的项目的,Popular content 则表示大家经常看你项目的哪些文件。

任务清单

有时候我们需要标记一些任务清单去记录我们接下来要做的事情。

创建任务列表

issuespull requests 里可以添加复选框,语法如下(注意空白符):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- [ ] 步骤一
- [ ] 步骤二
  - [ ] 步骤2.2
  - [ ] 步骤2.3
- [ ] 步骤三

效果如下:

普通的markdown文件中可创建只读的任务列表,比如在README.md中添加 TODO list:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
### 接下来要做的事 ?
- [x] 数据结构与算法
- [ ] react源码
- [ ] docker

效果如下:

对任务排序

你可以单击任务左边的复选框并拖放至新位置,对单一评论中的任务列表重新排序。

issues 模版和 pull request 模版

❝这里以issue模版举例,pr模板类似 ❞

这个issue模版我是在给element uiissue时发现的:

GitHub中,代码库维护者如果提供有定制的 issues 模版和pull request 模版,可以让人们有针对性的提供某类问题的准确信息,从而在后续维护中能够进行有效地对话和改进,而不是杂乱无章的留言。

创建issues模版

  • 在代码库根目录新建.github目录
  • .github 目录下添加 ISSUE_TEMPLATE.md 文件作为 issues 默认模版。当创建 issue 时,系统会自动引用该模版。

如我在项目根目录下新建了.github/ISSUE_TEMPLATE.md

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 概述

bug 概述

## 重现步骤

1. aaa
2. bbb
3. ccc

## Bug 行为

Bug 的表现行为

## 期望行为

软件的正确行为

## 附件

附上图片或日志,日志请用格式:

> ```
> 日志内容
> ```

在该仓库新建issue时就会出现上面预设的issue模版:

GitHub Wiki

大家平时的项目,一般都使用 Markdown 来编写项目文档和 README.md 等。Markdown 一般情况下能够满足我们的文档编写需求,如果使用得当的话,效果也非常棒。不过当项目文档比较长的时候,阅读体验可能就不是那么理想了,这种情况我想大家应该都曾经遇到过。

GitHub 每一个项目都有一个单独完整的 Wiki 页面,我们可以用它来实现项目信息管理,为项目提供更加完善的文档。我们可以把 Wiki 作为项目文档的一个重要组成部分,将冗长、具体的文档整理成 Wiki,将精简的、概述性的内容,放到项目中或是 README.md 里。

关于Wiki的使用,这里就不展开说明了,具体可以参考官方文档

查看提交记录热度图 ?‍?

查看文件时,可以按b查看提交记录和显示每一行的最近修改情况的热度图。它会告诉你每行代码的提交人,并且提供一个可以点击的链接去查看完整提交。

❝中间有一个橙色的竖条。颜色越鲜艳,更改的时间就越近。 ❞

Git Submodules vs Git Subtrees

为什么使用 Submodules or Subtrees?

团队中一般都会有公共的代码库,submodulesubtrees可以让我们在不同项目中使用这些公共的代码,避免因拷贝产生重复代码,甚至导致相同代码出现不同修改产生多个版本。

区别

subtreesubmodule 的目的都是用于 git 子仓库管理,二者的主要区别在于,subtree 属于拷贝子仓库,而 submodule 属于引用子仓库。

使用

关于实践,官方文档写的已经非常清楚了,我这里直接放上链接:

  • submodule: https://git-scm.com/book/en/v2/Git-Tools-Submodules
  • subtree: https://einverne.github.io/post/2020/04/git-subtree-usage.html

GitHub 插件推荐

GitHub的插件有很多很多,这里就推荐一下我常用的三个插件。

Octotree

我们有时经常需要在github上查找文件,但如果文件结构嵌套很深,查找起来是非常麻烦的,这时使用Octotree可以在仓库左侧显示当前项目的目录结构,让你可以在github上像使用Web IDE一样方便。

isometric-contributions

这个是可以更酷炫的 3D 立体式渲染github贡献。

Enhanced GitHub

这个插件支持在仓库中显示仓库大小、每个文件的大小以及每个文件的下载链接。

GitHub 吉祥物 Octocat

哈哈 这个就比较有意思了 我也是刚知道原来github也有自己的吉祥物。

这里贴下网站,顺便选了几个感觉很萌的,大家也可以去上面选几个作为自己的头像什么的。

参考

  • 阮一峰老师 《GitHub Actions 入门教程》
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端森林 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python爬虫:爬取某q音乐歌曲
“相信大家都很喜欢听音乐,在各种音乐平台上,今天为大家介绍一个利用Python爬取某Q付费音乐的案列,欢迎大家一起学习,一起交流,共同进步!”
@莜莜
2021/06/24
1.4K0
js 加密 crypto-js des加密
crypto-js https://www.npmjs.com/package/crypto-js
WindWant
2020/09/11
10.7K0
记一次使用java生成激活码|密钥
其中:密钥类别(2位)可以用来表示该激活码用来激活哪些设备或者哪些平台(如01表示某个平台,02表示某个app),时长(1位)用来表示该激活码的有效时长(如0表示永久、1表示7天、2表示30天等) 注意:前7位数加密后为11位,表示该激活码可以生成的个数;后4位数为随机数 × 11转32进制和混淆策略是为了激活码的加密性,用来校验该激活码是否有效
不愿意做鱼的小鲸鱼
2022/09/26
1.6K0
记一次使用java生成激活码|密钥
Python爬虫实战:网易云音乐爬取
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
松鼠爱吃饼干
2020/11/19
4.3K0
Python爬虫实战:网易云音乐爬取
PBE_Password-based encryption(基于密码加密)_项目中你也可以有
中说道了PBE——Password-based encryption(基于密码加密)。我也做测试了一下,现在把我做的效果给大家演示一下:
Hongten
2018/09/13
7520
PBE_Password-based encryption(基于密码加密)_项目中你也可以有
前后端请求AES加解密
AES前后端加解密 前端 安装依赖 npm install --save crypto-js 工具类 const CryptoJS = require("crypto-js"); exports.aes = { // 加密 encrypt: function (str, key) { return CryptoJS.AES.encrypt(str, key).toString(); }, //解密 decrypt: function (str, key) { let b
码客说
2021/05/13
6.1K0
爬取网易云音乐评论并使用词云展示
  最近听到一首很喜欢的歌,许薇的《我以为》,评论也很有趣,遂有想爬取该歌曲下的所有评论并用词云工具展示。   我们使用chrome开发者工具,发现歌曲的评论都隐藏在以 R_SO_4 开头的 XHR
希希里之海
2018/05/16
8220
利用Python实现网易云音乐自动签到
标题:利用Python实现网易云音乐自动签到 作者:cuijianzhe 地址:https://solo.cjzshilong.cn/articles/2020/03/27/1585293177882.html
cuijianzhe
2022/06/14
1.2K0
利用Python实现网易云音乐自动签到
JS逆向之网易云音乐
最近有一部很火的青春励志言情剧《亲爱的,热爱的》,其主人公之一佟年是一个网络歌手,其粉丝足有百万。好奇的我一搜,网易云音乐真有这么一号人物,真是现实和电视剧傻傻分不清楚。于是我就想着爬一下网易云音乐,分析一波这真假粉丝,(因为我觉得这个粉丝数目肯定存在刷粉丝的嫌疑~)。
老肥码码码
2020/01/17
2.5K0
JS逆向之网易云音乐
Java使用AES加密解密
AES加密机制: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。 这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中
二十三年蝉
2018/08/01
5.1K0
JavaUtil_01_MD5加密
昨天做java微信开发,引用百度翻译API给公众号添加翻译功能时,需要使用MD5生成签名。注意,使用MD5生成签名后一定要转成小写,不然百度翻译后台不会认你这个签名的,会报无效签名的错误。
shirayner
2018/08/10
6990
Python网易云音乐爬虫进阶篇
年前写过一篇爬网易云音乐评论的文章,爬不了多久又回被封,所以爬下来那么点根本做不了什么分析,后面就再改了下,加入了多线程,一次性爬一个歌手最热门50首歌曲的评论,算是进阶版了~
Awesome_Tang
2018/09/11
2.8K0
Python网易云音乐爬虫进阶篇
爬取网易云音乐精彩评论
故事的小黄花 从出生那年就飘着 童年的荡秋千 随记忆一直晃到现在 Re So So Si Do Si La So La Si Si Si Si La Si La So 吹着前奏望着天空 我想起花瓣试着掉落 ……
猴哥yuri
2018/08/16
5290
如何获取微信文章封面和文章标题!
小程序需要一个获取微信文章封面和标题的功能,然后网上找了一圈,找到了下面这个代码,但是已经不能使用了,获取不到微信的标题,自己改动之后分享给有需要的人。
执行上下文
2022/07/26
1.1K0
【Java爬虫】004-Jsoup学习笔记(补充:网页内容获取相关)
User-Agent和Referer从列表中随机挑选一个(防止被网站反爬虫程序发现);
訾博ZiBo
2025/01/06
1220
【Java爬虫】004-Jsoup学习笔记(补充:网页内容获取相关)
网易云音乐歌曲评论爬虫(附源码)
用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处理,因此我们需要深入了解它的加密过程之后才能爬取到网易云音乐歌曲的全部评论.
Python中文社区
2018/10/25
2K0
网易云音乐歌曲评论爬虫(附源码)
常见的加密算法
前端使用开源CryptoJS (crypto.js) 为 JavaScript加密算法,Github地址(https://github.com/brix/crypto-js)。目前已支持的算法包括:
分母为零
2019/07/04
1.8K0
DES ECB加解密的Java实现
[2020-08-12 16:04:15.037]# RECV HEX FROM 117.136.81.93 :51423> C4 FC 35 4A 83 E1 71 F2 0D C0 FC B1 01 72 A2 DE D3 42 8C C8 39 0E EA 17 E8 24 4A 0A 0C 71 70 5B A4 06 FA FB 27 94 96 D9 AD E5 BB B6 29 05 D8 DF BE D9 CD F5 BB 33 CA 42 64 F3 6C 82 AB C4 D6 9D 2F E0 61 45 C2 20 49 02
ccf19881030
2020/08/17
1.8K0
Python数据可视化 | 网易云音乐年度歌曲
网易云音乐2018年度听歌报告—遇见你,真好。 相信有不少人在上周,应该已经看过自己网易云音乐的年度报告了。 小F也是去凑凑热闹,瞅了一波自己的年度听歌报告。 那么你在云村又听了多少首歌,听到最多的歌词又是什么呢? 2018年你的年度歌手又是谁,哪些又是你最爱的歌呢? 不过相比去年,我的票圈并没有很多发自己年度报告的朋友。 不得不说,版权之争开始,网易云音乐似乎就在走下坡路。 很多喜欢的歌听不了,这应该是大家共同的痛点。 最大的印象就是周董的歌,在愚人节时下架了,原以为只是个玩笑,不想却是真的。 本次通过
龙哥
2019/04/25
1.8K1
Python数据可视化 | 网易云音乐年度歌曲
Python爬虫爬取网易云音乐全部评论
beautiful now.png 思路整理 访问网易云音乐单曲播放界面,我们可以看到当我们翻页的时候网址是没有变化的,这时候我们大致可以确定评论是通过post形式加载的; .
Awesome_Tang
2018/09/11
1.5K0
Python爬虫爬取网易云音乐全部评论
相关推荐
Python爬虫:爬取某q音乐歌曲
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验