git help some-alias
打印别名配置值,例如:
$ git help aliases
'aliases' is aliased to '!git config --get-regexp '^alias\.' | cut --delimiter=. --fields 2-'
我想以git help diff
与其他别名相同的方式提供此别名和其他别名的详细帮助。到目前为止我已经得到了这个:
{
config.programs.git.package = pkgs.gitFull.overrideAttrs (
old: {
postInstall =
old.postInstall
+ ''
cp ${./includes/git-aliases/docs}/* $doc/share/doc/git/
'';
}
);
}
它成功地将一些文本文件复制到/nix/store/[git package]-doc/share/doc/git/
,但这些文件在运行时不会显示git help aliases
。
我还需要做什么才能将文档链接到子help
命令?更新一些文件注册表?.html
即使我只想要 CLI 文档,也要添加文件吗?还有别的事吗?
因此,大多数时候,Nix 放置文件的方式与正常 FHS 发行版中的放置方式完全相同,只是它在路径前加上前缀
/nix/store/somehash-somename/
($out
在构建时使用 equals),并且删除了一些路径。例如,由于在 FHS 发行版中,/usr/
和/usr/local
包含/
与用户安装的程序基本相同的结构(nix 中不需要),因此 nix 将删除/usr
和/usr/local
前缀。这是非常实用的,因为这样 nix 可以简单地设置$PREFIX=/nix/store/somehash-somename/
(通常默认设置为/usr/local
)并按原样运行大多数现有的自动工具/cmake/make 脚本。特别是,由于在正常的 FHS 发行版中手册页位于 中
/usr/share/man
,因此在 nix 中我们只需将手册页安装在 中$out/share/man
。现在,为了解决您的具体问题,最困难的部分实际上是理解 git 如何查找其命令的文档。既然您提到了该
git diff
命令,让我们检查 git 文件夹以找出它存储文档文件的位置:宾果,看起来文档是一个简单的
man
文件。实际上,如果我们运行:看起来 git 直接运行
man gitmytest
(不知道为什么这里不再涉及破折号......),即使不是mytest
现有的 git 命令,这似乎也可以工作。所以我们只需要创建一个 man 条目gitmytest
!为此,让我们在一个新文件中创建此模板
git-mytest
(通过谷歌搜索如何创建手册页即可获得):然后,我们只需要创建一个基本包来安装它。请注意,无需覆盖
gitFull
,我们只需创建一个新包将其安装在单独的包中即可。在我的测试中,我将使用一个default.nix
包含以下内容的文件:我们可以构建它并检查文件是否已正确生成:
很酷,nix 甚至为我们压缩了它。要仔细检查内容是否正确,您可以运行它
zcat ./result/share/man/man1/gitmytest.1.gz
,它将打印未压缩的文件。现在,是时候尝试一下了。一种解决方案是直接在系统范围内安装它,方法是将上述推导插入到您的
configuration.nix
或其他位置。但出于测试目的,我想避免全局安装它,所以我只是创建了一个shell.nix
加载我们刚刚创建的包的程序:您可以看到我添加了一条
shellHook
:实际上仅此测试需要此行,以便指定man
应在何处查找手册页。但一旦您实际安装了该程序,就不再需要它了。然后,加载 shell 并进行测试:
有用!享受 ;-)
编辑 好的,如果创建了别名,上面的说明似乎不起作用,在这种情况下,消息总是相同的
myalias is aliased to XXX
。这来自代码中的这一行,似乎无法直接避免。然而,您可以简单地创建一个新的 git 插件(如果您需要记录它,那么创建一个别名可能是有意义的),而不是创建别名,即一个名为(运行时,git 将git-mytest
自动git mytest
运行git-mytest
)。git-mytest
可以是直接调用 git 的简单 bash 脚本。这可以按如下方式完成(请注意,这次您需要在手册页中写入连字符,似乎它根据命令的类型赋予不同的手册页名称):只需
default.nix
用此替换上面的文件,然后再次运行即可nix-shell
。然后,你应该可以输入: