mercurial:获取存储库名称的任何命令或python api
是否有任何Mercurial命令或Python API可以生成repo名称?这将有助于开发跨回购脚本 我找到的唯一相关解决方案是解析mercurial:获取存储库名称的任何命令或python api,mercurial,Mercurial,是否有任何Mercurial命令或Python API可以生成repo名称?这将有助于开发跨回购脚本 我找到的唯一相关解决方案是解析.hg/hgrc[path]部分的“default”配置选项 [paths] default = ssh://server//path/tools 我想一定有更优雅的解决办法 如果您想获取远程default别名的最后一段路径,那么处理hg path default的输出将是更好的选择 如果您想获得mercurial存储库的本地目录名,我没有好的解决方案,除了检查N
.hg/hgrc[path]
部分的“default”配置选项
[paths]
default = ssh://server//path/tools
我想一定有更优雅的解决办法 如果您想获取远程
default
别名的最后一段路径,那么处理hg path default
的输出将是更好的选择
如果您想获得mercurial存储库的本地目录名,我没有好的解决方案,除了检查Notify扩展的代码(在其中,经过一些技巧后,)mercurial中没有真正的“存储库名”概念(存储库不“知道”或关心自己的名称)。我想你的意思是“默认拉路径的最后一个过去组件” 如果是这样,那么解析
hgpath default
的输出将是获取该信息的最直接的方法
但是,您应该注意,默认路径可以(并且经常)更改:请考虑在测试时克隆本地克隆:
$ hg clone http://server/lib-foo
$ hg clone lib-foo lib-foo-test
$ hg clone lib-foo-test lib-foo-more-testing
lib-foo-more-testing
克隆具有返回到lib-foo-test
的默认推送路径
这意味着解析hg路径默认值
不会比使用basename$(hg root)
可靠得多-两者都可能与最初克隆的存储库的(基本)名称完全不同
如果您真正想要的是获得存储库的“标识”,那么您应该使用
$ hg log -r 0 --template "{node}"
存储库中的第一个变更集散列通常会唯一标识存储库,即使克隆更改名称,它也会保持稳定。(如果存储库有两个或多个根,那么第0个变更集原则上可以在克隆之间有所不同。不过,人们必须积极尝试使其有所不同。)您可以使用
hg root
命令返回本地目录名,并使用basename
提取最后一个组件。因此,如果您的项目位于/Users/jrh/code/halo7
中,这将产生halo7
。hg root返回本地路径/dir,这可能与回购名称完全不同。@gavinb-Winboys怎么办,它在板上没有basename?@frankc正如Martin所指出的,对于唯一的回购名称本身没有规范定义;它只是按照惯例,通常是repo名称。@Lazybagger您可以安装CygWin,在Windows上获得完整的命令行工具套件*nix。否则,您可能可以使用DOS shell中的一些功能(请参阅)。这解释了为什么它看起来如此基本,但我找不到明显的解决方案。谢谢超级答案!