在 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
- 按照最初的要求使用 awk(在许多情况下很有用):
v1_awk = "!f() { \
replaced=$(echo "" | awk '{gsub(/^remotes\/[^\/]*\//, \"\")}{print}'); \
echo "$replaced"; \
}; f"
- 使用 shell 字符串替换(对于那些记得它是如何工作的人):
v2_shell = "!f() { echo \"${1#remotes/*/}\"; }; f"
\/
是一个未知的转义序列,你必须在"
.
里面转义\
test1 = "!f() { replaced=$(echo "" | awk '{gsub(/^remotes\/[^\/]*\//, \"\")}{print}') && git push -d origin \"$replaced\"; }; f"
来自 man git config
:Inside double quotes, double quote " and backslash \ characters must be escaped: use \" for " and \ for \.
至于shell:更喜欢使用小写的局部变量名,引用变量扩展来防止分词,更喜欢使用$(...)
而不是反引号。
反正我觉得只是:
test1 = "!f() { git push -d origin \"${1#remotes/*/}\"; }; f"
为什么要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
- 按照最初的要求使用 awk(在许多情况下很有用):
v1_awk = "!f() { \
replaced=$(echo "" | awk '{gsub(/^remotes\/[^\/]*\//, \"\")}{print}'); \
echo "$replaced"; \
}; f"
- 使用 shell 字符串替换(对于那些记得它是如何工作的人):
v2_shell = "!f() { echo \"${1#remotes/*/}\"; }; f"
\/
是一个未知的转义序列,你必须在"
.
\
test1 = "!f() { replaced=$(echo "" | awk '{gsub(/^remotes\/[^\/]*\//, \"\")}{print}') && git push -d origin \"$replaced\"; }; f"
来自 man git config
:Inside double quotes, double quote " and backslash \ characters must be escaped: use \" for " and \ for \.
至于shell:更喜欢使用小写的局部变量名,引用变量扩展来防止分词,更喜欢使用$(...)
而不是反引号。
反正我觉得只是:
test1 = "!f() { git push -d origin \"${1#remotes/*/}\"; }; f"