Automatic Merging Behavior¶
nbgitpuller
tries to make sure the end user who clicked the link
never has to manually interact with the git repo. This requires us to
make some opinionated choices on how we handle various cases where both the
student (end user) and instructor (author of the repo) repo have modified the
repository.
Here, we describe how we handle the various possible cases each time the student clicks the nbgitpuller link.
Case 1: The instructor changed a file that the student has not changed¶
The student’s changes are left alone, and the instructor’s changes are pulled in to the local copy. Most common case. This is also what happens when the instructor adds a new file / directory.
Case 2: Student & instructor changed different lines in same file¶
Very similar to case 1 - the student’s changes are left alone, and the instructor’s changes are merged in to the existing local file.
Case 3: Student & instructor change same lines in same file¶
In this case, we always keep the student’s changes. We want to never
accidentally lose a student’s changes - nbgitpuller
will not eat your
homework.
Case 4: Student deletes file locally, but instructor doesn’t¶
If the student has deleted a file locally, but the file is still present in the remote repo, the file from the remote repo is pulled into the student’s directory. This enables the use case where a student wants to ‘start over’ a file after having made many changes to it. They can simply delete the file, click the nbgitpuller link again, and get a fresh copy.
Case 5: Student creates file manually, but instructor adds file with same name¶
As an example, let’s say the student manually creates a file named
Untitled141.ipynb
in the directory where nbgitpuller has pulled a
repository. At some point afterwards, the instructor creates a file also
named Untitled141.ipynb
and pushes it to the repo.
When the student clicks the nbgitpuller link next, we want to make sure we
don’t destroy the student’s work. Since they were created in two different
places, the likelihood of them being mergeable is low. So we rename the
student’s file, and pull the instructor’s file. So the student’s
Untitled141.ipynb
file will be renamed to
Untitled141_<timestamp>.ipynb
, and the instructor’s file will be kept at
Untitled141.ipynb
.
This is a fairly rare case in our experience.