Search code examples
gitgit-branchgit-bare

How do I create a master branch in a bare Git repository?


git init --bare test-repo.git
cd test-repo.git

(Folder is created with git-ish files and folders inside)

git status

fatal: This operation must be run in a work tree (Okay, so I can't use git status with a bare repo; makes sense I guess)

git branch

(Nothing, it seems the bare repo doesn't contain any branches. Do I have to add them from a cloned repo?)

cd ..
mkdir test-clone
cd test-clone
git clone ../test-repo.git

(I get a warning about cloning an empty repository)

cd test-repo

(The prompt changes to indicate I am on the master branch)

git branch

(Shows no results - eh?)

git branch master

fatal: Not a valid object name: 'master'

Um. So how do I create the master branch in my bare repo?


Solution

  • A bare repository is pretty much something you only push to and fetch from. You cannot do much directly "in it": you cannot check stuff out, create references (branches, tags), run git status, etc.

    If you want to create a new branch in a bare Git repository, you can push a branch from a clone to your bare repo:

    # initialize your bare repo
    $ git init --bare test-repo.git
    
    # clone it and cd to the clone's root directory
    $ git clone test-repo.git/ test-clone
    Cloning into 'test-clone'...
    warning: You appear to have cloned an empty repository.
    done.
    $ cd test-clone
    
    # make an initial commit in the clone
    $ touch README.md
    $ git add . 
    $ git commit -m "add README"
    [master (root-commit) 65aab0e] add README
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 README.md
    
    # push to origin (i.e. your bare repo)
    $ git push origin master
    Counting objects: 3, done.
    Writing objects: 100% (3/3), 219 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To /Users/jubobs/test-repo.git/
     * [new branch]      master -> master