When creating a git repository that will be on the server, can I convert it to a bare repository? [duplicate]
Asked Answered
M

3

29

I already created a repository. Can I make it a bare type or shall I start over?

Meggie answered 23/11, 2009 at 16:59 Comment(0)
L
41

According to the FAQ, conversion from non-bare to bare can be done in two ways. The best one:

$ git clone --bare -l repo repo.git
$ rm -rf repo

To create a bare repository from scratch:

$ mkdir repo.git
$ cd repo.git
$ git --bare init
Lemaceon answered 23/11, 2009 at 17:16 Comment(6)
Why is the first method "easier"? The second method seems both safer and easier (you don't need the renames to get the same result as the first method, just git clone --bare repo followed by rm -rf repo will do).Dantzler
@Dan is right, and I have modified my answer to only contain the safe and easy approach. With the version of git on my box (1.5.6.5), I still need to provide the target directory when calling git-clone, though.Hearst
Doesn't git clone set the origin remote to the one cloned from? In this case to ./repo, which you rm'd...Stasiastasis
The FAQ now suggests git clone --bare -l. The -l asks for hardlinks, which makes this faster. Although note that by using git clone you lose config settings/remotes, so beware.Elata
@Marius: Thanks for the heads-up. I have an -l and updated the FAQ link to reflect URL changes.Hearst
Note that hardlinking with -l will save time and space during cloning and prevent you from loosing data if you later remove the non-bare repo, as the files are still linked by the bare one. Of course it only works if your file system supports hard links..Earle
S
20

Just move the .git folder away from the working copy.

mv /var/git/repo/repo/.git /var/git/repos/repo.git

You might want to follow that up with a

git config --bool core.bare true

in that repository, just in case git complains about something not being right.

Shier answered 23/11, 2009 at 17:7 Comment(4)
how do I create a bare repo rigth from the start?Meggie
Pass the --bare flag to git: $ mkdir myrepo.git && cd myrepo.git && git --bare initEnder
Or just git init --bare myrepo.gitMistranslate
Note that being able to do git init --bare as an alternative to git --bare init came in in v1.5.6 ~Jun 08.Firm
D
5
git clone --bare repo

This will give you a new bare version of repo named repo.git. Easy, no?

Dantzler answered 23/11, 2009 at 19:7 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.