# ⚡ GitVault Pro — Web GitHub Manager & Sync

<p align="center">
  <img src="https://img.shields.io/badge/GitHub%20API-v3-2ea043?style=for-the-badge&logo=github" alt="GitHub API">
  <img src="https://img.shields.io/badge/JavaScript-Vanilla%20ES6+-yellow?style=for-the-badge&logo=javascript" alt="JavaScript">
  <img src="https://img.shields.io/badge/UI-Glassmorphism-green?style=for-the-badge" alt="Glassmorphism">
  <img src="https://img.shields.io/badge/License-MIT-blue?style=for-the-badge" alt="License">
</p>

**GitVault Pro** הוא כלי דפדפן (Client-side) מתקדם, קל משקל ומעוצב, המאפשר לנהל, לסנכרן, להעלות קבצי ZIP ולהוריד מאגרים מ-**GitHub** ישירות מהדפדפן (מותאם במיוחד לעבודה מהטלפון הנייד או ממחשבים ללא Git מותקן).

---

## ✨ תכונות עיקריות

- 🚀 **העלאת ZIP וקמיט מהיר:** פריקת קבצי ZIP והעלאתם כקומיט יחיד ונקי ישירות לריפו.
- ⚡ **העלאה מקבילית (Concurrent Uploads):** העלאת קבצים מרובים באצוות (Chunks) מבוססות `Promise.all` למהירות מירבית.
- 🧠 **דילוג על קבצים ללא שינוי:** לפני ההעלאה, הכלי מחשב מקומית (בדפדפן, ללא העלאה) את ה-SHA של כל קובץ ומשווה אותו לגרסה שכבר בריפו — קבצים זהים פשוט לא מועלים, מה שחוסך זמן ובקשות API בדחיפות חוזרות על אותו תוכן.
- 🛡️ **זיהוי התנגשויות (Conflicts):** הדחיפה תמיד נבנית על הגרסה העדכנית ביותר של הברנץ' ברגע הדחיפה עצמה; אם מישהו אחר דחף במקביל ממש באותו רגע, הכלי מזהה זאת ומסביר בדיוק מה קרה במקום להיכשל בשקט.
- ✅ **ולידציה לשם ברנץ':** בדיקה מיידית (לפני תחילת ההעלאה!) שהשם תקין לפי כללי Git — מונע מצב של דחיפת מאות קבצים שנכשלת בסוף בגלל שם לא חוקי.
- ➕ **יצירת Repository חדש:** פתיחת מאגר פרטי או ציבורי חדש ב-GitHub בלחיצת כפתור ישירות מהממשק.
- ⬇️ **הורדת הריפו הקיים:** שחזור הריפו הנבחר כקובץ ZIP, בנוי מחדש בדפדפן דרך ה-Git Data API (כולל תמיכה במאגרים פרטיים).
- 🌲 **תצוגת עץ (Tree View):** סייר קבצים היררכי המציג את מבנה התיקיות לפני הביצוע, עם אפשרות לבחירת קבצים ספציפיים.
- 🔍 **סינון קבצים חכם (Ignore Patterns):** הגדרת תבניות להתעלמות מקבצים (כגון `node_modules/`, `*.map`, `.DS_Store`).
- 🔀 **תמיכה ב-Pull Requests:** אפשרות ליצירת קומיט ישיר לברנץ' הבסיס או פתיחת ברנץ' חדש ו-PR אוטומטית.
- 💾 **שמירה מקומית (LocalStorage):** שמירה בטוחה של הטוקן וההגדרות בדפדפן לעבודה שוטפת ונוחה.
- 📊 **מחוון API Rate Limit:** מעקב בזמן אמת אחר מגבלת הקריאות הנותרות ב-Personal Access Token שלך.
- 🎨 **עיצוב Glassmorphism מודרני:** ממשק זכוכית ירוק כהה ועז, רספונסיבי ומותאם באופן מלא למכשירים ניידים.

---

## 🛠️ איך משתמשים?

1. **הזנת הטוקן:** הזינו **Personal Access Token** מ-GitHub עם הרשאת `repo`.
2. **טעינת / יצירת מאגר:**
   - לחצו על **"טען פרויקטים"** ובחרו את המאגר המבוקש.
   - או לחצו על **"＋ חדש"** כדי לפתוח Repository חדש ב-GitHub.
3. **בחירת קבצים:** גלגלו קובץ ZIP או קבצים בודדים לאזור ההעלאה.
4. **ביצוע הקומיט:** הזינו הודעת קומיט ולחצו על **"דחיפה ל-GitHub"**.

---

## 🔒 אבטחה ופרטיות

- **100% Client-Side:** הקוד רץ כולו בדפדפן שלכם. הטוקן האישי אינו נשלח לשום שרת צד-שלישי מלבד ה-API הרשמי של GitHub (`api.github.com`).
- **אחסון מקומי:** הטוקן נשמר ב-`localStorage` של הדפדפן שלכם בלבד.

---

## ⚠️ מגבלות ידועות

- **סינון קבצים (Ignore Patterns):** מדובר בהתאמת מחרוזת פשוטה, לא מימוש מלא של תחביר `.gitignore` — אין תמיכה בתבניות `!שלילה`, ב-`**`, או בעוגן יחסי לתיקייה. מספיק לרוב המקרים הנפוצים (`node_modules/`, `*.map` וכו'), אך לא מזהה כל תבנית תקנית.
- **מחיקת קבצים:** קבצים שנמצאים בריפו אבל לא נבחרו בהעלאה **לא נמחקים** — הכלי רק מוסיף/מעדכן.
- **טוקן ב-localStorage:** לנוחות, הטוקן נשמר בדפדפן ונטען אוטומטית בכניסה הבאה. מכיוון שהדף מפורסם בפומבי, מומלץ להשתמש בטוקן עם הרשאות מצומצמות לריפו ספציפי ותוקף קצר, ולנקות אותו מה-localStorage אם המכשיר משותף.

## 📝 שינויים אחרונים

- נוספה ולידציה חיה לשם ברנץ' (לפני תחילת ההעלאה) — מונעת דחיפות שנכשלות בסוף בגלל שם לא חוקי.
- נוספה דילוג אוטומטי על קבצים שלא השתנו (השוואת SHA מקומית מול הריפו) — חוסך זמן והעלאות מיותרות.
- נוספה זיהוי התנגשות (non-fast-forward) בעדכון הברנץ', עם הודעה ברורה והנחיה לנסות שוב.
- תוקנה הורדת ה-ZIP של הריפו: זיפבול של GitHub לא נתמך ב-CORS מהדפדפן ולכן תמיד נכשל — עכשיו ה-ZIP נבנה מחדש בדפדפן מתוך ה-Git Data API.
- תוקן רגקס שבור בשדה "תיקיית יעד" שמנע הסרת `/` מיותרים.
- הוחזרה בדיקת ולידציה שמזהירה כשבוחרים PR בלי למלא שם ברנץ'.
- נוספה הגנת HTML-escaping לשמות קבצים בעץ הקבצים.

## 📄 רישיון

פרויקט זה מופץ תחת רישיון MIT — ראו את הקובץ [LICENSE](./LICENSE).