Github
Github
Github 是全球最大的同性交友平台 源代码托管服务平台,拥有良好的开源生态,是开发者的圣地。(我乱写的)
给新人
如果你没听说过 Github,或者知道它但却不会下载,请看完此条目
- 首先,github 服务器在国外,国内访问速度慢且有几率连接不上。请:
- 使用校园网访问
- 使用加速器访问,如 steam++ 或 dev-sidecar
- 科学上网
- 更换访问时间段
顺带一提,本博客也部署在 Github 上(如果域名是 lxl66566.github.io 的话),所以想在此博客获得更好的阅读体验,请同样采纳上述建议。
- 其次,你需要一定英语能力,或者会使用机翻。
下载文件
打开仓库后,点击 releases(发行版)。
在最底下找到 Assets,下载你需要的条目。
- Q: Releases 栏显示 No releases published ?
A: 开发者并未发布 release.
- 请查看仓库页面下的 README.md 对该仓库的解释。
- 可能源码就是文件本身,请点击 Code -> Download ZIP 下载源码。
- Q: 这么多文件到底要下载哪一个?
A: 此处我假设会看此条目的都是 Windows&Android 用户。
- 排除源码与大小明显不正常的文件(如图中的 sha256sum)。
- 按照后缀选择,排除后缀不是以下格式的:
- Windows 压缩包格式(.7z/.zip/.rar)
- 可执行文件格式(.exe)
- Android 安装包(.apk)
- 然后根据你的喜好选择安装版(可执行文件)或者免安装版(压缩包)。建议新人下载安装版。
- 关于 apk 文件:
- 如果文件名带有 v7a,v8a 的:请查看手机指令集,然后按结果选择。
- 如果实在无法判断,优先选择更上方的。
上传文件
在此之前,你需要有一个 Github 账号,创建一个属于你自己的仓库。
Github 只支持 Git 作为唯一的版本库格式进行托管。相关内容请跳转编程-工具-Git。
下载仓库
直接点击 Download ZIP 仅下载仓库文件,不包含 .git
仓库。可以使用 CDN 加速:https://codeload.github.com/<your name>/<repo name>/zip/<branch name>
在需要拉取 .git
仓库时,可以用 clone, pull, fetch 等拉取指令,一般使用 clone。
markdown 增强
冷知识,Github 的 markdown 也可以用提示块,src。
合并 Pull Request
你是一个仓库 owner,有人对仓库发起了 pr。如果你愿意全盘接受改动,可以简单地在网页上点击 merge 即可。如果需要修改细节而对方没开写权限OR 不想亲自动手,那就在网页上提出 review 叫对方改,改到满意为止堪比黑心资本家。而这里讲的是第三种情形,即需要修改细节而对方提供写权限,owner 亲自进行修改并 merge 的方法。
为什么不使用 codespace 呢?因为它确实难用(
- 拉取到本地:可以使用 Github CLI 完成。
- 在 pull request 界面右上角点击 Code - Local - Checkout with GitHub CLI,复制指令。
- 安装 Github CLI,运行指令。
- 将提交树上的 HEAD 设为最新的,属于 Contributor 的远程分支:
git checkout <branch>
(参考 Git) - 修改
- 提交
- rebase 一下,想干啥干啥,
注释稀烂就删注释,提交没压就 squash 一下。 - push 到自己的 remote 即可。
此时进入 Github pull request 界面一看,发现已经是 Merged 的状态了。
搜索技巧
搜索格式与你的关键词使用空格隔开。你也可以使用 Github 官方提供的高级搜索界面。
格式 | 作用 | 样例 |
---|---|---|
in:name | 指定搜索仓库名称 | in:name words english |
in:description | 指定搜索摘要 | 类比 |
in:readme | 指定搜索readme文档 | 类比 |
stars: | 指定星数范围 | stars:<50 stars:>100 stars:50..100 |
fork: | 指定fork数范围 | 类比 |
language: | 指定程序语言 | language:c# |
pushed: | 指定最近更新时间范围 | pushed:>2022-01-01 |
path: | 指定匹配文件名,例如 path:*.toml |
在这里查看代码搜索的详细信息。
不过,对于代码搜索,我建议使用第三方提供的 grep app,这玩意是真的快。
- fork 项目默认不出现在搜索页面。而
fork:only
仅搜索其 fork 项目,非常好用。- 也可以用第三方的工具:active-forks 进行搜索。
- 如何查看最新的一次提交记录?(src)(github 的翻页做的真的垃圾。)
批量下载 Release
我需要批量下载某个 Release 中的所有文件。首先,需要保证这个仓库是 Public 的。被坑了,我是傻杯
- 一个方法是手动复制所有链接,然后用 Ditto 批量粘贴到 AriaNgGUI/IDM 等下载器下载。
- 由于我使用 XDM 而批量下载抽风了,于是只好使用 aria2 下载。
- 另一个方法是用命令行下载(ref)。例如在 Archlinux 上:
sudo pacman -S aria2 jq curl -s https://api.github.com/repos/<USERNAME>/<REPONAME>/releases/latest | jq -r '.assets[].browser_download_url' | aria2c -c -s 16 -x 16 -k 1M -i -
Github Workflow
Github 工作流,极为强大。可以理解为一个性能强悍的虚拟机帮你跑任务。官方文档
使用方法:在项目根目录下,新建 .github/workflows/<name>.yml
.
Trigger
ex.
on:
workflow_dispatch:
schedule:
- cron: "30 00 * * *"
定时任务: 使用 cron 表达式。此处可在线计算表达式。
注意,定时任务时间为中时区(UTC),并且会出现 0-60+ min 的延时,若有精确执行需求请使用其他服务商提供的云函数
手动任务:使用 workflow_dispatch
;建议每个 workflow 都加一个方便调试。不要再使用 on:push
进行手动运行控制。
杂
- if 的外面会自动包
${{ }}
,不需要手动包,否则会出现预料之外的行为。
Powerful CI
这里列出一些我常用的 CI。顺带一提,CI 就是 Continuous Integration,在每次代码操作后自动进行一系列检查或服务更新部署,简化操作流程。
写在这里的 CI 理论上应该是语言无关的。如果需要特定编程语言的 CI,可以去对应语言页面查看。
学习写 CI?不用学习,多看多抄,会用 template 就懂了。
dependabot
为你的项目自动更新依赖,非常好用。不过需要你项目有一个 check PR 的 test CI,因为 dependabot 靠提 PR 修改代码。项目的测试覆盖率越高越好,这样才不会在自动依赖更新时炸掉项目,自己还不知道。
以 rust 项目为例,只需要在 .github/dependabot.yml
(注意,不是 workflow 里)写:
version: 2
updates:
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "weekly"
即可。首次启用记得在 Security 里开启 dependabot。
auto merge
使用 dependabot 后,项目一多,容易被通知消息刷屏。我希望在有写 test 的项目中,能够通过测试自动 merge。
我目前使用 dependabot-auto-merger。注意,你的每个仓库都需要手动开启 branch protection ruleset。
typos
检查你的英文水平(检查代码拼写错误)。rust 写的,速度极快,即使不用 CI 也可以在本地用,方便修复。
- name: Check Spelling
uses: crate-ci/typos@v1.23.3
本地用就
cargo binstall typos-cli
typos # 检查
typos -w # 纠正
cache
缓存构建中的依赖项,加速 CI。比较适合大型项目,依赖很多,经常跑 CI 的那种。个人的小仓库就有点鸡肋了,不如不开 cahce,多花 10 秒钟构建省 300MB 空间,不为 Github 想想也得为 SSD 想想吧~~(虽然不是我的,但爱是平等的)~~。
每个仓库免费 10 GB 的存储空间,应该是 Github 官方提供的(?),真富啊。
有问题去看官方文档,他这个写的还是不差的。这里随手举一个 rust 项目的例子。
- name: Cache dependencies installed with cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-
sccache-action
方便地使用 sccache 的 CI。这个和上面的 cache 不太一样,sccache 提供更智能的 cache 而不是暴力缓存 ./target
。
使用也非常简单,对 rust 来说,设置两个 env,编译前 use 一下就行。编译后还可以打印。
调试
- action-tmate 提供了 ssh 进入 action 环境里调试的方法,不过这是违反使用协定的,有被封号的风险。
- act 提供了 github action docker,可以在本地模拟 action 环境。