Simple App to help @jaspermayone make it through COMP1050 with a professor who won't use version control.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add README

+107
+107
README.md
··· 1 + # ZipMerge 2 + 3 + A macOS app that helps students merge changes from teacher-provided zip files when version control isn't available. 4 + 5 + ## The Problem 6 + 7 + You're working on a programming assignment. Your professor gives you a starter zip file. You make changes. Then the professor releases an updated zip with fixes or new requirements. Now you need to figure out what changed and merge those updates into your modified code - without losing your work. 8 + 9 + **ZipMerge solves this.** 10 + 11 + ## What It Does 12 + 13 + ZipMerge compares your local project directory with a teacher's zip file and shows you: 14 + 15 + - 🟢 **New files** from the teacher 16 + - 🟠 **Modified files** with side-by-side diffs 17 + - 🔴 **Deleted files** that are in your version but not theirs 18 + - ⚪ **Unchanged files** (shown but ignored) 19 + 20 + For each file, you choose: 21 + - **Keep Mine** - Ignore the teacher's version 22 + - **Take Theirs** - Replace with the teacher's version 23 + 24 + After reviewing all changes, apply them with one click. If your project is a git repo, ZipMerge can automatically create a commit for you. 25 + 26 + ## Installation 27 + 28 + ### Via Homebrew (Recommended) 29 + 30 + ```bash 31 + brew tap jaspermayone/tap 32 + brew install --cask zipmerge 33 + ``` 34 + 35 + ### Manual Installation 36 + 37 + 1. Download `ZipMerge.zip` from the [latest release](https://github.com/jaspermayone/ZipMerge/releases/latest) 38 + 2. Unzip and move `ZipMerge.app` to `/Applications` 39 + 3. Open the app (right-click → Open on first launch) 40 + 41 + ## Usage 42 + 43 + 1. **Select your project directory** - Click "Choose Directory" or drag it in 44 + 2. **Drop the teacher's zip file** - Drag the `.zip` file onto the drop zone 45 + 3. **Review changes** - Click through each modified file and see the diffs 46 + 4. **Make decisions** - For each file, choose "Keep Mine" or "Take Theirs" 47 + 5. **Apply changes** - Click "Apply Changes" to merge 48 + 6. **Commit (optional)** - If it's a git repo, create a commit with the changes 49 + 50 + ## Features 51 + 52 + - **Side-by-side diff viewer** for modified files 53 + - **File-by-file merge decisions** - no forced overwrites 54 + - **Git integration** - auto-detect repos and offer to commit 55 + - **Smart zip handling** - handles zips with wrapper folders 56 + - **Automatic cleanup** - removes temp files after merge 57 + 58 + ## Development 59 + 60 + ### Building from Source 61 + 62 + ```bash 63 + # Clone the repository 64 + git clone https://github.com/jaspermayone/ZipMerge.git 65 + cd ZipMerge 66 + 67 + # Open in Xcode 68 + open ZipMerge.xcodeproj 69 + 70 + # Or build from command line 71 + xcodebuild -project ZipMerge.xcodeproj -scheme ZipMerge -configuration Release build 72 + ``` 73 + 74 + ### Project Structure 75 + 76 + - `ZipMerge/Models.swift` - Data models for file comparisons 77 + - `ZipMerge/FileComparer.swift` - Core comparison and merge logic 78 + - `ZipMerge/ContentView.swift` - Main UI 79 + - `ZipMerge/DiffView.swift` - Diff visualization 80 + 81 + See [CLAUDE.md](CLAUDE.md) for detailed architecture documentation. 82 + 83 + ### Creating a Release 84 + 85 + See [RELEASING.md](RELEASING.md) for the release process. 86 + 87 + ## Known Limitations 88 + 89 + - Currently supports whole-file merge decisions only (no line-by-line merging) 90 + - Binary files show as "(binary or unreadable)" in diff view 91 + - Requires macOS with SwiftUI support 92 + 93 + ## Contributing 94 + 95 + Contributions are welcome! Please feel free to submit a Pull Request. 96 + 97 + ## License 98 + 99 + Licensed under the [O'Saasy License Agreement](LICENSE.md) - essentially MIT with a non-compete clause for SaaS offerings. 100 + 101 + ## Author 102 + 103 + Built by [Jasper Mayone](https://jaspermayone.com) to survive COMP1050 with a professor who won't use version control. 104 + 105 + ## Acknowledgments 106 + 107 + Sometimes the best tools come from personal frustration. This is one of those times.