{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "*I want to create a git alias that intelligently handles merge conflicts and postpones manual conflict resolution. Note, this alias is created for a class environment in which an instructor posts class material in a git repository which students must pull locally and work through during lecture. Be careful using this alias outside that context.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction\n", "\n", "## Installation & Usage\n", "Gitclass-pull is a git alias that can be called from the command line. Simply add the 'git-demo' file in this repo to your git path. To find you where you've installed git type the following your CLI:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/usr/local/bin/git\r\n" ] } ], "source": [ "!which git" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next move the git-demo file into the same directory as your git installation. Make sure not to change the file name. When you call a git command (i.e. git demo), git looks for a executable file within its path with the same name as the command prefixed with \"git-\" (i.e. git-demo). This is one of the ways to make a git alias. \n", "\n", "So, to use gitclass-pull, **make sure you are in the git repo and branch you want to pull remote content into** and enter the following in your CLI:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Already up-to-date.\r\n", "Auto-merge was successful! Your local repo is now up to date.\r\n" ] } ], "source": [ "!git demo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conflict Resolution Methodology Overview\n", "Gitclass-pull only deals with already commited changes (i.e. working tree = index tree). Gitclass-pull does not try to make any decision about working tree changes (i.e. commit, stash, reset) for the student. This decision is best left to the student.\n", "\n", "The gitclass-pull tries to make intellegient decisions for the following 3 types of merge conflicts:\n", "\n", "1. Same name local untracked file conflict\n", "2. Delete & modify conflicts\n", "3. File content conflicts" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "# Handling same name local untracked file conflict\n", "This type of conflict occurs when the instructor add a file (i.e. local_untracked.txt) to the remote and the students creates a file in his local repo by the same name (i.e. local_untracked.txt) but leaves it untracked by git. Pulling will result in overwritting the local untracked file, so git raises the following error:\n", "\n", "![image.png](attachment:image.png)\n", "\n", "In this scenario, gitclass-pull compares a list of files instructor has added since the last merge and all files in the student's local repo and renames the local untracked files by appending '_local_untracked' to the filename." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "#the following command outputs a list of files the instructor has added since the last merge\n", "!git diff --name-only --diff-filter=A ...origin\n", "\n", "#diff-filter=A flag means we are only look for added files\n", "#name-only flag means to list just the name of the files" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Handling delete & modify conflicts\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }