threads / discuss / 21745

Git repository mesh?

Subject: Git repository mesh?

## tl;dr

9 messages between Nov 25, 2009 and Nov 25, 2009.

replies: 8people: 5as markdown or json

Nguyen Thai Ngoc Duy· Nov 25, 2009, 04:07 UTC · lore
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

Matthieu Moy· Nov 25, 2009, 07:55 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Git repository mesh?

Nguyen Thai Ngoc Duy <pclouds@gmail.com> writes:
> Never used Mercurial but the idea of "git in" and "git out" to see how
> many commits ahead/behind would be nice.
In Git, you'd run "git fetch" to get everything locally, and then

git log ..origin/master => what origin/master has that you don't git log origin/master.. => what you have that origin/master doesn't

(and you can define aliases for that)

-- Matthieu Moy http://www-verimag.imag.fr/~moy/

Nguyen Thai Ngoc Duy· Nov 25, 2009, 08:00 UTC · re: Matthieu Moy · lore

Re: Git repository mesh?

On Wed, Nov 25, 2009 at 2:55 PM, Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> wrote:

Show 11 quoted lines
> Nguyen Thai Ngoc Duy <pclouds@gmail.com> writes:
>
>> Never used Mercurial but the idea of "git in" and "git out" to see how
>> many commits ahead/behind would be nice.
>
> In Git, you'd run "git fetch" to get everything locally, and then
>
> git log ..origin/master => what origin/master has that you don't
> git log origin/master.. => what you have that origin/master doesn't
>
> (and you can define aliases for that)

But I have many origins (any repository could be origin). "git status" also have this kind of information, but only for "origin".

-- 
Duy
Matthieu Moy· Nov 25, 2009, 11:54 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Git repository mesh?

Nguyen Thai Ngoc Duy <pclouds@gmail.com> writes:
Show 16 quoted lines
> On Wed, Nov 25, 2009 at 2:55 PM, Matthieu Moy
> <Matthieu.Moy@grenoble-inp.fr> wrote:
>> Nguyen Thai Ngoc Duy <pclouds@gmail.com> writes:
>>
>>> Never used Mercurial but the idea of "git in" and "git out" to see how
>>> many commits ahead/behind would be nice.
>>
>> In Git, you'd run "git fetch" to get everything locally, and then
>>
>> git log ..origin/master => what origin/master has that you don't
>> git log origin/master.. => what you have that origin/master doesn't
>>
>> (and you can define aliases for that)
>
> But I have many origins (any repository could be origin). "git status"
> also have this kind of information, but only for "origin".
Then, fetch from all of them and:
  git log ^HEAD repo1/master repo2/master repo3/master

-- Matthieu Moy http://www-verimag.imag.fr/~moy/

Nguyen Thai Ngoc Duy· Nov 25, 2009, 12:16 UTC · re: Matthieu Moy · lore

Re: Git repository mesh?

On 11/25/09, Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> wrote:
> Then, fetch from all of them and:
>
>   git log ^HEAD repo1/master repo2/master repo3/master

Very nice. Thanks I did not know about "^HEAD". Now I need to think of how to avoid typing all "repo*/master" stuff..

-- 
Duy
Jakub Narebski· Nov 25, 2009, 13:26 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Git repository mesh?

Nguyen Thai Ngoc Duy <pclouds@gmail.com> writes:
Show 7 quoted lines
> On 11/25/09, Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> wrote:
> > Then, fetch from all of them and:
> >
> >   git log ^HEAD repo1/master repo2/master repo3/master
> 
> Very nice. Thanks I did not know about "^HEAD". Now I need to think of
> how to avoid typing all "repo*/master" stuff..

Hmmm... shouldn't 'repo1' expand to 'repo1/HEAD', which is 'repo1/master'? I mean shouldn't simply

  git log ^HEAD repo1 repo2 repo3
work?
Also, git aliases (so you would be able to just say "git in").
-- 
Jakub Narebski
Poland
Matthieu Moy· Nov 25, 2009, 18:23 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Git repository mesh?

Nguyen Thai Ngoc Duy <pclouds@gmail.com> writes:
Show 6 quoted lines
> On 11/25/09, Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> wrote:
>> Then, fetch from all of them and:
>>
>>   git log ^HEAD repo1/master repo2/master repo3/master
>
> Very nice. Thanks I did not know about "^HEAD".
Read "not HEAD", this means "remove the ancestry of HEAD in the output".
See "man git-rev-parse" for details.
-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
Sergio· Nov 25, 2009, 08:42 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Git repository mesh?

Nguyen Thai Ngoc Duy <pclouds <at> gmail.com> writes:
Show 15 quoted lines
> 
> 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
Alex Riesen· Nov 25, 2009, 10:08 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Git repository mesh?

On Wed, Nov 25, 2009 at 05:07, Nguyen Thai Ngoc Duy <pclouds@gmail.com> wrote:
Show 8 quoted lines
> 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)
  $

← back to recent threads