threads / discuss / 9272

Newbie problem

Subject: Newbie problem

## tl;dr

3 messages between Jul 28, 2007 and Jul 28, 2007.

replies: 2people: 2as markdown or json

Insitu· Jul 28, 2007, 07:20 UTC · lore
Hello, 
I am new to git and gave it a try to version my home dir and
synchronize it between two machines. It works but I think I did some
mistakes in my setup which make its usability non optimal: 
 - push/pull operations need remote address
 - I didn't set up any branch

Here is what I did (lap is for operations on laptop, pc on desktop): lap> git init lap> git add ... lap> git commit ... lap> scp .git pc: lap> mv .git git-init pc> git checkout . pc> git commit ... lap> git clone -n --bare --reference git-init/ ssh://pc/~/.git lap> git checkout . lap> git add ... lap> git commit

Now, I want to be able to do: lap> git push or lap> git pull

instead of lap> git push ssh://pc/~/.git

I think I need to reconfigure my remote branches/origin on laptop but don't want ot break everything.

Help appreciated,
-- 
OQube < software engineering \ génie logiciel >
Arnaud Bailly, Dr.
\web> http://www.oqube.com
Junio C Hamano· Jul 28, 2007, 08:01 UTC · re: Insitu · lore

Re: Newbie problem

Insitu <abailly@oqube.com> writes:
Show 10 quoted lines
> Now, I want to be able to do:
> lap> git push
> or
> lap> git pull
>
> instead of 
> lap> git push ssh://pc/~/.git
>
> I think I need to reconfigure my remote branches/origin on laptop but
> don't want ot break everything.

The necessary syntax and configuration files are all documented fairly detailed in the manual pages, but it is a tad hard to know where to look:

    http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html
    http://www.kernel.org/pub/software/scm/git/docs/git-push.html
    http://www.kernel.org/pub/software/scm/git/docs/git-config.html

If you use recent enough git (post 1.5.0), the recommended way to keep two boxes in sync is:

On mothership box, in .git/config:
 [remote "origin"]
     url = satellite:.git/
     fetch = +refs/heads/*:refs/remotes/origin/*
     push = refs/heads/*:refs/remotes/origin/*
 [branch "master"]
     remote = origin
     merge = refs/heads/master
On satellite laptop, in .git/config:
 [remote "origin"]
     url = mothership:.git/
     fetch = +refs/heads/*:refs/remotes/origin/*
     push = refs/heads/*:refs/remotes/origin/*
 [branch "master"]
     remote = origin
     merge = refs/heads/master
Then, whenever you start working on the satellite:
	$ git pull

which, while you are on "master" branch, would use 'origin' as the default remote (thanks to branch.master.remote configuration), store the copy of mothership's branches in refs/remotes/origin/, and merges the "master" branch obtained from the mothership to your "master" branch on the satellite [*1*].

When you are done working on the satellite:
	$ git push

will push to "origin" by default, which would push all your branches (thanks to remote.origin.push configuration) to mothership's refs/remotes/origin/.

When you go back to the mothership, your work done on the satellite are already pushed into the refs/remote/origin/ tracking branches, so you can merge them in (you can do this after shutting down your satellite laptop, which is the beauty of this setup):

	$ git merge origin/master
to merge in the changes you did on the satellite.
[Footnote]
*1* If you prefer to keep a straight history, you may want to
    fetch+rebase instead of pull which is a fetch+merge, in
    which case this step will be:
	$ git fetch
        $ git rebase origin/master
Insitu· Jul 28, 2007, 08:50 UTC · re: Junio C Hamano · lore

Re: Newbie problem

Junio C Hamano <gitster@pobox.com> writes:
Show 19 quoted lines
>
>  [remote "origin"]
>      url = satellite:.git/
>      fetch = +refs/heads/*:refs/remotes/origin/*
>      push = refs/heads/*:refs/remotes/origin/*
>  [branch "master"]
>      remote = origin
>      merge = refs/heads/master
>
> On satellite laptop, in .git/config:
>
>  [remote "origin"]
>      url = mothership:.git/
>      fetch = +refs/heads/*:refs/remotes/origin/*
>      push = refs/heads/*:refs/remotes/origin/*
>  [branch "master"]
>      remote = origin
>      merge = refs/heads/master
>
Thanks a lot for all these details ! 

Yes, I also find Git very well documented (maybe too much docuemented :) ) and could have come to the settings with info from the various man pages. But much less quickly of course.

My question is: can I do this right now that my repositories are up and running ?

Regards,
-- 
OQube < software engineering \ génie logiciel >
Arnaud Bailly, Dr.
\web> http://www.oqube.com

← back to recent threads