Simple App to help @jaspermayone make it through COMP1050 with a professor who won't use version control.
Swift 64.2%
Shell 10.5%
Other 25.4%
12 1 5

Clone this repository

https://tangled.org/jaspermayone.com/ZipMerge https://tangled.org/did:plc:abgthiqrd7tczkafjm4ennbo/ZipMerge
git@knot.jaspermayone.com:jaspermayone.com/ZipMerge git@knot.jaspermayone.com:did:plc:abgthiqrd7tczkafjm4ennbo/ZipMerge

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

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#

brew tap jaspermayone/tap
brew install --cask zipmerge

Manual Installation#

  1. Download ZipMerge.zip from the latest release
  2. Unzip and move ZipMerge.app to /Applications
  3. Open the app (right-click → Open on first launch)

Usage#

  1. Select your project directory - Click "Choose Directory" or drag it in
  2. Drop the teacher's zip file - Drag the .zip file onto the drop zone
  3. Review changes - Click through each modified file and see the diffs
  4. Make decisions - For each file, choose "Keep Mine" or "Take Theirs"
  5. Apply changes - Click "Apply Changes" to merge
  6. 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 comparisons
  • ZipMerge/FileComparer.swift - Core comparison and merge logic
  • ZipMerge/ContentView.swift - Main UI
  • ZipMerge/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.