This is probably the first attempt to treat shallow clones just like
ordinary ones. Which means you can push or fetch/clone between any two
repos, regardless of their shallow status. There are two purposes
behind this:

 - to make local/shallow clone <-> (complete) upstream repo workflow
   smoother, the note about shallow clone limitation in git-clone.txt
   can be removed

 - to make it possible for upstream to provide a lightweight repo that
   others can use. For example, big repos with lots of activities can
   be split into new base repo that only contains the work of maximum one
   year and a complete repo mostly for archive.

This is a naive approach. I might overlook something again, which is
why I publish it early to get more eyes on it.

The idea is simple: in shallow case, we provide the pack _and_
.git/shallow file to the other end. The other end will setup extra
grafting to make sure the updated repo is "complete". More in
individual patch messages.

There might be issues with generating optimum pack for transfer when
both ends are shallow.. There's also an interesting issue, whether we
can take advantage of commit bitmaps in shallow clones if they are
more widely used.. We also might need a config key to protect a repo
from becoming shallow by a fetch or push, if the repo is to be a
backup one..

Nguyễn Thái Ngọc Duy (7):
  transport.h: remove send_pack prototype, already defined in send-pack.h
  {receive,upload}-pack: advertise shallow graft information
  connect.c: teach get_remote_heads to parse "shallow" lines
  Move setup_alternate_shallow and write_shallow_commits to shallow.c
  fetch-pack: support fetching from a shallow repository
  {send,receive}-pack: support pushing from a shallow clone
  send-pack: support pushing to a shallow clone

 Documentation/technical/pack-protocol.txt |   7 +-
 builtin/fetch-pack.c                      |   6 +-
 builtin/receive-pack.c                    |  54 ++++++++++++----
 builtin/send-pack.c                       |   7 +-
 cache.h                                   |   1 +
 commit.h                                  |   8 +++
 connect.c                                 |  12 +++-
 fetch-pack.c                              |  78 +++++++---------------
 fetch-pack.h                              |   1 +
 remote-curl.c                             |   2 +-
 send-pack.c                               |  41 ++++++++++--
 send-pack.h                               |   4 +-
 shallow.c                                 | 103 ++++++++++++++++++++++++++++++
 t/ (new +x)         |  75 ++++++++++++++++++++++
 t/ (new +x)          |  85 ++++++++++++++++++++++++
 transport.c                               |  14 ++--
 transport.h                               |   6 --
 upload-pack.c                             |   3 +-
 18 files changed, 414 insertions(+), 93 deletions(-)
 create mode 100755 t/
 create mode 100755 t/


To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to
More majordomo info at

Reply via email to