Hence, git fetch and git pull both commands can be used to update the local repository with the central repository by downloading the latest changes from the central repository.
To check if you're up-to-date with GitHub run git fetch origin before git status and you'll know you're up-to-date.
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!
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
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
.
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.
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
Add the bare repository as a remote repository, then use git push
.
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