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?
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
A branch is just a reference to a commit. Until you commit anything to the repository, you don't have any branches. You can see this in a non-bare repository as well.
$ mkdir repo
$ cd repo
$ git init
Initialized empty Git repository in /home/me/repo/.git/
$ git branch
$ touch foo
$ git add foo
$ git commit -m "new file"
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 foo
$ git branch
* master