| There are two Pack push-pull protocols. |
| |
| upload-pack (S) | fetch/clone-pack (C) protocol: |
| |
| # Tell the puller what commits we have and what their names are |
| S: SHA1 name |
| S: ... |
| S: SHA1 name |
| S: # flush -- it's your turn |
| # Tell the pusher what commits we want, and what we have |
| C: want name |
| C: .. |
| C: want name |
| C: have SHA1 |
| C: have SHA1 |
| C: ... |
| C: # flush -- occasionally ask "had enough?" |
| S: NAK |
| C: have SHA1 |
| C: ... |
| C: have SHA1 |
| S: ACK |
| C: done |
| S: XXXXXXX -- packfile contents. |
| |
| send-pack | receive-pack protocol. |
| |
| # Tell the pusher what commits we have and what their names are |
| C: SHA1 name |
| C: ... |
| C: SHA1 name |
| C: # flush -- it's your turn |
| # Tell the puller what the pusher has |
| S: old-SHA1 new-SHA1 name |
| S: old-SHA1 new-SHA1 name |
| S: ... |
| S: # flush -- done with the list |
| S: XXXXXXX --- packfile contents. |