在 git 别名中使用 awk:别名通过完整的本地引用名称 `git push -d remotes/remote-name/topic/branch` 删除远程分支

Use awk in git alias: alias to delete remote branch by full local ref name `git push -d remotes/remote-name/topic/branch`

为什么要git push -d remotes/remote-name/topic/branch
这是您在 gitk 中获得的格式,我经常在 gitk 中找到我想要删除的远程分支。右键单击 gitk 中的分支名称,复制并执行类似 git nuke remotes/remote-name/topic/branch.

的操作

我目前拥有的:
echo remotes/origin/epic/T-12345 | awk '{gsub(/^remotes\/[^\/]*\//, "")}{print}' 这工作正常,打印 epic/T-12345 - 它根据更易于阅读的 PCRE 来截断字符串 ^remotes/.*?/ 的可选开头。

问题: 当我尝试像这样在 git 别名中使用它时(git-for-windows,运行 from git-bash):

test1 = "!f() { \
  echo  | awk '{gsub(/^remotes\/[^\/]*\//, "")}{print}'; \
}; f"

我得到fatal: bad config line 5 in file C:/Users/username/.gitmorealiases

计划是做如下事情:

test1 = "!f() { \
  REPLACED=`echo  | awk '{gsub(/^remotes\/[^\/]*\//, "")}{print}'`; \
  git push -d origin $REPLACED;
}; f"

来自已接受答案的两个工作 git 别名:

echo替换为您需要的实际命令,例如git push -d origin

v1_awk = "!f() { \
  replaced=$(echo "" | awk '{gsub(/^remotes\/[^\/]*\//, \"\")}{print}'); \
  echo "$replaced"; \
}; f"
v2_shell = "!f() { echo \"${1#remotes/*/}\"; }; f"

\/是一个未知的转义序列,你必须在".

里面转义\
test1 = "!f() { replaced=$(echo "" | awk '{gsub(/^remotes\/[^\/]*\//, \"\")}{print}') && git push -d origin \"$replaced\"; }; f"

来自 man git configInside double quotes, double quote " and backslash \ characters must be escaped: use \" for " and \ for \.

至于shell:更喜欢使用小写的局部变量名,引用变量扩展来防止分词,更喜欢使用$(...)而不是反引号。

反正我觉得只是:

test1 = "!f() { git push -d origin \"${1#remotes/*/}\"; }; f"