Careful with your Git remote config
I thought I was being clever with my Git remote config.
For some time, I had the following in my ~/.gitconfig
:
I like keeping my branches tidy on the projects I work on and the more developers that are working on a project, the
more branches are getting created, merged and deleted all the time. The above Git config means that every time you
fetch, Git will prune remote branches automatically, just like it would if you used git fetch --prune
. This worked
great and I thought I was being clever!
However, recently when I built the repositories for a few of my new projects (personal and work), I noticed a problem when I came to add the remote GitHub or BitBucket (I know, I know - we have to use BitBucket at work - it’s bloody terrible!). As normal, I’d issue the following command to add the remote repo:
But this would throw the error:
fatal: remote origin already exists.
Bugger!
Git (as always) wasn’t lying either!
I was puzzled for a while trying to work out why, on a newly created and blank repo, Git was complaining that an origin already existed. Git (as always) wasn’t lying either!
Whilst the above configuration conveniently sets the configuration for a remote repository to always prune remote
branches when fetching, having this set implies that a remote with the name origin
already exists, hence the
phantom origin
in the above example shows up when listing remote repositories, even though technically is does not
exist.
fatal: remote origin already exists.
Googling for the error above yields many many suggestions for users to use the following:
But that doesn’t really address the problem here. The real solution to that error is to remove the configuration at
the top of the post from your Git config file (.git/config
or ~/.gitconfig
), which is just what I did and the
error went away!
It’s annoying that you can’t set the default configuration for a remote that does not necessarily exist yet in your Git config, but hopefully this will be possible in a future version of Git.
Update 17/04/2015
I’ve found a solution!
Thanks to Alberto Grespan’s blog post I found that you can set the default behaviour for git fetch
to prune
remote branches automatically with the following command:
Or the following in your Git config:
I’ve added this to my ~/.gitconfig
and have been using it for the past few days and it works a treat!
Moral of the story: Git is awesome!!!