{"id":50980019,"url":"https://github.com/shineii86/gitunzip","last_synced_at":"2026-06-19T13:02:08.148Z","repository":{"id":351852285,"uuid":"1212726129","full_name":"Shineii86/GitUnzip","owner":"Shineii86","description":"Upload archives (.zip, .tar.gz, .7z) from your phone, extract them, and push the entire codebase to GitHub — all from Google Colab. No PC needed.","archived":false,"fork":false,"pushed_at":"2026-05-05T09:24:57.000Z","size":1217,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-05T11:20:59.723Z","etag":null,"topics":["archive-extractor","automation","colab-notebook","github","mobile-development","python"],"latest_commit_sha":null,"homepage":"https://github.com/Shineii86/GitUnzip#readme","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Shineii86.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-16T17:07:31.000Z","updated_at":"2026-05-05T09:25:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Shineii86/GitUnzip","commit_stats":null,"previous_names":["shineii86/gitunzip"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Shineii86/GitUnzip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shineii86%2FGitUnzip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shineii86%2FGitUnzip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shineii86%2FGitUnzip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shineii86%2FGitUnzip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Shineii86","download_url":"https://codeload.github.com/Shineii86/GitUnzip/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shineii86%2FGitUnzip/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34532260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archive-extractor","automation","colab-notebook","github","mobile-development","python"],"created_at":"2026-06-19T13:02:04.823Z","updated_at":"2026-06-19T13:02:08.142Z","avatar_url":"https://github.com/Shineii86.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n[![GitUnzip Banner](https://raw.githubusercontent.com/Shineii86/GitUnzip/main/images/GitUnzip.png)](https://github.com/Shineii86/GitUnzip)\n\n[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/Shineii86/GitUnzip/blob/main/notebooks/GitUnzip.ipynb)\n[![Python 3.8+](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n[![GitHub Stars](https://img.shields.io/github/stars/Shineii86/GitUnzip?style=for-the-badge)](https://github.com/Shineii86/GitUnzip/stargazers)\n[![GitHub Forks](https://img.shields.io/github/forks/Shineii86/GitUnzip?style=for-the-badge)](https://github.com/Shineii86/GitUnzip/fork)\n\n**Upload archives (.zip, .tar.gz, .7z, .rar) from your phone, auto-create repos, get alerts, and share via QR codes — all from Google Colab. No PC required.**\n\n\u003c/div\u003e\n\n---\n\n\u003e 🚀 **v2.0 — NOW MODULAR \u0026 MORE POWERFUL**\n\u003e\n\u003e GitUnzip bridges the gap between mobile file management and GitHub. Upload a zip from your phone, and it extracts everything and pushes to your repo with progress animations.\n\n---\n\n## 📖 Table of Contents\n\n- [What is GitUnzip?](#-what-is-gitunzip)\n- [🆕 What's New in v2.0](#-whats-new-in-v20)\n- [Features](#-features)\n- [Project Structure](#-project-structure)\n- [Prerequisites](#-prerequisites)\n- [Setup Guide](#-setup-guide)\n- [Configuration Reference](#-configuration-reference)\n- [Supported Formats](#-supported-formats)\n- [How It Works](#-how-it-works)\n- [Troubleshooting](#-troubleshooting)\n- [FAQ](#-faq)\n- [License](#-license)\n- [Credits](#-credits)\n\n---\n\n## 🎯 What is GitUnzip?\n\n**GitUnzip** solves the mobile-to-GitHub workflow: you can't upload folders or unzip files directly from the GitHub mobile site.\n\n- **Upload** a zip/tar/7z/rar from your phone\n- **Extract** it with progress bars\n- **Push** the entire codebase to your GitHub repo\n- **Share** via QR code\n\nNo PC needed. No desktop Git clients. Just your phone and Google Colab.\n\n---\n\n## 🆕 What's New in v2.0\n\n| Improvement | Description |\n|-------------|-------------|\n| 🏗️ **Modular Architecture** | Refactored into clean `gitunzip/` Python package |\n| 📦 **.rar, .bz2, .xz Support** | Now handles 7 archive formats |\n| 🤖 **Telegram Notifications** | Get upload alerts in Telegram |\n| ✏️ **Custom Commit Messages** | Your own message instead of watermark |\n| 🔒 **Private Repos** | Option to create private repositories |\n| 🧹 **Junk Exclusion** | Auto-skips `__pycache__`, `.git`, `node_modules`, `.DS_Store` |\n| 🛡️ **Path Traversal Protection** | Blocks malicious paths inside archives |\n| 💣 **Zip Bomb Detection** | Rejects archives with \u003e1GB uncompressed |\n| ✅ **Archive Validation** | Integrity checks before extraction |\n| 📊 **Processing Summary** | Stats and timing after upload |\n| 🔀 **PR Link Generation** | Auto-generates PR link for new branches |\n| 📝 **Better Error Handling** | Graceful failures with clear messages |\n\n---\n\n## ✨ Features\n\n| # | Feature | Description |\n|---|---------|-------------|\n| 1 | Multi-format | `.zip`, `.tar.gz`, `.tgz`, `.7z`, `.rar`, `.bz2`, `.xz` |\n| 2 | Auto-create repo | Creates repository if it doesn't exist |\n| 3 | Private repos | Option to create private repos |\n| 4 | Email notifications | Get alerted when upload completes |\n| 5 | Telegram notifications | Get alerts in Telegram |\n| 6 | Multiple archives | Upload several files at once |\n| 7 | QR code sharing | Scan to open repo on another device |\n| 8 | Progress bars | Visual feedback for every step |\n| 9 | Custom commit message | Your own commit message |\n| 10 | Junk exclusion | Skips `__pycache__`, `.git`, `node_modules`, etc. |\n| 11 | Safe branching | Create new branch instead of overwriting |\n| 12 | Path traversal protection | Blocks malicious archive paths |\n| 13 | Zip bomb detection | Rejects archives \u003e1GB uncompressed |\n| 14 | Subdirectory target | Place files in a specific subdirectory |\n| 15 | PR link generation | Auto-generates PR link for new branches |\n| 16 | Processing summary | Shows stats and timing after upload |\n\n---\n\n## 📁 Project Structure\n\n```\nGitUnzip/\n├── notebooks/\n│   └── GitUnzip.ipynb         # Colab notebook (main entry point)\n├── gitunzip/\n│   ├── __init__.py             # Package metadata\n│   ├── __main__.py             # CLI entry point\n│   ├── config.py               # Configuration management\n│   ├── archives.py             # Archive extraction (zip, tar, 7z, rar)\n│   ├── github_ops.py           # GitHub repo operations\n│   ├── notifications.py        # Email \u0026 Telegram notifiers\n│   ├── qrcodes.py              # QR code generation\n│   └── core.py                 # Main processing logic\n├── requirements.txt            # Python dependencies\n├── LICENSE                     # MIT License\n└── README.md                   # This file\n```\n\n---\n\n## 🛠️ Prerequisites\n\n| Credential | Purpose | Where to Get It |\n|------------|---------|-----------------|\n| GitHub Account | Storage | [github.com](https://github.com) |\n| GitHub PAT (Classic) | API access | [Settings → Tokens](https://github.com/settings/tokens) — check `repo` scope |\n\n### Optional\n\n| Credential | Purpose | Where to Get It |\n|------------|---------|-----------------|\n| Gmail App Password | Email alerts | [Google App Passwords](https://myaccount.google.com/apppasswords) |\n| Telegram Bot Token | Telegram alerts | [@BotFather](https://t.me/botfather) |\n\n---\n\n## 📋 Setup Guide\n\n### 1. Get Your GitHub Token\n\n1. Go to **Settings** → **Developer settings** → **Personal access tokens** → **Tokens (classic)**\n2. Click **Generate new token** → **Generate new token (classic)**\n3. Name it `GitUnzip`, set expiration (30 days recommended)\n4. Check **`repo`** scope\n5. Click **Generate token** and **copy it immediately** (starts with `ghp_`)\n\n\u003e 🔒 Treat this token like a password. Never commit it or share it publicly.\n\n### 2. Run in Colab\n\n1. Click the **Open in Colab** badge at the top\n2. Enter your GitHub username and token\n3. Specify the target repository name\n4. Run both cells\n5. When prompted, select your archive file(s)\n6. Watch the progress bars — your code will be on GitHub in seconds!\n\n---\n\n## ⚙️ Configuration Reference\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `GITHUB_USERNAME` | string | — | Your GitHub username |\n| `GITHUB_TOKEN` | string | — | GitHub PAT with `repo` scope |\n| `REPO_NAME` | string | `my-uploaded-code` | Target repository (auto-created) |\n| `BRANCH` | string | `main` | Target branch |\n| `OVERWRITE_BRANCH` | bool | `True` | Force-push or create new branch |\n| `TARGET_SUBDIR` | string | `\"\"` | Subdirectory in repo |\n| `PRIVATE_REPO` | bool | `False` | Create as private repo |\n| `CUSTOM_COMMIT_MSG` | string | `\"\"` | Custom commit message |\n| `SEND_EMAIL` | bool | `False` | Enable email notifications |\n| `EMAIL_TO` / `EMAIL_FROM` | string | — | Email addresses |\n| `EMAIL_PASSWORD` | string | — | Gmail app password |\n| `SMTP_SERVER` | string | `smtp.gmail.com` | SMTP server |\n| `SMTP_PORT` | int | `465` | SMTP port |\n| `TELEGRAM_BOT_TOKEN` | string | — | Telegram bot token |\n| `TELEGRAM_CHAT_ID` | string | — | Telegram chat ID |\n\n---\n\n## 📦 Supported Formats\n\n| Format | Extension | Library |\n|--------|-----------|---------|\n| ZIP | `.zip` | `zipfile` (stdlib) |\n| Tarball | `.tar.gz`, `.tgz` | `tarfile` (stdlib) |\n| Bzip2 | `.bz2` | `tarfile` (stdlib) |\n| XZ | `.xz` | `tarfile` (stdlib) |\n| 7-Zip | `.7z` | `py7zr` |\n| RAR | `.rar` | `rarfile` |\n\n---\n\n## 🔬 How It Works\n\n```\n📱 Phone → 📤 Upload → 📂 Extract → 📋 Copy → 💾 Commit → 🚀 Push → 🔗 GitHub\n```\n\n1. **Upload**: Colab's `files.upload()` opens native file picker (works on iOS/Android)\n2. **Validate**: Checks archive integrity and detects zip bombs\n3. **Extract**: Extracts with junk file exclusion and path traversal protection\n4. **Clone**: GitPython clones the target repo using your token\n5. **Copy**: Files are recursively copied to the repo\n6. **Commit**: Changes committed with your message or watermark\n7. **Push**: Code pushed to GitHub (force-push optional)\n8. **QR**: QR code generated for easy sharing\n9. **Notify**: Email/Telegram notification sent\n10. **Cleanup**: Temp files deleted\n\n---\n\n## 🆘 Troubleshooting\n\n| Issue | Solution |\n|-------|----------|\n| Repository not found | Auto-created if missing. Ensure token has `repo` scope. |\n| Authentication failed | Token is invalid or expired. Generate a new one. |\n| Push failed | Try `OVERWRITE_BRANCH = False` to create a new branch. |\n| Upload button doesn't appear | Re-run the configuration cell. |\n| Extraction failed | Archive may be corrupted. Try re-downloading it. |\n| Email not sending | Use App Password, not regular password. Enable 2FA. |\n| Telegram not working | Verify token \u0026 chat ID. Send `/start` to bot first. |\n| Large file fails | GitHub API limit: 100MB per file. |\n\n---\n\n## ❓ FAQ\n\n**Is it free?** Yes — GitHub free repos + Colab free tier.\n\n**What formats are supported?** `.zip`, `.tar.gz`, `.tgz`, `.7z`, `.rar`, `.bz2`, `.xz`\n\n**Can I upload folders?** Zip them first, then upload the zip.\n\n**Can I create private repos?** Yes — set `PRIVATE_REPO = True`.\n\n**What files get excluded?** `__pycache__`, `.git`, `node_modules`, `.DS_Store`, `Thumbs.db`, `.env`, `*.pyc`, `*.swp`\n\n**Can I use a custom commit message?** Yes — set `CUSTOM_COMMIT_MSG`.\n\n**How do I get Telegram notifications?** Create a bot via [@BotFather](https://t.me/botfather), get your chat ID from [@userinfobot](https://t.me/userinfobot).\n\n---\n\n## 📄 License\n\nThis project is licensed under the **MIT License** — see the [LICENSE](LICENSE) file.\n\n\u003e [!WARNING]\n\u003e GitUnzip is for personal, legitimate use only. Respect GitHub's Terms of Service.\n\n---\n\n## 🙏 Credits\n\n[Google Colab](https://colab.research.google.com/) · [GitHub](https://github.com) · [GitPython](https://gitpython.readthedocs.io/) · [tqdm](https://tqdm.github.io/) · [py7zr](https://pypi.org/project/py7zr/) · [qrcode](https://pypi.org/project/qrcode/)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Copyright [Shinei Nouzen](https://github.com/Shineii86) All Rights Reserved.**\n\n*Made with ❤️ for mobile developers*\n\n[![Telegram](https://img.shields.io/badge/-Telegram-2CA5E0?style=flat\u0026logo=Telegram\u0026logoColor=white)](https://telegram.me/Shineii86)\n[![Instagram](https://img.shields.io/badge/-Instagram-C13584?style=flat\u0026logo=Instagram\u0026logoColor=white)](https://instagram.com/ikx7.a)\n[![Gmail](https://img.shields.io/badge/-Gmail-D14836?style=flat\u0026logo=Gmail\u0026logoColor=white)](mailto:ikx7a@hotmail.com)\n\n⭐ [Star this repo](https://github.com/Shineii86/GitUnzip) · 🐛 [Report issue](https://github.com/Shineii86/GitUnzip/issues) · 🔧 [Contribute](https://github.com/Shineii86/GitUnzip/fork)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshineii86%2Fgitunzip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshineii86%2Fgitunzip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshineii86%2Fgitunzip/lists"}