Simple App to help @jaspermayone make it through COMP1050 with a professor who won't use version control.
1# ZipMerge
2
3A macOS app that helps students merge changes from teacher-provided zip files when version control isn't available.
4
5## The Problem
6
7You'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
13ZipMerge 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
20For each file, you choose:
21- **Keep Mine** - Ignore the teacher's version
22- **Take Theirs** - Replace with the teacher's version
23
24After 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
31brew tap jaspermayone/tap
32brew install --cask zipmerge
33```
34
35### Manual Installation
36
371. Download `ZipMerge.zip` from the [latest release](https://github.com/jaspermayone/ZipMerge/releases/latest)
382. Unzip and move `ZipMerge.app` to `/Applications`
393. Open the app (right-click → Open on first launch)
40
41## Usage
42
431. **Select your project directory** - Click "Choose Directory" or drag it in
442. **Drop the teacher's zip file** - Drag the `.zip` file onto the drop zone
453. **Review changes** - Click through each modified file and see the diffs
464. **Make decisions** - For each file, choose "Keep Mine" or "Take Theirs"
475. **Apply changes** - Click "Apply Changes" to merge
486. **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
64git clone https://github.com/jaspermayone/ZipMerge.git
65cd ZipMerge
66
67# Open in Xcode
68open ZipMerge.xcodeproj
69
70# Or build from command line
71xcodebuild -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
81See [CLAUDE.md](CLAUDE.md) for detailed architecture documentation.
82
83### Creating a Release
84
85See [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
95Contributions are welcome! Please feel free to submit a Pull Request.
96
97## License
98
99Licensed under the [O'Saasy License Agreement](LICENSE.md) - essentially MIT with a non-compete clause for SaaS offerings.
100
101## Author
102
103Built by [Jasper Mayone](https://jaspermayone.com) to survive COMP1050 with a professor who won't use version control.
104
105## Acknowledgments
106
107Sometimes the best tools come from personal frustration. This is one of those times.