How to update a git clone --mirror?
Solution 1
This is the command that you need to execute on the mirror:
git remote update
Solution 2
Regarding commits, refs, branches and "et cetera", Magnus answer just works (git remote update).
But unfortunately there is no way to clone / mirror / update the hooks, as I wanted...
I have found this very interesting thread about cloning/mirroring the hooks:
http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread
I learned:
The hooks are not considered part of the repository contents.
There is more data, like the
.git/descriptionfolder, which does not get cloned, just as the hooks.The default hooks that appear in the
hooksdir comes from theTEMPLATE_DIRThere is this interesting
templatefeature on git.
So, I may either ignore this "clone the hooks thing", or go for a rsync strategy, given the purposes of my mirror (backup + source for other clones, only).
Well... I will just forget about hooks cloning, and stick to the git remote update way.
- Sehe has just pointed out that not only "hooks" aren't managed by the
clone/updateprocess, but also stashes, rerere, etc... So, for a strict backup,rsyncor equivalent would really be the way to go. As this is not really necessary in my case (I can afford not having hooks, stashes, and so on), like I said, I will stick to theremote update.
Thanks! Improved a bit of my own "git-fu"... :-)
Solution 3
See here: Git doesn't clone all branches on subsequent clones?
If you really want this by pulling branches instead of push --mirror, you can have a look here:
"fetch --all" in a git bare repository doesn't synchronize local branches to the remote ones
This answer provides detailed steps on how to achieve that relatively easily:
Related videos on Youtube
Comments
-
J. Bruni almost 2 yearsI have created a git repository to mirror a live site (which is a non-bare git repository):
git clone --mirror ssh://[email protected]/path/to/repoNow, to keep this mirror clone updated with all changes from its remote origin, which command or commands I must use?
I'd like to keep everything updated: commits, refs, hooks, branches, etc.
Thanks!
-
J. Bruni over 11 years@Magnus Skog: Great. Thanks! Is this all? Do I need another commmand, likegit fetch? Orgit remote updatealone will do it all? -
Thorbjørn Ravn Andersen over 11 yearsI'd like to know too what the difference to git fetch is. -
J. Bruni over 11 yearspushis not an option for me because I need to do it at the receiving side (from where the clone is);pullis also not an option because a mirror repository is a bare repository (no working tree, thus no "pull") - it seems thatgit remote updateindeed does it all (much easier than the referenced answer)... Anyway, thanks! Certainly there is valuable information in the linked questions/answers. -
ralphtheninja over 11 years@Thorbjörn (you'll have to do with a swedish ö :)): Git fetch just updates your repository with remote references from the remote. This command updates everything on the mirrored repository. -
sehe over 11 yearsok, I meant pulling as in the usual parlance. Push and pull technology. There's hardly another word except the nonsensical 'get the data from a remote actively at the client' that would not dub a word that has meaning to git or DVCS systems :) The second link will provide the details you want. Note, that 'git remote update' does not in fact maintain the 'mirror' status without the extra operations mentioned there -
ralphtheninja over 11 yearsHere's a good answer that explains more: stackoverflow.com/questions/3959924/… -
J. Bruni over 11 yearshmm... sorry (HTH) - it seems an "absolute" mirror is more easily achieved through a simple "rsync" of the original repo folder... not what I wanted, but.. I just did some tests... and nothing seems to copy the hooks - which I am particularly interested in... -
J. Bruni over 11 yearsFYI, the purposes of this mirror are these, only: 1) complete backup from where I can restore if the data at original repo server is lost; 2) somewhere from where others can clone from and get a local working repo, without having any access to the original source repo -
J. Bruni over 11 years@Thorbjörn: Good question. I have been using a simple "git fetch". I created the question because: 1) After reading something it seemed to me that maybe I am losing information doing this simple way. 2) I want to clone/mirror the hooks! -
J. Bruni over 11 years@Magnus Skog: That's great! It seems the answer is indeed that simple - as it should be. I am only a bit "sad" that I wanted to mirror also the hooks, but it seems that they are not considered part of the "controlled source" of the "source control"... -
sehe over 11 yearsIf you want hooks and everything, gitosis might (don't remember well) have what you need, but I'd go withrsyncin that case. Also, I assume you are forgetting about stashes (see here) and rerere information too...? -
ralphtheninja over 11 yearsYup, hooks is a completely different story. For good and bad. -
teeks99 about 8 years'git remote update --prune' will do all this, but remove branches when they are removed from the original repository.