threads / discuss / 21621

pushing remote branches

Subject: pushing remote branches

## tl;dr

6 messages between Nov 14, 2009 and Nov 16, 2009.

replies: 5people: 3as markdown or json

Lorenzo Bettini· Nov 14, 2009, 23:37 UTC · lore
Hi

I recently started to use git, and I experienced problems with branches: on my machine I did (on an already cloned repo)

git checkout -b experiments origin/experiments
and thus my config reads
[remote "origin"]
         fetch = +refs/heads/*:refs/remotes/origin/*
         url = git://...
[branch "master"]
         remote = origin
         merge = refs/heads/master
[branch "experiments"]
         remote = origin
         merge = refs/heads/experiments
isn't this enough to be able to push the experiments branch?
I tried
git push origin experiments
It tells me that it is a read-only url...
after adding
[remote "experiments"]
         url = git@...
         fetch = 
+refs/heads/experiments:refs/remotes/experiments/experiments
I can now push that branch with
git push experiments experiments
but I was wondering whether the initial config wasn't enough...
many thanks in advance
	Lorenzo
-- 
Lorenzo Bettini, PhD in Computer Science, DI, Univ. Torino
ICQ# lbetto, 16080134     (GNU/Linux User # 158233)
HOME: http://www.lorenzobettini.it MUSIC: http://www.purplesucker.com
http://www.myspace.com/supertrouperabba
BLOGS: http://tronprog.blogspot.com  http://longlivemusic.blogspot.com
http://www.gnu.org/software/src-highlite
http://www.gnu.org/software/gengetopt
http://www.gnu.org/software/gengen http://doublecpp.sourceforge.net
Sitaram Chamarty· Nov 15, 2009, 00:45 UTC · re: Lorenzo Bettini · lore

Re: pushing remote branches

Hi Lorenzo,
On Sun, Nov 15, 2009 at 5:07 AM, Lorenzo Bettini <bettini@dsi.unifi.it> wrote:
>            url = git://...
> isn't this enough to be able to push the experiments branch?
not normally.

The "git://" protocol is a read-only protocol by default. Since it is completely unauthenticated, enabling push via git:// is not a good idea in general.

>            url = git@...

This is a shortcut for something like ssh://git@..., which then allows write also.

Lorenzo Bettini· Nov 15, 2009, 10:21 UTC · re: Sitaram Chamarty · lore

Re: pushing remote branches

Sitaram Chamarty wrote:
Show 13 quoted lines
> Hi Lorenzo,
> 
> On Sun, Nov 15, 2009 at 5:07 AM, Lorenzo Bettini <bettini@dsi.unifi.it> wrote:
> 
>>            url = git://...
> 
>> isn't this enough to be able to push the experiments branch?
> 
> not normally.
> 
> The "git://" protocol is a read-only protocol by default.  Since it is
> completely unauthenticated, enabling push via git:// is not a good idea in
> general.

so probably I managed to push origin master anyway because gitorious asked me for my ssh passphrase?

Show 5 quoted lines
> 
>>            url = git@...
> 
> This is a shortcut for something like ssh://git@..., which then allows write
> also.
Thus, if I had
[remote "origin"]
         fetch = +refs/heads/*:refs/remotes/origin/*
         url = git@...
[branch "master"]
         remote = origin
         merge = refs/heads/master
[branch "experiments"]
         remote = origin
         merge = refs/heads/experiments
instead of
[remote "origin"]
         fetch = +refs/heads/*:refs/remotes/origin/*
         url = git://...
[branch "master"]
         remote = origin
         merge = refs/heads/master
[branch "experiments"]
         remote = origin
         merge = refs/heads/experiments

I would have been able to push also to branch experiments? Without having to add

[remote "experiments"]
         url = git@...
         fetch = 
+refs/heads/experiments:refs/remotes/experiments/experiments
?
thanks in advance
	Lorenzo
-- 
Lorenzo Bettini, PhD in Computer Science, DI, Univ. Torino
ICQ# lbetto, 16080134     (GNU/Linux User # 158233)
HOME: http://www.lorenzobettini.it MUSIC: http://www.purplesucker.com
http://www.myspace.com/supertrouperabba
BLOGS: http://tronprog.blogspot.com  http://longlivemusic.blogspot.com
http://www.gnu.org/software/src-highlite
http://www.gnu.org/software/gengetopt
http://www.gnu.org/software/gengen http://doublecpp.sourceforge.net
Sitaram Chamarty· Nov 15, 2009, 11:04 UTC · re: Lorenzo Bettini · lore

Re: pushing remote branches

On Sun, Nov 15, 2009 at 3:51 PM, Lorenzo Bettini <bettini@dsi.unifi.it> wrote:
Show 19 quoted lines
> Sitaram Chamarty wrote:
>>
>> Hi Lorenzo,
>>
>> On Sun, Nov 15, 2009 at 5:07 AM, Lorenzo Bettini <bettini@dsi.unifi.it>
>> wrote:
>>
>>>                url = git://...
>>
>>> isn't this enough to be able to push the experiments branch?
>>
>> not normally.
>>
>> The "git://" protocol is a read-only protocol by default.   Since it is
>> completely unauthenticated, enabling push via git:// is not a good idea in
>> general.
>
> so probably I managed to push origin master anyway because gitorious asked
> me for my ssh passphrase?

As far as I know you could not have pushed anything when the url is git:// (at least by default. Push over git:// can be enabled but is highly inadvisable and I have not seen anyone enable it nor any good reason to)

Show 32 quoted lines
> Thus, if I had
>
> [remote "origin"]
>            fetch = +refs/heads/*:refs/remotes/origin/*
>            url = git@...
> [branch "master"]
>            remote = origin
>            merge = refs/heads/master
> [branch "experiments"]
>            remote = origin
>            merge = refs/heads/experiments
>
> instead of
>
> [remote "origin"]
>            fetch = +refs/heads/*:refs/remotes/origin/*
>            url = git://...
> [branch "master"]
>            remote = origin
>            merge = refs/heads/master
> [branch "experiments"]
>            remote = origin
>            merge = refs/heads/experiments
>
> I would have been able to push also to branch experiments?   Without having
> to add
>
> [remote "experiments"]
>            url = git@...
>            fetch = +refs/heads/experiments:refs/remotes/experiments/experiments
>
> ?

(by the way: do you mean refs/remotes/origin/experiments in that last line above?)

Anyway to answer your question, I do not see the refspec line as the issue here, but the URL for the repo, which determines how you access it.

regards,
sitaram
Lorenzo Bettini· Nov 16, 2009, 15:27 UTC · re: Sitaram Chamarty · lore

Re: pushing remote branches

Sitaram Chamarty wrote:
Show 37 quoted lines
> 
>> Thus, if I had
>>
>> [remote "origin"]
>>            fetch = +refs/heads/*:refs/remotes/origin/*
>>            url = git@...
>> [branch "master"]
>>            remote = origin
>>            merge = refs/heads/master
>> [branch "experiments"]
>>            remote = origin
>>            merge = refs/heads/experiments
>>
>> instead of
>>
>> [remote "origin"]
>>            fetch = +refs/heads/*:refs/remotes/origin/*
>>            url = git://...
>> [branch "master"]
>>            remote = origin
>>            merge = refs/heads/master
>> [branch "experiments"]
>>            remote = origin
>>            merge = refs/heads/experiments
>>
>> I would have been able to push also to branch experiments?   Without having
>> to add
>>
>> [remote "experiments"]
>>            url = git@...
>>            fetch = +refs/heads/experiments:refs/remotes/experiments/experiments
>>
>> ?
> 
> (by the way: do you mean refs/remotes/origin/experiments in that last
> line above?)
> 
no, it's just like I wrote it...
you mean in
[remote "experiments"]
         url = git@gitorious.org...
         fetch = 
+refs/heads/experiments:refs/remotes/experiments/experiments
or in
[branch "experiments"]
         remote = origin
         merge = refs/heads/experiments
?
> Anyway to answer your question, I do not see the refspec line as the issue
> here, but the URL for the repo, which determines how you access it.
so this would have been enough:
 >> [remote "origin"]
 >>            fetch = +refs/heads/*:refs/remotes/origin/*
 >>            url = git://...
 >> [branch "master"]
 >>            remote = origin
 >>            merge = refs/heads/master
 >> [branch "experiments"]
 >>            remote = origin
 >>            merge = refs/heads/experiments
?
thanks
	Lorenzo
-- 
Lorenzo Bettini, PhD in Computer Science, DI, Univ. Torino
HOME: http://www.lorenzobettini.it MUSIC: http://www.purplesucker.com
BLOGS: http://tronprog.blogspot.com  http://longlivemusic.blogspot.com
Junio C Hamano· Nov 16, 2009, 20:05 UTC · re: Lorenzo Bettini · lore

Re: pushing remote branches

Lorenzo Bettini <bettini@dsi.unifi.it> writes:
Show 14 quoted lines
>> Anyway to answer your question, I do not see the refspec line as the issue
>> here, but the URL for the repo, which determines how you access it.
>
> so this would have been enough:
>
>>> [remote "origin"]
>>>            fetch = +refs/heads/*:refs/remotes/origin/*
>>>            url = git://...
>>> [branch "master"]
>>>            remote = origin
>>>            merge = refs/heads/master
>>> [branch "experiments"]
>>>            remote = origin
>>>            merge = refs/heads/experiments

Because "git://" is almost always read-only, you wouldn't be able to push back to the origin with that configuration. If you are only following the project that is perfectly fine.

Otherwise, either use "git@..." in remote.origin.url to use git-over-ssh in both directions, or you can use pushurl if you have recent enough version of git, like:

    [remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git://...
        pushurl = git@...

When you primed your repository with "git clone git://...", it would be nice if "clone" added a "corresponding" pushurl for you. But ... part of the two lines are often different, depending on how hosting site is organized, so unfortunately "clone" cannot do so.

← back to recent threads