Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is this a bad config line for my .gitconfig?

Tags:

git

bash

bd = "!f() { git branch --merged | egrep -v '(^\*|master|dev)' | xargs git branch -d }; f"

I'm trying to alias a git command to remove all of my local merged branches.
When I put the bash command into my gitconfig as above, git complains about a bad config line:
fatal: bad config line 26 in file /Users/johnsona/.gitconfig

like image 374
nhyne Avatar asked Oct 21 '16 16:10

nhyne


2 Answers

I'd recommend making this a bash script in your PATH instead, and then calling that script in your git alias instead (or if it's in your PATH anyway, just name the file git-bd).

For example, make the file ~/bin/git-bd

#!/usr/bin/env bash
git branch --merged | egrep -v '(^\*|master|dev)' | xargs git branch -d

Make the file executable with the command:

chmod +x ~/bin/git-bd

And make sure your .bashrc, .bash_profile or .bash_login file has the line:

export PATH="$HOME/bin:$PATH"

And you can either just call git-bd directly, or add the alias in your .gitconfig like so:

bd = "!git-bd"

To add to this answer, the reason you are getting a bad config error may be due to the back-slashes. The git-config will read them as is, so you need to escape them again with a second backslash.

like image 153
Jack Bracken Avatar answered Oct 28 '22 15:10

Jack Bracken


To make @torek's comment more visible and expand on it: there are a couple of issues with your command like this, when you want to put it in your gitconfig, and the result can be made a bit simpler.

Suppose you want to alias the following command:

git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d
  • It uses | so you have to prepend the command with ! (you already did this)
  • It uses " so you either have to escape those with \" or use single ' (also already fixed)
  • It uses \ so you have to escape it with \\.

Result:

[alias]
    delete-merged-branches = ! git branch --merged | egrep -v '(^\\*|master)' | xargs git branch -d 

You could also run in bash (not that git will escape \ for you, but you have to wrap in " so you need to escape those)

git config --global alias.delete-merged-branches "! git branch --merged | egrep -v '(^\*|master|dev)' | xargs git branch -d"
like image 2
PHPirate Avatar answered Oct 28 '22 16:10

PHPirate