Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/pagliacii/test

Use for testing
https://github.com/pagliacii/test

Last synced: 12 days ago
JSON representation

Use for testing

Awesome Lists containing this project

README

        

#+title: Readme
#+author: Jason Huang
#+email: [email protected]
#+date: Mon Apr 5 23:42:06 2021

#+description: Test git operations
#+keywords: git, test
#+language: zh-cn, en
#+startup: content

* TOC :TOC:
- [[#operations][Operations]]
- [[#初始化-git-仓库][初始化 git 仓库]]
- [[#初始化-poetry-项目][初始化 Poetry 项目]]
- [[#git-分支操作][git 分支操作]]
- [[#克隆仓库并搭建虚拟环境][克隆仓库并搭建虚拟环境]]
- [[#org-mode-syntax][Org-mode Syntax]]
- [[#富文本][富文本]]
- [[#标题行][标题行]]
- [[#列表][列表]]
- [[#表格][表格]]
- [[#代码][代码]]
- [[#链接][链接]]
- [[#数学公式][数学公式]]
- [[#useful-links][Useful links]]
- [[#dev-packages][Dev-Packages]]
- [[#pre-commit][pre-commit]]

* Operations

** 初始化 git 仓库

查看 *git* 别名可以用这个命令 ~alias | grep git~

1. ~git init~: 将一个目录初始化为 git 仓库
2. 到 [[https://gitignore.io][gitignore.io]] 上生成一个 ~.gitignore~ 文件并提交至仓库
3. 到 [[https://choosealicense.com][choosealicense.com]] 上选择一个开源许可证,保存至 =LICENSE= 文件并提交至仓库
4. 创建并提交 =README= 文件
5. 远端新建仓库,如 [[https://github.com][GitHub]]
6. 设置本地仓库远端追踪的仓库 ~git remote set-url origin [email protected]:Username/repo-name.git~
7. 验证设置结果 ~git remote get-url origin~
8. 推送本地修改 ~git push~

** 初始化 Poetry 项目

*Poetry* 安装可以参考 [[https://github.com/Pagliacii/dotfiles][Pagliacii/dotfiles]] 和[[https://python-poetry.org/docs/#installation][官方文档]]。

1. 初始化命令 ~poetry init~
2. 为当前项目创建一个新的虚拟环境 ~poetry env use python~
3. 添加依赖包 ~poetry add package~
4. 添加开发依赖 ~poetry add -D dev-package~
5. 运行文件 ~poetry run python filename.py~
6. 激活虚拟环境 ~poetry shell~

** git 分支操作

1. 通常开发一个新功能或者修复一个问题都会新建一个分支 ~git checkout -b branch-name~
2. 提交修改 =git add modified-files && git commit -m "commit message"=
- 查看修改的内容 ~git diff~
- 提交信息的格式可以参考 [[https://conventionalcommits.org/en/v1.0.0/][Conventional Commits]]
3. 切换至主分支 ~git checkout main~
4. 查看本地所有分支 ~git branch~
5. 合并分支 ~git merge branch-name~
- 有冲突就解决冲突后提交
6. 删除分支 ~git branch -D branch-name~

上述合并分支操作是在对主分支有操作权限时的操作。如果对主分支没有合并权限,那么则可以通过提交 *Pull Requests* 的方式等待所有者审核合并你的分支。

1. 推送本地分支至远端 ~git push --set-upstream origin branch-name~
2. 到 *GitHub* 仓库页面提交 *Pull Requests*
3. 等待有权限的人审核合并你的分支
- 合并后可选保留分支或删除分支
4. 合并之后更新本地主分支 =git checkout main && git pull=

** 克隆仓库并搭建虚拟环境

1. 克隆仓库 ~git clone [email protected]:Username/repo-name.git~
2. 新建虚拟环境并安装依赖 ~cd repo-name && poetry install~

* Org-mode Syntax

** 富文本

1. 粗体 *Text*: ~*Text*~
2. 斜体 /Text/: ~/Text/~
3. 粗斜体 /*Text*/: ~/*Text*/~
4. 下划线 _Text_: ~_Text_~
5. 逐字 =Text=: ~=Text=~
6. 代码 ~Text~: =~Text~=
7. 删除线 +Text+: ~+Text+~

** 标题行

星号加空格开头的行即为标题行,相当于 *Markdown* 中的 ~#~ 号标题。空格前有几个星号即为几级标题,如:

#+begin_src org
,* Header 1
,** Header 2
,*** Header 3
#+end_src

** 列表

以 ~+/-~ 加空格开头的行即为无序列表项,而以数字、英文句点和空格开头的则是有序列表项。而在 *Doom Emacs* 中还支持英文字母作为列表项的指示。

*** 无序列表

- apple
- banana

+ man
+ woman

#+begin_src org
- apple
- banana

+ man
+ woman
#+end_src

*** 有序列表

1. 天地玄黄
2. 宇宙洪荒

a. 日月盈昃
b. 晨宿列张

#+begin_src org
1. 天地玄黄
2. 宇宙洪荒

a. 日月盈昃
b. 晨宿列张
#+end_src

** 表格

| a | b | c | d |
|---+---+---+---|
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |

#+begin_src org
| a | b | c | d |
|---+---+---+---|
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |
#+end_src

** 代码

*** 行内代码

如 ~print()~

#+begin_src org
~print()~
#+end_src

*** 代码块

如:

#+begin_src python :results output
def hello():
print("Hello")

hello()
#+end_src

#+RESULTS:
: Hello

#+begin_src org
,#+begin_src python
def hello():
print("Hello")

hello()
,#+end_src
#+end_src

** 链接

*** 外部链接

[[http://example.org][Example Inc.]]

#+begin_src org
[[http://example.org][Example Inc.]]
#+end_src

*** 内部链接

[[*Header 2][Header 2]]

#+begin_src org
[[*Header 2][Header 2]]
#+end_src

** 数学公式

使用的是 $\LaTeX$ 语法,可以有以下几种方式插入:

#+begin_src org
$\frac{1}{2}$
\(3\frac{1}{2}\)
$$\frac{\pi}{2}=\frac{\pi}{4}+\frac{\pi}{4}$$
\[\frac{\pi}{2}=\frac{\pi}{4}+\frac{\pi}{4}\]
#+end_src

也可以通过以下方式插入公式:

#+begin_src latex
\begin{equation}
x=\sqrt{b}
\end{equation}
#+end_src

* Useful links

- [[https://learnxinyminutes.com][Learn X in Y minutes]]
- [[https://toptal.com/developers/gitignore][gitignore.io]]
- [[https://choosealicense.com][Choose an open source license]]
- [[https://python-poetry.org/docs][Poetry Documentation]]
- [[https://tailwindcss.com][tailwindcss]]
- [[https://gist.github.com][GitHub Gist]]
- [[https://orgmode.org/manual][The Org Manual]]
- [[http://doc.norang.ca/org-mode.html][Org Mode - Organize Your Life In Plain Text!]]
- [[https://orgmode.org/worg/org-symbols.html][Symbols in Org-mode]]
- [[https://en.wikibooks.org/wiki/LaTeX/Mathematics][LaTeX/Mathematics]]
- [[https://github.com/hlissner/doom-emacs/blob/develop/docs/index.org][Doom Emacs Documentation]]

* Dev-Packages

** pre-commit

借用 [[https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks][Git Hooks]] 可以在将改动实际提交到代码库之前,对改动部分做代码风格、注释文档等等检查。可以自己写 hook ,也可以使用现有的 hook ,比如 [[https://pre-commit.com/hooks.html][pre-commit hooks]] 。默认情况下,hook 存放在 ~.git/hooks~ 目录下。不同的 hook 会在不同阶段被调用,比如 ~pre-commit~ 的 hook 会在执行 ~git commit~ 之后,实际提交到代码库之前被调用。

使用 [[https://pre-commit.com][pre-commit]] 框架可以很方便地管理和维护多语言的 ~pre-commit hooks~ 。而且这个框架也有一套 [[https://github.com/pre-commit/pre-commit-hooks][hooks]] 可供使用,也可以使用他人提供的 [[https://pre-commit.com/hooks.html][hooks]]。 ~pre-commit~ 框架使用的配置文件是 ~.pre-commit-config.yaml~ ,可以在该文件内指定使用的 hook 。具体配置项见框架[[https://pre-commit.com/index.html#adding-pre-commit-plugins-to-your-project][文档]]。

而且 ~pre-commit~ 框架可以通过指定 URL 来让它自行下载指定的 hook (只会下载一次,后续会复用),也可以调用本地程序,具体仍是通过配置文件指定。

可以通过执行 ~poetry run pre-commit run --all-files~ 来对所有文件运行 hook 。也可以通过 ~poetry run pre-commit install~ 来将 hook 安装到 ~.git/hooks~ 目录,这样就可以自动调用 hook 了。

*** hooks

**** pre-commit-hooks

这是 ~pre-commit~ 框架提供的一些开箱即用的 [[https://github.com/pre-commit/pre-commit-hooks][hooks]] 。在配置文件里指定 id 来使用指定的 hook ,比如我在配置文件里指定的以下几个 hook :

+ *check-toml* - 检查所有 toml 文件的语法
+ *check-vcs-permalinks* - 确保与 VCS 网站的链接是 permalink
+ *check-yaml* - 检查所有 yaml 文件的语法
+ *debug-statements* - 检查 *Python* 源代码是否包含调试器的导入语句和 ~breakpoint()~ 调用
+ *destroyed-symlinks* - 检查被修改成常规文件的符号链接,其内容为链接指向的文件路径
+ *detect-private-key* - 检查是否存在私钥
+ *end-of-file-fixer* - 确保文件末尾包含一个空白行
+ *trailing-whitespace* - 删除行尾空白符

**** mirrors-mypy

[[https://github.com/python/mypy][mypy]] 是 *Python* 类型注解的检查器,而 [[https://github.com/pre-commit/mirrors-mypy][mirrors-mypy]] 则是用于 ~pre-commit~ 的 hook 。具体配置如下:

#+begin_src yaml
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.812
hooks:
- id: mypy
args: [--no-strict-optional, --ignore-missing-imports]
#+end_src

**** pygrep-hooks

[[https://github.com/pre-commit/pygrep-hooks][pygrep-hooks]] 提供了一些基于正则表达式的 hook ,我在配置里指定了以下几项:

+ *python-no-eval* - 检查 *Python* 代码中是否包含内置函数 ~eval()~
+ *python-use-type-annotations* - 强制使用 *Python3.6+* 类型注解

**** isort

[[https://github.com/PyCQA/isort][isort]] 是一款自动按字母序排列导入语句的 *Python* 工具。其 hook 配置如下:

#+begin_src yaml
- repo: https://github.com/PyCQA/isort
rev: 5.8.0
hooks:
- id: isort
#+end_src

**** commitizen

[[https://github.com/commitizen-tools/commitizen][commitizen]] 是用于统一提交信息的工具,格式可以参考 [[https://conventionalcommits.org/en/v1.0.0/][Conventional Commits]]。其配置如下:

#+begin_src yaml
- repo: https://github.com/commitizen-tools/commitizen
rev: v2.17.0
hooks:
- id: commitizen
stages: [commit-msg]
#+end_src

**** editorconfig-checker

[[https://github.com/editorconfig-checker/editorconfig-checker.python][editorconfig-checker]] 是一个用于检查文件内容是否满足 ~.editorconfig~ 里的配置项的工具。配置如下:

#+begin_src yaml
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
rev: 2.3.5
hooks:
- id: editorconfig-checker
args: [-exclude, poetry|README|pyproject|pylintrc]
#+end_src

**** local

这个 ~repo~ 里的 hook 是通过使用安装在本地的工具来实际运行,如:

#+begin_src yaml
- repo: local
hooks:
- id: black
name: black
entry: poetry run black
language: system
types: [python]
- id: flake8
name: flake8
entry: poetry run flake8
language: system
types: [python]
- id: pylint
name: pylint
entry: poetry run pylint
language: system
types: [python]
#+end_src