I'm writing a tool to backup all my repositories from Bitbucket (which supports Git and Mercurial) to my local machine.
It already works for Mercurial, where I do it like this:
- create a new empty repository without a working copy on the local machine
(the same like abare
Git repository) - pull from the remote repository into the local empty repository
Now I'm trying to do the same with Git.
I already found out that I can't directly pull
to a bare repository and that I should use fetch
instead.
So I tried it:
C:\test>git fetch https://github.com/SamSaffron/dapper-dot-net.git
remote: Counting objects: 1255, done.
remote: Compressing objects: 100% (1178/1178), done.
remote: Total 1255 (delta 593), reused 717 (delta 56)
Receiving objects: 100% (1255/1255), 13.66 MiB | 706 KiB/s, done.
Resolving deltas: 100% (593/593), done.
From https://github.com/SamSaffron/dapper-dot-net
* branch HEAD -> FETCH_HEAD
Obviously Git did fetch something, but the local repository is empty after that.
(git log
says fatal: bad default revision 'HEAD'
)
What am I doing wrong?
Disclaimer:
I have only very, very basic Git knowledge (I usually use Mercurial).
And I'm using Windows, if that matters.
Try
git fetch https://github.com/SamSaffron/dapper-dot-net.git master:master
To backup the remote repository into your bare repository regulary configure first
git config remote.origin.url https://github.com/SamSaffron/dapper-dot-net.git
git config remote.origin.fetch "+*:*"
and then simply run
git fetch --prune
to backup.
- You probably can skip the fist configuration addition as this should has been already set while cloning the remote repository.
- Please also mind the enclosing double quotation marks (
"
) in the above command to protect the asterix (*
) not to be interpreted from your shell. - The plus sign is needed to allow non-fastforward updates. That is probably your intention if you want to backup the current state of your remote.
- Option
--prune
is used to also delete by now non-existent branches.
I think you if you really want to backup. You can try $ git clone --mirror XXXX
command. it will get almost everything from repository. Hope it is helpful.
$ git fetch https://github.com/SamSaffron/dapper-dot-net.git +refs/heads/*:refs/heads/* --prune
来源:https://stackoverflow.com/questions/7895798/how-do-i-pull-fetch-with-git-into-a-bare-repository