ZipMerge#
A macOS app that helps students merge changes from teacher-provided zip files when version control isn't available.
The Problem#
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.
ZipMerge solves this.
What It Does#
ZipMerge compares your local project directory with a teacher's zip file and shows you:
- 🟢 New files from the teacher
- 🟠 Modified files with side-by-side diffs
- 🔴 Deleted files that are in your version but not theirs
- ⚪ Unchanged files (shown but ignored)
For each file, you choose:
- Keep Mine - Ignore the teacher's version
- Take Theirs - Replace with the teacher's version
After reviewing all changes, apply them with one click. If your project is a git repo, ZipMerge can automatically create a commit for you.
Installation#
Via Homebrew (Recommended)#
brew tap jaspermayone/tap
brew install --cask zipmerge
Manual Installation#
- Download
ZipMerge.zipfrom the latest release - Unzip and move
ZipMerge.appto/Applications - Open the app (right-click → Open on first launch)
Usage#
- Select your project directory - Click "Choose Directory" or drag it in
- Drop the teacher's zip file - Drag the
.zipfile onto the drop zone - Review changes - Click through each modified file and see the diffs
- Make decisions - For each file, choose "Keep Mine" or "Take Theirs"
- Apply changes - Click "Apply Changes" to merge
- Commit (optional) - If it's a git repo, create a commit with the changes
Features#
- Side-by-side diff viewer for modified files
- File-by-file merge decisions - no forced overwrites
- Git integration - auto-detect repos and offer to commit
- Smart zip handling - handles zips with wrapper folders
- Automatic cleanup - removes temp files after merge
Development#
Building from Source#
# Clone the repository
git clone https://github.com/jaspermayone/ZipMerge.git
cd ZipMerge
# Open in Xcode
open ZipMerge.xcodeproj
# Or build from command line
xcodebuild -project ZipMerge.xcodeproj -scheme ZipMerge -configuration Release build
Project Structure#
ZipMerge/Models.swift- Data models for file comparisonsZipMerge/FileComparer.swift- Core comparison and merge logicZipMerge/ContentView.swift- Main UIZipMerge/DiffView.swift- Diff visualization
See CLAUDE.md for detailed architecture documentation.
Creating a Release#
See RELEASING.md for the release process.
Known Limitations#
- Currently supports whole-file merge decisions only (no line-by-line merging)
- Binary files show as "(binary or unreadable)" in diff view
- Requires macOS with SwiftUI support
Contributing#
Contributions are welcome! Please feel free to submit a Pull Request.
License#
Licensed under the O'Saasy License Agreement - essentially MIT with a non-compete clause for SaaS offerings.
Author#
Built by Jasper Mayone to survive COMP1050 with a professor who won't use version control.
Acknowledgments#
Sometimes the best tools come from personal frustration. This is one of those times.