如果远程被删除为别名,则git删除本地分支

时间:2018-01-19 18:16:03

标签: git function alias

我对git很新,我想为这个命令设一个别名,但我遇到了麻烦。

$items_collection = Mage::getModel('checkout/session')->getQuote()->getItemsCollection();
$items_collection->addFieldToFilter('product_id', $_product->getId());

foreach ($items_collection as $item) {
echo $item->getProduct()->getId();
}

这是这里问题的一个功能。 Remove local branches no longer on remote

该功能对我来说非常有效,但是当我尝试将其放入别名时,它会运行但不起作用。任何建议将不胜感激。这就是我的配置中的样子。

git fetch -p &&git branch -vv|grep ': gone]'|awk '{print $1}'|xargs git branch -D

2 个答案:

答案 0 :(得分:1)

您只需在别名的定义中添加"; f"

也就是说:

[alias] deletedone = "!f() { git fetch -p && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D; }; f"

或运行命令的相同内容:

git config alias.deletedone '!f() { git fetch -p && git branch -vv | grep '\'': gone]'\'' | awk '\''{print $1}'\'' | xargs git branch -D; }; f'

或使别名为全局(独立于任何回购):

git config --global alias.deletedone '!f() { git fetch -p && git branch -vv | grep ": gone]" | awk '\''{print $1}'\'' | xargs git branch -D; }; f'

编辑:由于该别名的原始版本不够健壮,正如本comment所指出的,我做了一些调整以最终获得以下版本:

git config --global alias.deletedone '!f() { git fetch -p && git branch -vv | \
  perl -wne '\''print "$1\n" if m/^\s*(\S+)\s+[0-9a-f]+\s+\[\S+: gone\]/;'\'' | \
  xargs git branch -d; }; f'

答案 1 :(得分:1)

您正在定义一个函数但从未运行它。根据我的意见,根本没有必要定义一个。

git config --global alias.deletedone '!bash -c "git fetch -p && git branch -vv | grep \': gone]\' | awk \'{print $1}\' | xargs git branch -D" -'

不是在我可以测试它的计算机上,但它应该做你想做的事情(可能在那里有语法错误)。

在git外部调用时,调用一个新的bash实例会将它放在自己的范围内。当我不使用这种语法时,我遇到了奇怪的范围问题。

相关问题