We are stuck with this weird situation: the clash of company policies that we have to resolve with a little bit of engineering.

Imagine a company C, and two employees, Alice and Bob. Alice is an internal employee of C, Bob is a third-party outsourcer/contractor. Alice and Bob work on the same project, which is stored on the Git server inside the company. However, now the company policy prohibits Bob to access the internal server. It does not prohibit Alice and Bob to exchange emails about the project, but the collaboration through Git now has to be modified somehow.

Here's one solution that we came up with:

1. Bob sets up a local Git repository on his machine outside the company and commits his changes there.
2. Alice uses Bob's repository as a remote, and pulls changes from there to her machine inside the company.
3. Alice syncs these changes with the changes done by the other people in the company (stored on the internal Git server).
4. Alice sends a email with some kind of a *diff* of the two repositories to Bob.
5. Bob applies this "diff" to his local repository.

Our goal is the following: after step 5, Bob's repository should end up in *exactly* the same state as if he just did a simple **git pull** from the internal server inside the company. Now the question is, how can this be accomplished? What kind of a "diff" can we prepare for two repositories? Essentially, is there a way to realize the information exchanged during a pull?

Of course, the simplest thing would be to send a (compacted) copy of the entire repository by email, but this would be insanely large and utterly unproductive. Is there a better way to accomplish this?

Thank you!