Re: Why can't I push from a shallow clone?

2013-07-26 Thread Fredrik Gustafsson
On Thu, Jul 25, 2013 at 07:33:16PM -0700, Gulshan Singh wrote:
 I've been trying to figure out why I can't push from a shallow clone
 (using --depth) to a repository. I've made simple examples where it
 works, but I've read that in doesn't work in every case. However, I
 can't come up with a case where it doesn't work. Googling gives this
 answer: 
 http://stackoverflow.com/questions/6900103/why-cant-i-push-from-a-shallow-clone,
 but I don't completely understand the explanation, so I was hoping
 someone could explain it.

I can't explain it better than what Junio did in the link you just
provide. However there's ongoing work to allow shallow clones to be able
to push. You can read about it here:
http://thread.gmane.org/gmane.comp.version-control.git/230612/focus=230878

-- 
Med vänliga hälsningar
Fredrik Gustafsson

tel: 0733-608274
e-post: iv...@iveqy.com
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Why can't I push from a shallow clone?

2013-07-26 Thread Konstantin Khomoutov
On Thu, 25 Jul 2013 19:33:16 -0700
Gulshan Singh gsingh2...@gmail.com wrote:

 I've been trying to figure out why I can't push from a shallow clone
 (using --depth) to a repository. I've made simple examples where it
 works, but I've read that in doesn't work in every case. However, I
 can't come up with a case where it doesn't work. Googling gives this
 answer:
 http://stackoverflow.com/questions/6900103/why-cant-i-push-from-a-shallow-clone,
 but I don't completely understand the explanation, so I was hoping
 someone could explain it.

See also this thread [1] which originated from this SO question [2].

1. http://thread.gmane.org/gmane.comp.version-control.git/221634
2. http://stackoverflow.com/q/16077691/720999
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Why can't I push from a shallow clone?

2013-07-26 Thread Gulshan Singh
Hey Fredrick,

It's good to know that work is being done on this. I still want to
understand it though, so I guess I'll ask specific questions about
Junio's response. He states,

If you cloned shallowly some time ago, worked without communicating
with the other side while the other side progressed, AND if the other
side's progress included a rewind  rebuild of the history, you would
see a similar topology.
The leftmost 'S' in the above picture might have been the tip of the
branch when you shallowly cloned with depth 1, and since then the
remote end may have discarded topmost three commits and have rebuilt
its history that leads to the rightmost 'R'. In such a case pushing to
the remote's HEAD will fail.

So as an example, if you shallow clone a branch, then someone squashes
the head commit and makes a new commit, you won't be able to push to
HEAD because the parent has changed. But if someone does that, I don't
think you would be able to push even if it was a full clone. That's
why it's usually not a good idea to rebase shared branches. So did I
misunderstand the scenario?


On Thu, Jul 25, 2013 at 11:55 PM, Fredrik Gustafsson iv...@iveqy.com wrote:
 On Thu, Jul 25, 2013 at 07:33:16PM -0700, Gulshan Singh wrote:
 I've been trying to figure out why I can't push from a shallow clone
 (using --depth) to a repository. I've made simple examples where it
 works, but I've read that in doesn't work in every case. However, I
 can't come up with a case where it doesn't work. Googling gives this
 answer: 
 http://stackoverflow.com/questions/6900103/why-cant-i-push-from-a-shallow-clone,
 but I don't completely understand the explanation, so I was hoping
 someone could explain it.

 I can't explain it better than what Junio did in the link you just
 provide. However there's ongoing work to allow shallow clones to be able
 to push. You can read about it here:
 http://thread.gmane.org/gmane.comp.version-control.git/230612/focus=230878

 --
 Med vänliga hälsningar
 Fredrik Gustafsson

 tel: 0733-608274
 e-post: iv...@iveqy.com



-- 
Gulshan Singh
University of Michigan, Class of 2015
College of Engineering, Computer Science Major
guls...@umich.edu | 248.961.6317
Alternate E-mail: gsingh2...@gmail.com
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Why can't I push from a shallow clone?

2013-07-26 Thread Philip Oakley

From: Gulshan Singh gsingh2...@gmail.com
Sent: Friday, July 26, 2013 8:12 PM

Hey Fredrick,

It's good to know that work is being done on this. I still want to
understand it though, so I guess I'll ask specific questions about
Junio's response. He states,

If you cloned shallowly some time ago, worked without communicating
with the other side while the other side progressed, AND if the other
side's progress included a rewind  rebuild of the history, you would
see a similar topology.
The leftmost 'S' in the above picture might have been the tip of the
branch when you shallowly cloned with depth 1, and since then the
remote end may have discarded topmost three commits and have rebuilt
its history that leads to the rightmost 'R'. In such a case pushing to
the remote's HEAD will fail.

So as an example, if you shallow clone a branch, then someone squashes
the head commit and makes a new commit, you won't be able to push to
HEAD because the parent has changed. But if someone does that, I don't
think you would be able to push even if it was a full clone. That's
why it's usually not a good idea to rebase shared branches. So did I
misunderstand the scenario?


In your example you have a sucessful failure, that is, the shallow issue 
hasn't got in the way of the normal non-ff failure on push. (asuming the 
squash is an extra commit, not a re-written top commit, so at least you 
still have your common commit of your depth1 shallow clone)


For it to be a proper shallow failure the remote repo needs to be 
re-written sufficiently far back that your shallow clone has nothing in 
common with it. In such a case your DAG can't join onto the remote's 
DAG.





On Thu, Jul 25, 2013 at 11:55 PM, Fredrik Gustafsson iv...@iveqy.com 
wrote:

On Thu, Jul 25, 2013 at 07:33:16PM -0700, Gulshan Singh wrote:

I've been trying to figure out why I can't push from a shallow clone
(using --depth) to a repository. I've made simple examples where it
works, but I've read that in doesn't work in every case. However, I
can't come up with a case where it doesn't work. Googling gives this
answer: 
http://stackoverflow.com/questions/6900103/why-cant-i-push-from-a-shallow-clone,

but I don't completely understand the explanation, so I was hoping
someone could explain it.


I can't explain it better than what Junio did in the link you just
provide. However there's ongoing work to allow shallow clones to be 
able

to push. You can read about it here:
http://thread.gmane.org/gmane.comp.version-control.git/230612/focus=230878
--
Med vänliga hälsningar
Fredrik Gustafsson
tel: 0733-608274
e-post: iv...@iveqy.com

--
Gulshan Singh
University of Michigan, Class of 2015
College of Engineering, Computer Science Major
guls...@umich.edu | 248.961.6317
Alternate E-mail: gsingh2...@gmail.com

--
Philip 


--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Why can't I push from a shallow clone?

2013-07-25 Thread Gulshan Singh
I've been trying to figure out why I can't push from a shallow clone
(using --depth) to a repository. I've made simple examples where it
works, but I've read that in doesn't work in every case. However, I
can't come up with a case where it doesn't work. Googling gives this
answer: 
http://stackoverflow.com/questions/6900103/why-cant-i-push-from-a-shallow-clone,
but I don't completely understand the explanation, so I was hoping
someone could explain it.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html