* git push bug?
@ 2007-10-18 14:50 Joakim Tjernlund
2007-10-18 15:14 ` Steffen Prohaska
0 siblings, 1 reply; 21+ messages in thread
From: Joakim Tjernlund @ 2007-10-18 14:50 UTC (permalink / raw)
To: git
I thougth I could create a new branch on the server using:
# > git push ssh://devsrv/var/git/os2kernel.git linus:refs/linus
Warning: No xauth data; using fake authentication data for X11 forwarding.
updating 'refs/linus' using 'refs/heads/linus'
from 0000000000000000000000000000000000000000
to bbf25010f1a6b761914430f5fca081ec8c7accd1
Generating pack...
Done counting 0 objects.
Writing 0 objects...
Total 0 (delta 0), reused 0 (delta 0)
error: refusing to create funny ref 'refs/linus' locally
ng refs/linus funny refname
error: failed to push to 'ssh://devsrv/var/git/os2kernel.git'
but that doesn't work. Am I doing this wrong?
git 1.5.3.4
Jocke
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 14:50 git push bug? Joakim Tjernlund
@ 2007-10-18 15:14 ` Steffen Prohaska
2007-10-18 16:01 ` Joakim Tjernlund
2007-10-19 0:24 ` Shawn O. Pearce
0 siblings, 2 replies; 21+ messages in thread
From: Steffen Prohaska @ 2007-10-18 15:14 UTC (permalink / raw)
To: joakim.tjernlund; +Cc: git
On Oct 18, 2007, at 4:50 PM, Joakim Tjernlund wrote:
>
> I thougth I could create a new branch on the server using:
>
> # > git push ssh://devsrv/var/git/os2kernel.git linus:refs/linus
> Warning: No xauth data; using fake authentication data for X11
> forwarding.
> updating 'refs/linus' using 'refs/heads/linus'
> from 0000000000000000000000000000000000000000
> to bbf25010f1a6b761914430f5fca081ec8c7accd1
> Generating pack...
> Done counting 0 objects.
> Writing 0 objects...
> Total 0 (delta 0), reused 0 (delta 0)
> error: refusing to create funny ref 'refs/linus' locally
> ng refs/linus funny refname
> error: failed to push to 'ssh://devsrv/var/git/os2kernel.git'
>
> but that doesn't work. Am I doing this wrong?
Include 'heads' in your remote refspec:
git push ssh://devsrv/var/git/os2kernel.git linus:refs/heads/linus
You may need to cleanup though. I'm not sure if the remote side
already created 'refs/linus'. The error message only indicates that
locally git refused to create the "funny refname". Pushing a refspec
with an empty local part should delete the "funny refname" on the
remote:
git push ssh://devsrv/var/git/os2kernel.git :refs/linus
Did this solve your problem?
Steffen
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 15:14 ` Steffen Prohaska
@ 2007-10-18 16:01 ` Joakim Tjernlund
2007-10-18 16:10 ` Joakim Tjernlund
` (2 more replies)
2007-10-19 0:24 ` Shawn O. Pearce
1 sibling, 3 replies; 21+ messages in thread
From: Joakim Tjernlund @ 2007-10-18 16:01 UTC (permalink / raw)
To: Steffen Prohaska; +Cc: git
On Thu, 2007-10-18 at 17:14 +0200, Steffen Prohaska wrote:
> On Oct 18, 2007, at 4:50 PM, Joakim Tjernlund wrote:
>
> >
> > I thougth I could create a new branch on the server using:
> >
> > # > git push ssh://devsrv/var/git/os2kernel.git linus:refs/linus
> > Warning: No xauth data; using fake authentication data for X11
> > forwarding.
> > updating 'refs/linus' using 'refs/heads/linus'
> > from 0000000000000000000000000000000000000000
> > to bbf25010f1a6b761914430f5fca081ec8c7accd1
> > Generating pack...
> > Done counting 0 objects.
> > Writing 0 objects...
> > Total 0 (delta 0), reused 0 (delta 0)
> > error: refusing to create funny ref 'refs/linus' locally
> > ng refs/linus funny refname
> > error: failed to push to 'ssh://devsrv/var/git/os2kernel.git'
> >
> > but that doesn't work. Am I doing this wrong?
>
> Include 'heads' in your remote refspec:
>
> git push ssh://devsrv/var/git/os2kernel.git linus:refs/heads/linus
Now the push went OK:
git push ssh://devsrv/var/git/os2kernel.git linus:refs/head/linus
Warning: No xauth data; using fake authentication data for X11 forwarding.
updating 'refs/head/linus' using 'refs/heads/linus'
from 0000000000000000000000000000000000000000
to bbf25010f1a6b761914430f5fca081ec8c7accd1
Generating pack...
Done counting 0 objects.
Writing 0 objects...
Total 0 (delta 0), reused 0 (delta 0)
refs/head/linus: 0000000000000000000000000000000000000000 -> bbf25010f1a6b761914430f5fca081ec8c7accd1
but there is no linus branch in the server repo!
However:
git push ssh://devsrv/var/git/os2kernel.git linus
creates a linus branch in the server and
git push ssh://devsrv/var/git/os2kernel.git :linus
Warning: No xauth data; using fake authentication data for X11 forwarding.
deleting 'refs/heads/linus'
refs/heads/linus: bbf25010f1a6b761914430f5fca081ec8c7accd1 -> deleted
Everything up-to-date
deletes the linus branch on the server and so does
git push ssh://devsrv/var/git/os2kernel.git :refs/heads/linus
ahh, now I see. When creating the branch the refspec needs to be refs/heads/linus,
not refs/head/linus
refs/head/linus will create just that on the server. git branch does not look
there, only in refs/heads
Seems like it is a bit too easy to make mistakes here. Why can I delete
a branch with :linus but not create one with linus:linus?
Also confusing that git lets me create refs/head/linus when git branch
cannot find it.
Jocke
> You may need to cleanup though. I'm not sure if the remote side
> already created 'refs/linus'. The error message only indicates that
> locally git refused to create the "funny refname". Pushing a refspec
> with an empty local part should delete the "funny refname" on the
> remote:
>
> git push ssh://devsrv/var/git/os2kernel.git :refs/linus
>
> Did this solve your problem?
>
> Steffen
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 16:01 ` Joakim Tjernlund
@ 2007-10-18 16:10 ` Joakim Tjernlund
2007-10-19 0:49 ` Shawn O. Pearce
2007-10-18 16:13 ` Steffen Prohaska
2007-10-18 16:21 ` Johannes Schindelin
2 siblings, 1 reply; 21+ messages in thread
From: Joakim Tjernlund @ 2007-10-18 16:10 UTC (permalink / raw)
To: Steffen Prohaska; +Cc: git
On Thu, 2007-10-18 at 18:01 +0200, Joakim Tjernlund wrote:
> On Thu, 2007-10-18 at 17:14 +0200, Steffen Prohaska wrote:
> > On Oct 18, 2007, at 4:50 PM, Joakim Tjernlund wrote:
> >
> > >
> > > I thougth I could create a new branch on the server using:
> > >
> > > # > git push ssh://devsrv/var/git/os2kernel.git linus:refs/linus
> > > Warning: No xauth data; using fake authentication data for X11
> > > forwarding.
> > > updating 'refs/linus' using 'refs/heads/linus'
> > > from 0000000000000000000000000000000000000000
> > > to bbf25010f1a6b761914430f5fca081ec8c7accd1
> > > Generating pack...
> > > Done counting 0 objects.
> > > Writing 0 objects...
> > > Total 0 (delta 0), reused 0 (delta 0)
> > > error: refusing to create funny ref 'refs/linus' locally
> > > ng refs/linus funny refname
> > > error: failed to push to 'ssh://devsrv/var/git/os2kernel.git'
> > >
> > > but that doesn't work. Am I doing this wrong?
> >
> > Include 'heads' in your remote refspec:
> >
> > git push ssh://devsrv/var/git/os2kernel.git linus:refs/heads/linus
>
> Now the push went OK:
> git push ssh://devsrv/var/git/os2kernel.git linus:refs/head/linus
> Warning: No xauth data; using fake authentication data for X11 forwarding.
> updating 'refs/head/linus' using 'refs/heads/linus'
> from 0000000000000000000000000000000000000000
> to bbf25010f1a6b761914430f5fca081ec8c7accd1
> Generating pack...
> Done counting 0 objects.
> Writing 0 objects...
> Total 0 (delta 0), reused 0 (delta 0)
> refs/head/linus: 0000000000000000000000000000000000000000 -> bbf25010f1a6b761914430f5fca081ec8c7accd1
>
> but there is no linus branch in the server repo!
>
> However:
> git push ssh://devsrv/var/git/os2kernel.git linus
>
> creates a linus branch in the server and
>
> git push ssh://devsrv/var/git/os2kernel.git :linus
> Warning: No xauth data; using fake authentication data for X11 forwarding.
> deleting 'refs/heads/linus'
> refs/heads/linus: bbf25010f1a6b761914430f5fca081ec8c7accd1 -> deleted
> Everything up-to-date
>
> deletes the linus branch on the server and so does
> git push ssh://devsrv/var/git/os2kernel.git :refs/heads/linus
>
> ahh, now I see. When creating the branch the refspec needs to be refs/heads/linus,
> not refs/head/linus
>
> refs/head/linus will create just that on the server. git branch does not look
> there, only in refs/heads
>
> Seems like it is a bit too easy to make mistakes here. Why can I delete
> a branch with :linus but not create one with linus:linus?
> Also confusing that git lets me create refs/head/linus when git branch
> cannot find it.
>
> Jocke
BTW this does not work either:
git reset --hard HEAD^
git push -f ssh://devsrv/var/git/os2kernel.git +master:master
updating 'refs/heads/master'
from 9c344d18d01221c8f25080cb58910e6b09efbf55
to 5761a9e5924b34615c748fba2dcb977ed04c1243
Generating pack...
Done counting 0 objects.
Writing 0 objects...
Total 0 (delta 0), reused 0 (delta 0)
error: denying non-fast forward refs/heads/master (you should pull first)
ng refs/heads/master non-fast forward
error: failed to push to 'ssh://devsrv/var/git/os2kernel.git'
I thought the + in +master:master and the -f option should let me
do that.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 16:01 ` Joakim Tjernlund
2007-10-18 16:10 ` Joakim Tjernlund
@ 2007-10-18 16:13 ` Steffen Prohaska
2007-10-18 16:21 ` Johannes Schindelin
2 siblings, 0 replies; 21+ messages in thread
From: Steffen Prohaska @ 2007-10-18 16:13 UTC (permalink / raw)
To: joakim.tjernlund; +Cc: git
On Oct 18, 2007, at 6:01 PM, Joakim Tjernlund wrote:
> Seems like it is a bit too easy to make mistakes here. Why can I
> delete
> a branch with :linus but not create one with linus:linus?
> Also confusing that git lets me create refs/head/linus when git branch
> cannot find it.
I absolutely agree. But I'm not sure if those who use git since the
ancient days do agree too.
Steffen
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 16:01 ` Joakim Tjernlund
2007-10-18 16:10 ` Joakim Tjernlund
2007-10-18 16:13 ` Steffen Prohaska
@ 2007-10-18 16:21 ` Johannes Schindelin
2007-10-18 16:31 ` Joakim Tjernlund
2007-10-18 16:55 ` Steffen Prohaska
2 siblings, 2 replies; 21+ messages in thread
From: Johannes Schindelin @ 2007-10-18 16:21 UTC (permalink / raw)
To: Joakim Tjernlund; +Cc: Steffen Prohaska, git
Hi,
On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
> Seems like it is a bit too easy to make mistakes here. Why can I delete
> a branch with :linus but not create one with linus:linus?
I wonder why you bother with the colon at all. Just
git push <remote> linus
and be done with it. The colon is only there to play interesting games,
not something as simple as "push this branch" or "push this tag".
Ciao,
Dscho
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 16:21 ` Johannes Schindelin
@ 2007-10-18 16:31 ` Joakim Tjernlund
2007-10-18 22:00 ` Johannes Schindelin
2007-10-18 16:55 ` Steffen Prohaska
1 sibling, 1 reply; 21+ messages in thread
From: Joakim Tjernlund @ 2007-10-18 16:31 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Steffen Prohaska, git
On Thu, 2007-10-18 at 17:21 +0100, Johannes Schindelin wrote:
> Hi,
>
> On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
>
> > Seems like it is a bit too easy to make mistakes here. Why can I delete
> > a branch with :linus but not create one with linus:linus?
>
> I wonder why you bother with the colon at all. Just
>
> git push <remote> linus
>
> and be done with it. The colon is only there to play interesting games,
> not something as simple as "push this branch" or "push this tag".
First, I didn't know that I could do that.
Secondly, I was also looking do v2.6.23:linus refspecs
Jocke
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 16:21 ` Johannes Schindelin
2007-10-18 16:31 ` Joakim Tjernlund
@ 2007-10-18 16:55 ` Steffen Prohaska
2007-10-18 21:58 ` Johannes Schindelin
1 sibling, 1 reply; 21+ messages in thread
From: Steffen Prohaska @ 2007-10-18 16:55 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Joakim Tjernlund, git
On Oct 18, 2007, at 6:21 PM, Johannes Schindelin wrote:
> On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
>
>> Seems like it is a bit too easy to make mistakes here. Why can I
>> delete
>> a branch with :linus but not create one with linus:linus?
>
> I wonder why you bother with the colon at all. Just
>
> git push <remote> linus
>
> and be done with it. The colon is only there to play interesting
> games,
> not something as simple as "push this branch" or "push this tag".
But you need a full refspec starting with 'refs/heads/' if you want to
create a new branch on the remote side.
Steffen
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 16:55 ` Steffen Prohaska
@ 2007-10-18 21:58 ` Johannes Schindelin
2007-10-20 8:29 ` Steffen Prohaska
0 siblings, 1 reply; 21+ messages in thread
From: Johannes Schindelin @ 2007-10-18 21:58 UTC (permalink / raw)
To: Steffen Prohaska; +Cc: Joakim Tjernlund, git
Hi,
On Thu, 18 Oct 2007, Steffen Prohaska wrote:
> On Oct 18, 2007, at 6:21 PM, Johannes Schindelin wrote:
>
> > On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
> >
> > > Seems like it is a bit too easy to make mistakes here. Why can I delete
> > > a branch with :linus but not create one with linus:linus?
> >
> > I wonder why you bother with the colon at all. Just
> >
> > git push <remote> linus
> >
> > and be done with it. The colon is only there to play interesting games,
> > not something as simple as "push this branch" or "push this tag".
>
> But you need a full refspec starting with 'refs/heads/' if you want to
> create a new branch on the remote side.
No. Not if the name is the same on the local side.
Ciao,
Dscho
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 16:31 ` Joakim Tjernlund
@ 2007-10-18 22:00 ` Johannes Schindelin
2007-10-19 14:47 ` Joakim Tjernlund
0 siblings, 1 reply; 21+ messages in thread
From: Johannes Schindelin @ 2007-10-18 22:00 UTC (permalink / raw)
To: Joakim Tjernlund; +Cc: Steffen Prohaska, git
Hi,
On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
> On Thu, 2007-10-18 at 17:21 +0100, Johannes Schindelin wrote:
>
> > On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
> >
> > > Seems like it is a bit too easy to make mistakes here. Why can I
> > > delete a branch with :linus but not create one with linus:linus?
> >
> > I wonder why you bother with the colon at all. Just
> >
> > git push <remote> linus
> >
> > and be done with it. The colon is only there to play interesting
> > games, not something as simple as "push this branch" or "push this
> > tag".
>
> First, I didn't know that I could do that. Secondly, I was also looking
> do v2.6.23:linus refspecs
First, then our documentation could be better. How?
Second, why not "git checkout -b linus v2.6.23 && git push origin linus"?
Ciao,
Dscho
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 15:14 ` Steffen Prohaska
2007-10-18 16:01 ` Joakim Tjernlund
@ 2007-10-19 0:24 ` Shawn O. Pearce
2007-10-20 17:38 ` Joakim Tjernlund
1 sibling, 1 reply; 21+ messages in thread
From: Shawn O. Pearce @ 2007-10-19 0:24 UTC (permalink / raw)
To: Steffen Prohaska; +Cc: joakim.tjernlund, git
Steffen Prohaska <prohaska@zib.de> wrote:
> On Oct 18, 2007, at 4:50 PM, Joakim Tjernlund wrote:
> >
> ># > git push ssh://devsrv/var/git/os2kernel.git linus:refs/linus
...
> >error: refusing to create funny ref 'refs/linus' locally
> >ng refs/linus funny refname
> >error: failed to push to 'ssh://devsrv/var/git/os2kernel.git'
...
> You may need to cleanup though. I'm not sure if the remote side
> already created 'refs/linus'. The error message only indicates that
> locally git refused to create the "funny refname".
Cute. The error message "error: refusing to create .. locally"
is actually coming from the remote site. Locally here is
actually remotely. We *really* should change that. Its l.169 of
receive-pack.c, which is only running on the remote side. :)
Anyone game to improve that error message? Should be a pretty
simple patch. One of the may low-hanging fruits in Git.
--
Shawn.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 16:10 ` Joakim Tjernlund
@ 2007-10-19 0:49 ` Shawn O. Pearce
0 siblings, 0 replies; 21+ messages in thread
From: Shawn O. Pearce @ 2007-10-19 0:49 UTC (permalink / raw)
To: Joakim Tjernlund; +Cc: Steffen Prohaska, git
Joakim Tjernlund <joakim.tjernlund@transmode.se> wrote:
> BTW this does not work either:
>
> git reset --hard HEAD^
> git push -f ssh://devsrv/var/git/os2kernel.git +master:master
> updating 'refs/heads/master'
> from 9c344d18d01221c8f25080cb58910e6b09efbf55
> to 5761a9e5924b34615c748fba2dcb977ed04c1243
> Generating pack...
> Done counting 0 objects.
> Writing 0 objects...
> Total 0 (delta 0), reused 0 (delta 0)
> error: denying non-fast forward refs/heads/master (you should pull first)
> ng refs/heads/master non-fast forward
> error: failed to push to 'ssh://devsrv/var/git/os2kernel.git'
>
> I thought the + in +master:master and the -f option should let me
> do that.
Yes, but its only on the client side.
See when we do a push the local client side determines if the push is
going to be a fast-forward or not. If it isn't then the git-push
client aborts before it even uploads data to the remote side.
The --force or + can be used to make the client side skip this
check and just plow forward anyway.
But the remote side can also veto a non-fast-forward update. By
default it refuses to allow such updates as they can orphan commits
(and thus potentially lose important work). See the config option
receive.denyNonFastForwards; you may want to set this to true in
the remote side's config file.
--
Shawn.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 22:00 ` Johannes Schindelin
@ 2007-10-19 14:47 ` Joakim Tjernlund
2007-10-19 17:24 ` Johannes Schindelin
0 siblings, 1 reply; 21+ messages in thread
From: Joakim Tjernlund @ 2007-10-19 14:47 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Steffen Prohaska, git
On Thu, 2007-10-18 at 23:00 +0100, Johannes Schindelin wrote:
> Hi,
>
> On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
>
> > On Thu, 2007-10-18 at 17:21 +0100, Johannes Schindelin wrote:
> >
> > > On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
> > >
> > > > Seems like it is a bit too easy to make mistakes here. Why can I
> > > > delete a branch with :linus but not create one with linus:linus?
> > >
> > > I wonder why you bother with the colon at all. Just
> > >
> > > git push <remote> linus
> > >
> > > and be done with it. The colon is only there to play interesting
> > > games, not something as simple as "push this branch" or "push this
> > > tag".
> >
> > First, I didn't know that I could do that. Secondly, I was also looking
> > do v2.6.23:linus refspecs
>
>
> First, then our documentation could be better. How?
Well, it isn't clear to me how all this is supposed to work and
what is bugs. Clearifying that would help.
For instances I did a push with v2.6.23:refs/heads/linus and now
I got a branch with the SHA1 of v2.6.23 tag(0b8bc8b91cf6befea20fe78b90367ca7b61cfa0d)
in it. Makes gitk display that branch as "linus^{}".
>
> Second, why not "git checkout -b linus v2.6.23 && git push origin linus"?
An extra checkout that takes time but works. Doesn't make the above
"weiredness" go away though.
Jocke
>
> Ciao,
> Dscho
>
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-19 14:47 ` Joakim Tjernlund
@ 2007-10-19 17:24 ` Johannes Schindelin
2007-10-19 18:50 ` Joakim Tjernlund
0 siblings, 1 reply; 21+ messages in thread
From: Johannes Schindelin @ 2007-10-19 17:24 UTC (permalink / raw)
To: Joakim Tjernlund; +Cc: Steffen Prohaska, git
Hi,
On Fri, 19 Oct 2007, Joakim Tjernlund wrote:
> On Thu, 2007-10-18 at 23:00 +0100, Johannes Schindelin wrote:
> >
> > On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
> >
> > > First, I didn't know that I could do that. Secondly, I was also
> > > looking do v2.6.23:linus refspecs
> >
> >
> > First, then our documentation could be better. How?
>
> Well, it isn't clear to me how all this is supposed to work and what is
> bugs. Clearifying that would help.
>
> For instances I did a push with v2.6.23:refs/heads/linus and now I got a
> branch with the SHA1 of v2.6.23
> tag(0b8bc8b91cf6befea20fe78b90367ca7b61cfa0d) in it. Makes gitk display
> that branch as "linus^{}".
It strikes me as really odd that you would _want_ to create a branch
remotely, that has _never_ existed locally.
> > Second, why not "git checkout -b linus v2.6.23 && git push origin
> > linus"?
>
> An extra checkout that takes time but works.
Not only that: before trying to publish something, I would have expected
you to have that branch locally, and that you actually worked on it.
> Doesn't make the above "weiredness" go away though.
Yes it does.
git checkout -b <branchname> resolves to the commit that the tag pointed
to. So it would not push a tag, which you did.
Of course you could do what you planned to do, if you knew git better.
But you are not familiar enough with git's inner workings yet, so I
suggest to stay with things for now that work _always_, and exactly as
expected.
Such as creating a branch locally, with exactly the name that you plan it
to have remotely, and then pushing it with "git push origin <branchname>".
Easy as apple pie.
Ciao,
Dscho
^ permalink raw reply [flat|nested] 21+ messages in thread
* RE: git push bug?
2007-10-19 17:24 ` Johannes Schindelin
@ 2007-10-19 18:50 ` Joakim Tjernlund
2007-10-19 22:46 ` Johannes Schindelin
2007-10-20 12:05 ` Jan Hudec
0 siblings, 2 replies; 21+ messages in thread
From: Joakim Tjernlund @ 2007-10-19 18:50 UTC (permalink / raw)
To: 'Johannes Schindelin'; +Cc: 'Steffen Prohaska', 'git'
> -----Original Message-----
> From: Johannes Schindelin [mailto:Johannes.Schindelin@gmx.de]
> Sent: den 19 oktober 2007 19:25
> To: Joakim Tjernlund
> Cc: Steffen Prohaska; git
> Subject: Re: git push bug?
>
> Hi,
>
> On Fri, 19 Oct 2007, Joakim Tjernlund wrote:
>
> > On Thu, 2007-10-18 at 23:00 +0100, Johannes Schindelin wrote:
> > >
> > > On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
> > >
> > > > First, I didn't know that I could do that. Secondly, I was also
> > > > looking do v2.6.23:linus refspecs
> > >
> > >
> > > First, then our documentation could be better. How?
> >
> > Well, it isn't clear to me how all this is supposed to work
> and what is
> > bugs. Clearifying that would help.
> >
> > For instances I did a push with v2.6.23:refs/heads/linus
> and now I got a
> > branch with the SHA1 of v2.6.23
> > tag(0b8bc8b91cf6befea20fe78b90367ca7b61cfa0d) in it. Makes
> gitk display
> > that branch as "linus^{}".
>
> It strikes me as really odd that you would _want_ to create a branch
> remotely, that has _never_ existed locally.
It strikes me as really odd that a core developers like yourself
hasn't tried to justify/explain why push works as it does.
As I am trying to convince our dev. group here to move to git instead of subversion, I
need to learn how git works. Now I have gotten to the push function and I need
to know what can be done with push and how, pitfalls too. As I go along I find behavior
that I find odd and report these to the list.
git push <repo> v2.6.23:refs/heads/linus
will make a tag look like a branch
git push <repo> linus:linus
won't let me create the remote branch linus but
git push <repo> linus
will
git push <repo> :linus
OOPS, now I just deleted remote branch linus, no warning
git push <repo> linus:refs/head/linus
creates a branch that is invisible(wont show in git branch -a)
git push <repo> linus:refs/heads/newbranch
creates remote branch newbranch, but you have to know the magic words
refs/heads/ to do it.
Se what I mean?
>
> > > Second, why not "git checkout -b linus v2.6.23 && git push origin
> > > linus"?
> >
> > An extra checkout that takes time but works.
>
> Not only that: before trying to publish something, I would
> have expected
> you to have that branch locally, and that you actually worked on it.
>
> > Doesn't make the above "weiredness" go away though.
>
> Yes it does.
No it doesn't. If someone else in my group wants to create a branch they
might do the same mistakes as I did.
>
> git checkout -b <branchname> resolves to the commit that the
> tag pointed
> to. So it would not push a tag, which you did.
>
> Of course you could do what you planned to do, if you knew
> git better.
> But you are not familiar enough with git's inner workings yet, so I
> suggest to stay with things for now that work _always_, and
> exactly as
> expected.
>
> Such as creating a branch locally, with exactly the name that
> you plan it
> to have remotely, and then pushing it with "git push origin
> <branchname>".
> Easy as apple pie.
>
> Ciao,
> Dscho
>
>
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* RE: git push bug?
2007-10-19 18:50 ` Joakim Tjernlund
@ 2007-10-19 22:46 ` Johannes Schindelin
2007-10-20 12:05 ` Jan Hudec
1 sibling, 0 replies; 21+ messages in thread
From: Johannes Schindelin @ 2007-10-19 22:46 UTC (permalink / raw)
To: Joakim Tjernlund; +Cc: 'Steffen Prohaska', 'git'
Hi,
On Fri, 19 Oct 2007, Joakim Tjernlund wrote:
> > From: Johannes Schindelin [mailto:Johannes.Schindelin@gmx.de]
> >
> > On Fri, 19 Oct 2007, Joakim Tjernlund wrote:
> >
> > > On Thu, 2007-10-18 at 23:00 +0100, Johannes Schindelin wrote:
> > > >
> > > > On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
> > > >
> > > > > First, I didn't know that I could do that. Secondly, I was also
> > > > > looking do v2.6.23:linus refspecs
> > > >
> > > >
> > > > First, then our documentation could be better. How?
> > >
> > > Well, it isn't clear to me how all this is supposed to work and what
> > > is bugs. Clearifying that would help.
> > >
> > > For instances I did a push with v2.6.23:refs/heads/linus and now I
> > > got a branch with the SHA1 of v2.6.23
> > > tag(0b8bc8b91cf6befea20fe78b90367ca7b61cfa0d) in it. Makes gitk
> > > display that branch as "linus^{}".
> >
> > It strikes me as really odd that you would _want_ to create a branch
> > remotely, that has _never_ existed locally.
>
> It strikes me as really odd that a core developers like yourself
> hasn't tried to justify/explain why push works as it does.
Well, I explained that I think the "src:dst" way to specify things are not
meant for git newbies. Don't use it.
git push <remote> <branchname> works exactly as advertised. It pushes the
specified branch to the remote repository.
> As I am trying to convince our dev. group here to move to git instead of
> subversion, I need to learn how git works. Now I have gotten to the push
> function and I need to know what can be done with push and how, pitfalls
> too. As I go along I find behavior that I find odd and report these to
> the list.
>
> git push <repo> v2.6.23:refs/heads/linus
> will make a tag look like a branch
Don't use src:dest notation.
> git push <repo> linus:linus
> won't let me create the remote branch linus
Don't use src:dest notation.
> but
> git push <repo> linus
> will
Use this. This is good.
> git push <repo> :linus
> OOPS, now I just deleted remote branch linus, no warning
Don't use src:dest notation.
> git push <repo> linus:refs/head/linus
> creates a branch that is invisible(wont show in git branch -a)
Don't use src:dest notation.
> git push <repo> linus:refs/heads/newbranch
> creates remote branch newbranch, but you have to know the magic words
> refs/heads/ to do it.
Don't use src:dest notation.
> Se what I mean?
Yes.
I hope you return the honour.
> > > > Second, why not "git checkout -b linus v2.6.23 && git push origin
> > > > linus"?
> > >
> > > An extra checkout that takes time but works.
> >
> > Not only that: before trying to publish something, I would have
> > expected you to have that branch locally, and that you actually worked
> > on it.
> >
> > > Doesn't make the above "weiredness" go away though.
> >
> > Yes it does.
>
> No it doesn't. If someone else in my group wants to create a branch they
> might do the same mistakes as I did.
Yes, it does. You no longer can push a tag onto a remote branch by
accident. Just don't use the src:dest notation. Forget about it. You
definitely don't need it before you understand git better.
Hth,
Dscho
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-18 21:58 ` Johannes Schindelin
@ 2007-10-20 8:29 ` Steffen Prohaska
2007-10-20 8:38 ` Steffen Prohaska
2007-10-20 11:52 ` Joakim Tjernlund
0 siblings, 2 replies; 21+ messages in thread
From: Steffen Prohaska @ 2007-10-20 8:29 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Joakim Tjernlund, git
On Oct 18, 2007, at 11:58 PM, Johannes Schindelin wrote:
>
> On Thu, 18 Oct 2007, Steffen Prohaska wrote:
>
>> On Oct 18, 2007, at 6:21 PM, Johannes Schindelin wrote:
>>
>>> On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
>>>
>>>> Seems like it is a bit too easy to make mistakes here. Why can I
>>>> delete
>>>> a branch with :linus but not create one with linus:linus?
>>>
>>> I wonder why you bother with the colon at all. Just
>>>
>>> git push <remote> linus
>>>
>>> and be done with it. The colon is only there to play interesting
>>> games,
>>> not something as simple as "push this branch" or "push this tag".
>>
>> But you need a full refspec starting with 'refs/heads/' if you
>> want to
>> create a new branch on the remote side.
>
> No. Not if the name is the same on the local side.
You're right. The documentation of git-send-pack says what you're
saying:
'''
When one or more <ref> are specified explicitly, it can be either a
single pattern, or a pair of such pattern separated by a colon
":" (this means that a ref name cannot have a colon in it). A single
pattern <name> is just a shorthand for <name>:<name>
'''
Here it says that <name> is a shorthand for <name>:<name>.
An later it states
'''
If <dst> does not match any remote ref, either
* it has to start with "refs/"; <dst> is used as the destination
literally in this case.
* <src> == <dst> and the ref that matched the <src> must not
exist in the set of remote refs; the ref matched <src> locally is
used as the name of the destination.
'''
If <src> == <dst> then <dst> will be created even if it didn't exist.
I think the current implementation though is a bit different.
It will created a new branch for a colon-less refspec, that is
git push origin work/topic
will create a new ref on the remote. But
git push origin work/topic:work/topic
will _not_.
Until you corrected me, I believed that new branches will never
be created on the remote side unless a full ref is used. That is
I expected that only
git push origin refs/heads/work/topic
would work.
I thought this would be another safety net -- kind of a reminder
not to push the wrong branch by accident.
I still like the idea, but apparently git didn't ever support what
I thought it would.
Maybe adding some command line flags making the different tasks
explicit could help:
git push --create origin work/new-topic
git push --delete origin work/old-topic
git push --non-standard origin refs/funny/ref
We already have similar flags
--all: all branches
--tags: all tags
--force: force non-fast-forward.
I haven't fully thought this through. Maybe I'll come up with a patch
later.
Steffen
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-20 8:29 ` Steffen Prohaska
@ 2007-10-20 8:38 ` Steffen Prohaska
2007-10-20 11:52 ` Joakim Tjernlund
1 sibling, 0 replies; 21+ messages in thread
From: Steffen Prohaska @ 2007-10-20 8:38 UTC (permalink / raw)
To: Shawn O. Pearce, Lars Hjemli, Johannes Schindelin
Cc: Joakim Tjernlund, Git Mailing List
Shawn,
sp/push-refspec definitely needs more work (see below).
On Oct 20, 2007, at 10:29 AM, Steffen Prohaska wrote:
>
> On Oct 18, 2007, at 11:58 PM, Johannes Schindelin wrote:
>
>>
>> On Thu, 18 Oct 2007, Steffen Prohaska wrote:
>>>
>>> But you need a full refspec starting with 'refs/heads/' if you
>>> want to
>>> create a new branch on the remote side.
>>
>> No. Not if the name is the same on the local side.
>
> You're right. The documentation of git-send-pack says what you're
> saying:
>
> [...]
>
> Until you corrected me, I believed that new branches will never
> be created on the remote side unless a full ref is used. That is
> I expected that only
>
> git push origin refs/heads/work/topic
>
> would work.
>
> I thought this would be another safety net -- kind of a reminder
> not to push the wrong branch by accident.
>
> I still like the idea, but apparently git didn't ever support what
> I thought it would.
And I even fixed the behavior to match my expectation in a patch
which made it to spearce/pu:
d869233c62688742968663c4e8b5ff20a50a5011
push, send-pack: fix test if remote branch exists for colon-less
refspec
A push must fail if the remote ref does not yet exist and the
refspec
does not start with refs/. Remote refs must explicitly be
created with
their full name.
This commit adds some tests and fixes the existence check in
send-pack.
sp/push-refspec definitely needs some more work.
Steffen
^ permalink raw reply [flat|nested] 21+ messages in thread
* RE: git push bug?
2007-10-20 8:29 ` Steffen Prohaska
2007-10-20 8:38 ` Steffen Prohaska
@ 2007-10-20 11:52 ` Joakim Tjernlund
1 sibling, 0 replies; 21+ messages in thread
From: Joakim Tjernlund @ 2007-10-20 11:52 UTC (permalink / raw)
To: 'Steffen Prohaska', 'Johannes Schindelin'; +Cc: 'git'
> -----Original Message-----
> From: Steffen Prohaska [mailto:prohaska@zib.de]
> Sent: den 20 oktober 2007 10:30
> To: Johannes Schindelin
> Cc: Joakim Tjernlund; git
> Subject: Re: git push bug?
>
>
> On Oct 18, 2007, at 11:58 PM, Johannes Schindelin wrote:
>
> >
> > On Thu, 18 Oct 2007, Steffen Prohaska wrote:
> >
> >> On Oct 18, 2007, at 6:21 PM, Johannes Schindelin wrote:
> >>
> >>> On Thu, 18 Oct 2007, Joakim Tjernlund wrote:
> >>>
> >>>> Seems like it is a bit too easy to make mistakes here.
> Why can I
> >>>> delete
> >>>> a branch with :linus but not create one with linus:linus?
> >>>
> >>> I wonder why you bother with the colon at all. Just
> >>>
> >>> git push <remote> linus
> >>>
> >>> and be done with it. The colon is only there to play
> interesting
> >>> games,
> >>> not something as simple as "push this branch" or "push this tag".
> >>
> >> But you need a full refspec starting with 'refs/heads/' if you
> >> want to
> >> create a new branch on the remote side.
> >
> > No. Not if the name is the same on the local side.
>
> You're right. The documentation of git-send-pack says what you're
> saying:
>
> '''
> When one or more <ref> are specified explicitly, it can be either a
> single pattern, or a pair of such pattern separated by a colon
> ":" (this means that a ref name cannot have a colon in it). A single
> pattern <name> is just a shorthand for <name>:<name>
> '''
>
> Here it says that <name> is a shorthand for <name>:<name>.
> An later it states
>
> '''
> If <dst> does not match any remote ref, either
> * it has to start with "refs/"; <dst> is used as the destination
> literally in this case.
> * <src> == <dst> and the ref that matched the <src> must not
> exist in the set of remote refs; the ref matched <src> locally is
> used as the name of the destination.
> '''
>
> If <src> == <dst> then <dst> will be created even if it didn't exist.
>
> I think the current implementation though is a bit different.
> It will created a new branch for a colon-less refspec, that is
>
> git push origin work/topic
>
> will create a new ref on the remote. But
>
> git push origin work/topic:work/topic
>
> will _not_.
>
>
> Until you corrected me, I believed that new branches will never
> be created on the remote side unless a full ref is used. That is
> I expected that only
>
> git push origin refs/heads/work/topic
>
> would work.
>
> I thought this would be another safety net -- kind of a reminder
> not to push the wrong branch by accident.
>
> I still like the idea, but apparently git didn't ever support what
> I thought it would.
>
> Maybe adding some command line flags making the different tasks
> explicit could help:
>
> git push --create origin work/new-topic
> git push --delete origin work/old-topic
> git push --non-standard origin refs/funny/ref
This makes much more sense than the current method, thanks.
Jocke
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git push bug?
2007-10-19 18:50 ` Joakim Tjernlund
2007-10-19 22:46 ` Johannes Schindelin
@ 2007-10-20 12:05 ` Jan Hudec
1 sibling, 0 replies; 21+ messages in thread
From: Jan Hudec @ 2007-10-20 12:05 UTC (permalink / raw)
To: Joakim Tjernlund
Cc: 'Johannes Schindelin', 'Steffen Prohaska',
'git'
[-- Attachment #1: Type: text/plain, Size: 2743 bytes --]
On Fri, Oct 19, 2007 at 20:50:29 +0200, Joakim Tjernlund wrote:
> On den 19 oktober 2007 19:25, Johannes Schindelin [mailto:Johannes.Schindelin@gmx.de] wrote:
> > It strikes me as really odd that you would _want_ to create a branch
> > remotely, that has _never_ existed locally.
> It strikes me as really odd that a core developers like yourself
> hasn't tried to justify/explain why push works as it does.
Dscho it rarely kind to newbies.
> As I am trying to convince our dev. group here to move to git instead of subversion, I
> need to learn how git works. Now I have gotten to the push function and I need
> to know what can be done with push and how, pitfalls too. As I go along I find behavior
> that I find odd and report these to the list.
>
> git push <repo> v2.6.23:refs/heads/linus
> will make a tag look like a branch
That's becasue tags come in two flavors -- annotated and unannotated.
Annotated ones don't point to commits directly, but via 'tag' objects, that
contain description and usually signature.
Now git push will simply assign a remote branch whatever value you give it.
You gave it a tag, so it assigned a tag.
> git push <repo> linus:linus
> won't let me create the remote branch linus but
> git push <repo> linus
> will
Because in the former you are not saying whether refs/heads/linus,
refs/tags/linus or something else (the fact that heads and tags are treated
specially by git does not mean refs can't have other subdirectories -- it
can).
On the other hand in the later it resolves the ref locally and uses the same
name remotedly.
> git push <repo> :linus
> OOPS, now I just deleted remote branch linus, no warning
Your commands are quite obvious. No need for warning. (Besides, isn't there
a reflog?)
> git push <repo> linus:refs/head/linus
> creates a branch that is invisible(wont show in git branch -a)
It does not create a branch. It creates a ref with slightly funny name (it's
refs/heads, not refs/head).
^
> git push <repo> linus:refs/heads/newbranch
> creates remote branch newbranch, but you have to know the magic words
> refs/heads/ to do it.
Because you could have wanted a tag. Or a remote. Or something completely
different, maybe because some add-on uses (eg. stgit uses refs/bases and
refs/patches, IIRC).
> Se what I mean?
To me it all looks perfectly consistent. But maybe the documentation should
state more clearly, that push works in terms of arbitrary refs, NOT branches.
Feel free to post a documentation patch (people who just had hard time
finding something out are usually better at explaining it than old-timers who
consider it obvious).
--
Jan 'Bulb' Hudec <bulb@ucw.cz>
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* RE: git push bug?
2007-10-19 0:24 ` Shawn O. Pearce
@ 2007-10-20 17:38 ` Joakim Tjernlund
0 siblings, 0 replies; 21+ messages in thread
From: Joakim Tjernlund @ 2007-10-20 17:38 UTC (permalink / raw)
To: spearce, 'Steffen Prohaska'; +Cc: 'git'
> -----Original Message-----
> From: spearce@spearce.org [mailto:spearce@spearce.org]
> Sent: den 19 oktober 2007 02:25
> To: Steffen Prohaska
> Cc: joakim.tjernlund@transmode.se; git
> Subject: Re: git push bug?
>
> Steffen Prohaska <prohaska@zib.de> wrote:
> > On Oct 18, 2007, at 4:50 PM, Joakim Tjernlund wrote:
> > >
> > ># > git push ssh://devsrv/var/git/os2kernel.git linus:refs/linus
> ...
> > >error: refusing to create funny ref 'refs/linus' locally
> > >ng refs/linus funny refname
> > >error: failed to push to 'ssh://devsrv/var/git/os2kernel.git'
> ...
> > You may need to cleanup though. I'm not sure if the remote side
> > already created 'refs/linus'. The error message only indicates that
> > locally git refused to create the "funny refname".
>
> Cute. The error message "error: refusing to create .. locally"
> is actually coming from the remote site. Locally here is
> actually remotely. We *really* should change that. Its l.169 of
> receive-pack.c, which is only running on the remote side. :)
>
> Anyone game to improve that error message? Should be a pretty
> simple patch. One of the may low-hanging fruits in Git.
Just gave it a try, using git sendmail. Hopefully it will
reach the list :)
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2007-10-20 17:38 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-18 14:50 git push bug? Joakim Tjernlund
2007-10-18 15:14 ` Steffen Prohaska
2007-10-18 16:01 ` Joakim Tjernlund
2007-10-18 16:10 ` Joakim Tjernlund
2007-10-19 0:49 ` Shawn O. Pearce
2007-10-18 16:13 ` Steffen Prohaska
2007-10-18 16:21 ` Johannes Schindelin
2007-10-18 16:31 ` Joakim Tjernlund
2007-10-18 22:00 ` Johannes Schindelin
2007-10-19 14:47 ` Joakim Tjernlund
2007-10-19 17:24 ` Johannes Schindelin
2007-10-19 18:50 ` Joakim Tjernlund
2007-10-19 22:46 ` Johannes Schindelin
2007-10-20 12:05 ` Jan Hudec
2007-10-18 16:55 ` Steffen Prohaska
2007-10-18 21:58 ` Johannes Schindelin
2007-10-20 8:29 ` Steffen Prohaska
2007-10-20 8:38 ` Steffen Prohaska
2007-10-20 11:52 ` Joakim Tjernlund
2007-10-19 0:24 ` Shawn O. Pearce
2007-10-20 17:38 ` Joakim Tjernlund
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).