Hi,
I work on a few machines so I have repositories on all of them. One
repository can pull from or push to any other repositories (in case of
push, it pushes on remote branches). I avoid a central repository
because it's quite inconvenient when you just need to push some
changes to a machine, you have to push it to the central repository
then pull from that (and if the central repository is on WAN, double
inconvenient). Maybe this model is just plain wrong, but it'd be fun
to see if Git can work with this model.
The first thing that annoys me is remote repository management.
Everytime I add a new repository to the mesh, I need to update .config
of all repositories. Putting part of $GIT_DIR/config into working
directory may help (though there will be security concerns, perhaps
only remote.* should be allowed in in-tree config file). Next thing is
sometimes I want to see how many commits ahead/behind other
repositories, from a repository. "git status" does not help much.
Never used Mercurial but the idea of "git in" and "git out" to see how
many commits ahead/behind would be nice.
Has anyone done something like this? Any suggestions?
--
Duy
Nguyen Thai Ngoc Duy <pclouds <at> gmail.com> writes:
Hi,
I work on a few machines so I have repositories on all of them. One
repository can pull from or push to any other repositories (in case of
push, it pushes on remote branches). I avoid a central repository
because it's quite inconvenient when you just need to push some
changes to a machine, you have to push it to the central repository
then pull from that (and if the central repository is on WAN, double
inconvenient). Maybe this model is just plain wrong, but it'd be fun
to see if Git can work with this model.
The first thing that annoys me is remote repository management.
Everytime I add a new repository to the mesh, I need to update .config
of all repositories.
If I remember correctly, there was in the past the idea of allowing some limited
shell variable substitution in the config file.
This would allow to have a single config for all the machines with remote
entries. Something like
[remote "host1"]
url = ssh://host1/path
fetch = +refs/heads/*:refs/remotes/host1/*
push = +refs/heads/*:refs/remotes/$hostname/*
[remote "host2"]
url = ssh://host2/path
fetch = +refs/heads/*:refs/remotes/host2/*
push = +refs/heads/*:refs/remotes/$hostname/*
...
In other terms, admitting that all the candidate machines are known at the very
start, you could start a repo on any of the host, placing in the config file all
the possible hosts. Moreover, not needing to have a different config for each
host may make it easier to manage (propagate by simple scp) or even to version
control.
To the best of my knowledge the idea was not implemented in the end, but I think
that a patch for variable substitution in the config file might still be found
on the ML.
Sergio
On Wed, Nov 25, 2009 at 05:07, Nguyen Thai Ngoc Duy [off-list ref] wrote:
I work on a few machines so I have repositories on all of them. One
repository can pull from or push to any other repositories (in case of
push, it pushes on remote branches). I avoid a central repository
because it's quite inconvenient when you just need to push some
changes to a machine, you have to push it to the central repository
then pull from that (and if the central repository is on WAN, double
inconvenient). Maybe this model is just plain wrong, but it'd be fun
to see if Git can work with this model.
You can always use fetch (and pull) without specifying a remote:
$ git fetch host:/path/repo some-branch
$ git log ..FETCH_HEAD # git merge FETCH_HEAD
Maybe fetch should be extended to record this operation in .git/config?
$ git fetch ---save=host-some host:/path/repo some-branch some-branch
$ git remote -v
...
host-some host:/path/repo (fetch)
$