#github #link #flags #path #branch #commit #repo

app ghl

更简单的构建Github链接的方式

2 个版本 (1 个稳定版)

1.0.0 2023年12月20日
0.1.0 2023年12月16日

#6#repo

MIT 许可证

14KB
152

Ghl

Github链接器

此程序允许您使用本地仓库中的信息获取各种Github链接。

只想获取您的github仓库链接?只需 ghl

如果您还想在 $BROWSER 中打开它,请添加 --web / -w 标志。

为此,您需要在shell中将变量导出到您首选的浏览器中。例如,xdg-open 不用于此,以帮助程序更跨平台。

您可以为您的仓库中的某个文件/目录指定路径。相对路径 (..) 也可以工作!

在链接中间,您会看到 treeblob。如果您指向的文件是目录,则是前者,如果不是,则是后者。为了确定这一点,您提供的路径会被解析为实际路径。这包括一些限制

  1. 路径必须存在。您不能引用已经存在于某个提交中但不再存在的文件。
  2. 符号链接会被解析为其目标。因此,您将无法创建指向符号链接的链接。

在这些情况下,您必须使用 --connector / -c 标志来指定 treeblob。请注意,此时提供的路径 不会被解析,因此它假定您指定的是相对于仓库根的路径。

默认链接指向默认分支的最新提交,正如您所期望的。但是,您可以使用 --branch / -b 标志指定您想要获取链接的不同分支/提交。例如 -b dev-b 18e5a52

该标志对输入 字面地,但是这些功能可用

  1. HEAD 表示当前提交(您也可以使用小写 head)。请注意,与默认行为的不同之处在于,它指向您当前所在的提交,而不是未来可能存在的最新可用提交。
  2. head^ 表示 "当前提交之前的提交"
  3. head~6 表示 "当前提交之前的6个提交"
  4. dev 表示 "名为 dev 的分支的最新提交"。
  5. 18e5a52 将短提交哈希扩展为完整提交哈希。

要获得这些功能,请使用 --parse / -p 标志与 - 标志一起使用。这不是默认设置,因为

  1. 指定分支名称将解析为其当前最新的提交,而不是最新可用的提交
  2. 您无法引用本地不存在的分支

如果您的仓库是分叉,默认情况下,您将获得到 您的 仓库(分叉)的链接。更准确地说,从 git remote 列表中的 第一个 远程链接被采用。如果您想建立一个到上游的链接,您可以使用 --remote / - 标志(通常会是 -)。

您是否曾经觉得某些程序在输出后不必要地打印了最后的换行符感到烦恼?不?只有我一个人吗?嗯,您可以使用 --trim / - 标志来删除它。

其他远程

虽然这个程序是专门为 Github 制作的,但考虑到这些假设,它也可以在技术上用于其他远程

  1. 您正在使用 git
  2. 在链接中的仓库名称之后,如果您是指向目录(或者如果未指定文件路径,则为分支),则为 tree;如果您不是,则为 blob
  3. tree / blob 之后是分支名称或提交哈希。
  4. 文件路径在这些之后

用法

An easier way to construct Github links.

Usage: ghl [OPTIONS] [PATH]

Arguments:
  [PATH]

Options:
  -b, --branch <BRANCH>   Make a link to a specific branch / commit.
                          Branch is not specified by default, which
                          results in making the link follow the default
                          branch
  -p, --parse             Parse `branch` argument with `git rev-parse`.
                          This allows you to use things like HEAD (or
                          just head), HEAD^, commit~2; short commit
                          hashes become long commit hashes, branch names
                          become their latest commit's hash.
                          Essentially, everything that happens when you
                          use `git rev-parse`. This is not the default
                          because you couldn't specify links to branches
                          that way, and would only be able to specify
                          links to a branch's latest commit
  -r, --remote <REMOTE>   Specify remote name explicitly. By default,
                          takes the first one from `git remote`. If your
                          repo is a fork, this will result in a link to
                          *your* repository, rather than the upstream
                          one. You can specify `upstream` (usually) to
                          mean the upstream repository
  -t, --trim              Trim the final newline of the output link
  -w, --web               Open the resulting link in your $BROWSER
  -c, --connector <WORD>  Assume the provided filepath is literal and is
                          relative to the repo root, and provide the
                          connector type yourself. `tree` if you're
                          pointing to a directory, `blob` if not. Useful
                          when you're trying to point to a symlink,
                          rather than the file it points to, or if
                          you're pointing to a file you know is going to
                          be in the remote but not locally. This is
                          required when you're specifying a file that no
                          longer exists, but did in some commit
                          [possible values: blob, tree]
  -h, --help              Print help
  -V, --version           Print version

安装

cargo install ghl

也支持 cargo-binstallcargo-quickinstall

卸载

cargo uninstall ghl

依赖关系

~3–12MB
~142K SLoC