Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delete git master branch on a private server (not GitHub)

I have a project hosted on my own personal git server (it is not on GitHub). The master branch is a stale old cookie, and I don't need it anymore.

A couple of months ago I created a 0.8/develop branch off of master and since then we've gone through 0.8/master, 0.9/develop, 0.9/master and we're currently on 1.0/develop. I'd like to get rid of the master branch, mainly because it doesn't match the naming convention that we've established. It's just a matter of housekeeping.

I found several related questions on SO, as well as a blog post, but they all seem to be specific to use of GitHub, and not my own private server:

  • I can't delete a remote master branch on git
  • http://matthew-brett.github.io/pydagogue/gh_delete_master.html

These both specifically say something to the effect of:

You need to go to the main GitHub page for your forked repository, and click on the 'Settings' button.

Of course, this is not an option as I'm not using GitHub. I'm guessing that I can edit the contents of the config file in my bare repo to achieve the same results. Is that correct? The config file currently looks like this:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
        sharedRepository = group
[remote "origin"]
        url = file:///Library/WebServer/Documents/loupe
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

I have two questions:

  1. Should I set my default repo to my current working branch (1.0/develop), or the oldest branch that's left (0.8/develop)?
  2. What modifications do I need to make to the config file to set the default repo?
like image 839
Ben Harold Avatar asked Jul 09 '13 21:07

Ben Harold


1 Answers

First decide which branch should be the default branch when the repository is cloned. I assume new_master for this example.

On one of the clients create the new_master branch on the remote repository, you may use anything for master instead, e.g. a commit or another branch name, or skip this step if you already have a suitable branch on the remote.

git push origin master:new_master

The next step can't be done from remote, so execute the command in your remote repository (e.g. using SSH):

cd /path/to/my_git_repo
git symbolic-ref HEAD refs/heads/new_master

Alternatively, change the content of the HEAD file directly.

Back on the client:

git fetch
git remote show origin

You should see that the HEAD points to new_master instead of master (or that HEAD is ambiguous if you set new_master to be master). Now we can remove the old master:

git push origin :master

Git shouldn't complain anymore about the deletion. Finally, set the local refs/remotes/origin/HEAD:

git remote set-head origin -a
like image 135
nif Avatar answered Oct 30 '22 09:10

nif