I have a bare git repository, but need to access and browse its contents over ssh (in a file manager like user experience).
I assume I could clone it:
git clone -l <path_to_bare_repo> <new_normal_repo> However, my repository is about 20GB in size and I don't have the space to duplicate it. Is there a way to convert the bare repository in-place to end up with a working copy in it?
A non-bare repository doesn't necessarily have a default remote "origin", either. You can create a Git repository simply with git init , which will create a non-bare repo with no remote specified.
What is a bare repository? A bare repository is the same as default, but no commits can be made in a bare repository. The changes made in projects cannot be tracked by a bare repository as it doesn't have a working tree. A working tree is a directory in which all the project files/sub-directories reside.
Note: I tested this on a very simple 1-commit repository. Double-check this, read the man pages, and always be happy you've backed up before following advice you found on StackOverflow. (You do back up, right?)
To convert a --bare repository to a non-bare:
.git folder in the top-level of your repository.HEAD branches config description hooks info objects refs etc.) into the .git you just created.git config --local --bool core.bare false to convert the local git-repository to non-bare.master (or whichever your main branch is) and all your files are deleted and the deletion is staged. That's normal. Just manually checkout master, or do a git reset --hard, and you are done..git/config file adding line fetch = +refs/heads/*:refs/remotes/origin/* after url = <...> in [remote "origin"] section. Otherwise git fetch will not see origin/master and other origin's branches.These steps are in the opposite direction of this question, "git-convert normal to bare repository" - in particular note this answer, which states that the above steps (in, I presume, either direction) is different from doing a git-clone. Not sure if that's relevant to you, though, but you mentioned git clone in the question.
I had a slightly different scenario:
Solution:
.git dir:git clone --bare https://github.com/user/project .git git config --local --bool core.bare false .git bare repo doesn't include a file 'index'.)git reset HEAD -- ..git/index.I have effectively transformed a bare repo into a non-bare one, while preserving the content I had previously got.
The full script I have been using for years involves the steps:
cd /path/to/current/worktree # That creates a .git directly at the right place git clone --bare /url/of/repo .git # restore the link between the local repo and its upstream remote repo git config --local --bool core.bare false git config --local remote.origin.fetch +refs/heads/*:refs/remotes/origin/* git fetch origin git branch -u origin/master master # reset the index (not the working tree) git reset HEAD -- . But I do recon the accepted solution (with the helpful git reset step added by ADTC) is simpler.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With