git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* Possible to unshallow or deepen based on local objects?
@ 2019-07-26 18:43 Mark Rushakoff
  2019-08-08 22:17 ` Mark Rushakoff
  0 siblings, 1 reply; 3+ messages in thread
From: Mark Rushakoff @ 2019-07-26 18:43 UTC (permalink / raw)
  To: git

I am building some CI tooling, and I am working with a large-ish repository, so
I am trying to start with a shallow clone of the repository and deepen it on
demand. I am finding it very difficult to correctly switch between fetch
--depth and fetch --deepen.

I am looking for a way to "recover" from a fetch --depth call that made my
history shallower than before. Ultimately, I may take a different approach to
just work around this altogether, but I thought I'd ask here first.

In particular, if there is history like this:

A --- B --- C --- D --- E --- F
       \                 \
         ---------------- G
And my shallow history includes D..F, then I believe I am limited in my options
for fetching G:

- If I do a plain fetch of G, or if I use --deepen, then I pull in A and all of
  its history, which I don't strictly need or want yet.
- If I know G's parent is B, and I fetch --depth=1, then (I think) I will see
  B, E, F, and G, effectively losing sight of D

As a more contrived example, suppose I have a shallow clone of a repository:

bash-3.2$ git clone --depth=4 -q git@github.com:git/git.git
bash-3.2$ cd git
bash-3.2$ git log --format='%h %d'
3034dab  (HEAD -> master, origin/master, origin/HEAD)
98e06de
352253a
4098130  (grafted)
7b974e3
df63c2e
75ce486  (grafted)
70b39fb  (grafted)
afc3bf6  (grafted)
bash-3.2$ cat .git/shallow
409813088ad55ae4a60f55412f6b5ba6a89d89e7
70b39fbede78313656e8a6bd9b38b238ab10db2f
75ce48674889df6a2bb493fb5d6bef0ef60ca7ae
afc3bf6eb13d9fc489b569164819cff44db8ac17

And then suppose I fetch with depth smaller than before:

bash-3.2$ git fetch --depth=1 -q
bash-3.2$ git log --format='%h %d'
3034dab  (grafted, HEAD -> master, origin/master, origin/HEAD)
bash-3.2$ cat .git/shallow
3034dab9ed6b11970a53099a7b3ca981f1461365
409813088ad55ae4a60f55412f6b5ba6a89d89e7
70b39fbede78313656e8a6bd9b38b238ab10db2f
75ce48674889df6a2bb493fb5d6bef0ef60ca7ae
afc3bf6eb13d9fc489b569164819cff44db8ac17

I can still see the commits I had before the --depth=1 fetch:

bash-3.2$ git log -1 --format=oneline 75ce486
75ce48674889df6a2bb493fb5d6bef0ef60ca7ae (grafted) Merge branch
'di/readme-markup-fix'

Short of looking through .git/shallow and removing each entry whose parents I
can resolve, is there a built-in command to "unshallow based on local objects"?
I have tried many web search terms, I have looked through the docs for many
low-level git commands, I have tried variations of "git fetch .", and I am
stumped.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-08-08 22:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-26 18:43 Possible to unshallow or deepen based on local objects? Mark Rushakoff
2019-08-08 22:17 ` Mark Rushakoff
2019-08-08 22:33   ` Junio C Hamano

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).