使用sublime merge在Gerrit下时push 文件需要使用 push origin HEAD:refs/for/master,所以造成了无法push,因此在官方文档中发现是可以进行自定义命令的
官方文档说明(Customization部分)
此部分有三个小类翻译过来就是
- 键绑定
- 命令面板
- 自定义命令
需要的功能是能输入我需要的命令,我想应该是自定义命令
命令面板
Sublime Merge命令面板中可用的命令是由以 .sublime-commands.结尾的文件定义的。命令文件使用JSON,其顶层结构是一个数组。每个命令都是一个JSON对象。
例子
下面是.sublime-commands文件格式的示例。
[
{
"caption": "View: Toggle Side Bar",
"command": "toggle_side_bar"
},
{
"caption": "Checkout Branch…",
"command": "checkout_branch",
},
{
"caption": "Checkout Remote Branch…",
"command": "checkout_branch",
"args": { "local_refs": false, "remote_refs": true }
},
]
条目
每个命令面板条目都需要两个keys,“caption”和“command”。要向命令传递args,可以指定“args”键。
“caption”值必须是一个字符串,并指定要在命令面板中显示的文本。“command”值也必须是一个字符串,并指定要执行的命令的名称。
用于查看所选提交的树的条目
{
"caption": "View Tree",
"command": "view_tree"
}
args值必须是一个对象,每个键都是要传递给命令的arg的名称。
推送当前分支的条目,但提示用户选择选项
{
"caption": "Push...",
"command": "push",
"args": {"prompt": true}
}
用户条目
用户可以通过创建一个名为Default.sublime-commands他们的Packages/User/directory
例如,下面的代码将创建一个条目来清理当前repo。
[
{
"caption": "Cleanup Repo",
"command": "git",
"args": {"argv": ["gc"]}
}
]
自定义命令
在阅读本节之前,请先阅读命令面板文档,了解如何向命令面板添加自定义条目,就是上面说的。
Sublime Merge是为定制而设计的。您可以轻松地将自己的定制Git命令添加到菜单中,并使用定制选择器创建更复杂的命令。
基础例子
下面是一个运行git rebase -i master的基本自定义git命令的示例。
{
"caption": "Interactive rebase onto master",
"command": "git",
"args": {"argv": ["rebase", "-i", "master"]}
}
你可以看到参数是在"argv"数组中指定的,每个参数用逗号分隔。
使用选择器
上面所示示例的限制在于master是写死的。如果我们想要选择一个要基于别的分支呢?
这就是选择器派上用场的地方。选择器允许我们在运行时选择一个引用,而不是写死的固定一个值。
可用的选择器
Sublime Merge支持以下选择器,可以与git命令一起使用:
$select_branch
允许用户选择分支(本地或远程)
$select_local_branch
允许用户选择本地分支
$select_remote_branch
允许用户选择远程分支
$select_commit
允许用户选择提交(以提交hash的形式)
$select_tag
允许用户选择一个tag
$select_stash
允许用户选择隐藏(以隐藏索引的形式)
$text
允许用户提供任意文本
如果我们想要更新前面的例子,我们可以执行以下操作:
{
"caption": "Interactive rebase…",
"command": "git",
"args": {"argv": ["rebase", "-i", "$select_branch"]}
}
现在,将提示用户选择一个要重新基于的分支。
部分总结
可以用了,但是,假如我想使用
{
"caption": "push test",
"command": "git",
"args": {"argv": ["push", "origin", "HEAD:refs/for/$select_branch"]}//这里文本不可拼接
}
{
"caption": "push test",
"command": "git",
"args": {"argv": ["push", "$select_branch", "$text"]}//这样就可以
}
//上面则变成了 git push branch “xxxxx”
这样的话,命令行还是能用tab补全,这里就只能手敲了
在软件中按 CTRL + P输入 caption 中的文本就可以使用自己自定义的命令了。
注意,这里的 $text 是带双引号的,这个可以用在commit信息之类的,但对于Gerrit的**refs/for/**问题依然是不能动态使用的,看来只能写死到里面了,好像还没有终端敲命令好用。
使用自定义菜单
使用这种格式的 .sublime-menu 文件.
[
{
"caption": "File",
"mnemonic": "F",
"id": "file",
"children":
[
{ "command": "new_window", "caption": "New Window" },
{ "command": "close_window", "caption": "Close Window" },
{ "caption": "-", "id": "exit" },
{ "command": "exit", "caption": "Exit", "mnemonic": "x", "platform": "Windows" },
{ "command": "exit", "caption": "Quit", "mnemonic": "Q", "platform": "Linux" },
]
}
]
格式说明
每个菜单项都是一个带有一个或多个键的JSON对象。支持的键列表包括:
"caption"
菜单显示的文本
"mnemonic"
用作按下以激活条目的键的字符。仅适用于Windows和Linux系统。必须与“标题”中字符的大小写匹配。就是快捷键,比如文中的F,打开列表后按F按键直达菜单
"command"
激活条目时要执行的命令的字符串
"args"
要发送给命令的args的JSON对象
"children"
用于从中创建子菜单的条目的JSON数组,就是子菜单的意思
"id"
菜单项的唯一字符串。用于带有“子”的菜单项,以允许添加额外的子项。
"platform"
其中一个字符串:"OSX", "!OSX", "Windows", "!“Windows”、“Linux”或“!Linux”。控制在什么平台上显示条目。每个菜单条目至少需要“标题”键作为非功能性条目,或者“命令”键作为执行操作的条目。
可用菜单和变量
Sublime Merge有14个菜单可以定制。菜单有上下文变量,可以在“标题”和“args”字段中使用。
可用变量
以下上下文变量可在所有菜单中使用:
$working_dir
文件夹路径
$git_dir
git 文件夹, i.e. .git/
$commit
所提交的全hash
$short_commit
所提交的短hash
$head
分支名字或提交头HEAD的hash
$head_ref
分支名字或HEAD, 当处于分离头部状态时
可用的菜单
Main.sublime-menu
应用程序的主菜单
Action.sublime-menu
菜单…在工具栏中“搜索”右边的按钮
Advanced Commit.sublime-menu
提交按钮右侧向下箭头按钮的菜单
Branch Section.sublime-menu
位置选项卡中的分支标题的上下文菜单
Branch Folder.sublime-menu
“位置”选项卡中的分支文件夹的“上下文”菜单
非常多就不全部列举了,具体可以到官网参考。
添加子菜单
使用条目的“id”键,可以向子菜单添加条目。添加子菜单项时,只指定父菜单项的“id”和“children”键,并将“children”的值设置为附加到子菜单的条目数组。
例如,要在Repository菜单中添加一个运行git gc的条目,创建如下的条目:
[
{
"id": "repository",
"children":
[
{
"caption": "Cleanup Repo",
"command": "git",
"args": {"argv": ["gc"]}
}
]
}
]
要查找条目的“id”,请参阅文件Main。Default.sublime-package。有关在哪里查找包和查看内容的信息,请参阅Packages文档
实例
添加文件 Packages/User/Branch.sublime-menu
[
{
"caption": "推送HEAD到远程分支...",
"command": "git",
"args": {
"argv": ["push", "--progress", "origin", "HEAD:refs/for/$branch"]
}
},
{
"caption": "推送HEAD到Gerrit分支",
"children":
[
{
"caption": "origin",
"command": "git",
"args": {
"argv": ["push", "--progress", "origin", "HEAD:refs/for/$branch"]
}
},
{
"caption": "origin2",
"command": "git",
"args": {
"argv": ["push", "--progress", "origin2", "HEAD:refs/for/$branch"]
}
}
]
},
]
在提交记录中鼠标邮件就看见新添加的两个菜单,到此解决了我的问题。