How do I update my bare repo?

Git

Git Problem Overview


I created a bare repo to publish my repository, but I can't figure out how to update the bare repo with the current state of the main repository.

Git Solutions


Solution 1 - Git

If you want to duplicate all the objects from the main repo, do this inside the main repo:

git push --all <url-of-bare-repo>

Alternatively, do a fetch inside the bare repo:

git fetch <url-of-main-repo>

You cannot do a pull, because a pull wants to merge with HEAD, which a bare repo does not have.

You can add these as remotes to save yourself some typing in the future:

git remote add <whatever-name> <url-of-other-repo>

Then you can simply do

git push --all <whatever-name>

or

git fetch <whatever-name>

depending on what repo you're in. If <whatever-name> is origin, you can even leave it out altogether.

Disclaimer: I'm not a git guru. If I said something wrong, I'd like to be enlightened!

Update: Read the comments!

Solution 2 - Git

I created a repository using the following command

git clone --bare <remote_repo>

Then I tried to update the bare clone using the answer by Thomas, but it didn't work for me. To get the bare repository to update (which is what I think Let_Me_Be was asking), I had to create a mirror repository:

git clone --mirror <remote_repo>

Then I could run the following command in the mirrored repository to grab the main repository's updates:

git fetch --all

I came across this solution by reading Mirror a Git Repository By Pulling

Solution 3 - Git

The only solution besides recreating with git clone --mirror is from Gregor:

git config remote.origin.fetch 'refs/heads/*:refs/heads/*'

then you can git fetch and you'll see the updates. The weird thing is that before this, even though there is a remote configured, it has no branches listed in git branch -a.

Solution 4 - Git

Assuming:

$ git clone --bare https://github.com/.../foo.git

Fetch with:

$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune

Note: --git-dir=foo.git is not required if you cd to the directory first.

Solution 5 - Git

After much messing around I've found that this works for me.

Once:

git clone --mirror ssh://[email protected]:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'

Everytime I want to sync:

cd /home/myhome/repo.git
git --bare fetch ssh://[email protected]:2000/repo
git  fetch ssh://[email protected]:2000/repo
git push --mirror remote_site

Solution 6 - Git

Add the bare repository as a remote repository, then use git push.

Solution 7 - Git

For me this combination worked:

git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/*:refs/heads/*
git fetch -u remote_site +refs/tags/*:refs/tags/*
git push --mirror

-u parameter for fetch was necessary, otherwise I get the error message: "Refusing to fetch into current branch refs/heads/master of non-bare repository" (see also https://stackoverflow.com/a/19205680/4807875)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionŠimon T&#243;thView Question on Stackoverflow
Solution 1 - GitThomasView Answer on Stackoverflow
Solution 2 - GitaustenView Answer on Stackoverflow
Solution 3 - GitColin D BennettView Answer on Stackoverflow
Solution 4 - GitantakView Answer on Stackoverflow
Solution 5 - GitsimonvcView Answer on Stackoverflow
Solution 6 - GitPhilippView Answer on Stackoverflow
Solution 7 - GitAlexander SamoylovView Answer on Stackoverflow