GitHub Sync सेटअप
अध्याय 38: GitHub Sync सेटअप
GitHub Sync आपके SeaMeet कार्यस्थान को एक निजी, संस्करण-नियंत्रित Markdown ट्री में बदल देता है जो आपकी अपनी GitHub रिपॉजिटरी में रहता है। हर बार जब आप एक नोट संपादित करते हैं, एक रिकॉर्डिंग का नाम बदलते हैं, या एक wiki पृष्ठ को tweak करते हैं, SeaMeet चुपचाप पृष्ठभूमि में परिवर्तन को कमिट करता है और इसे GitHub पर पुश करता है। एक अलग लैपटॉप पर SeaMeet खोलें और आपके नोट्स पहले लॉन्च पर खींच लिए जाते हैं — बीच में कोई Dropbox नहीं, लूप में कोई Seasalt सर्वर नहीं। रिपो आपकी है, डेटा आपका है, और यदि आप कभी चाहें तो आप इसे सीधे github.com पर ब्राउज़ कर सकते हैं।
मॉडल सरल है: आपकी GitHub रिपॉजिटरी संग्रहण है। SeaMeet एक सिंक सेवा नहीं चलाता है। यह आपके खाते पर एक छोटा GitHub App स्थापित करता है, एक प्रति-उपयोगकर्ता OAuth टोकन प्राप्त करता है, और सीधे Git कमिट को पुश और पुल करने के लिए उस टोकन का उपयोग करता है। चूँकि संग्रहण GitHub का मुफ्त टियर है — जो आपको असीमित निजी रिपो देता है — सिंक प्रभावी रूप से मुफ्त है। और चूँकि प्रत्येक SeaMeet कार्यस्थान अपनी रिपॉजिटरी है, आप कार्य और व्यक्तिगत कार्यस्थानों को पूरी तरह से अलग रख सकते हैं।
अध्याय के उद्देश्य
इस अध्याय को पढ़ने के बाद, आप यह करने में सक्षम होंगे:
- अपने खाते या संगठन पर SeaMeet GitHub App स्थापित करें
- OAuth पर SeaMeet को अधिकृत करें और इसे आपके लिए एक निजी सिंक रिपॉजिटरी बनाने दें
- सिंक स्थिति बार पढ़ें और सि ंक स्टेट मशीन में प्रत्येक स्थिति को समझें
- पहचानें जब OAuth पृष्ठभूमि में ऑटो-रिफ्रेश हुआ है और जब आपको मैन्युअल रूप से फिर से अधिकृत करने की आवश्यकता है
- एक सिंक संघर्ष को हल करें जब एक ही नोट को दो डिवाइसों पर संपादित किया गया हो
- Sync सेटिंग्स पैनल को ट्यून करें (auto-sync, sync interval, sync on startup)
- सबसे आम विफलता मोडों का निवारण करें
पूर्वापेक्षाएँ
शुरू करने से पहले, सुनिश्चित करें कि आपके पास है:
- एक GitHub खाता — मुफ्त टियर ठीक है; आपको GitHub Pro की आवश्यकता नहीं है
- एक सक्रिय सिंक एंटाइटलमेंट — BYOK Pro और Sync Pro टियर के साथ शामिल। यदि आपका billing tier सिंक शामिल नहीं करता है, तो Sync सेटिंग्स स्क्रीन एक "Subscribe to enable sync" बैनर दिखाएगी। प्लान विवरण के लिए अध्याय 35: सदस्यता और बिलिंग देखें।
- SeaMeet में एक कार्यस्थान खुला — सिंक सक्रिय कार्यस्थान से जुड़ता है, पूरे ऐप से नहीं। यदि आपके पास कई कार्यस्थान हैं, तो प्रत्येक अपनी GitHub रिपॉजिटरी है।
- काम कर रहा इंटरनेट एक्सेस — सेटअप प्रवाह आपके डिफ़ॉल्ट ब्राउज़र में GitHub खोलता है
प्रति कार्यस्थान एक रिपो। SeaMeet प्रत्येक कार्यस्थान के लिए एक अलग निजी रिपॉजिटरी बनाता है जिसे आप कनेक्ट करते हैं। यह कार्य नोट्स और व्यक्तिगत नोट्स को साफ़-सुथरा अलग रखता है और इसका मतलब है कि आप एक को दूसरे को छुए बिना डिस्कनेक्ट कर सकते हैं।
चरण-दर-चरण सेटअप
पहली बार सेटअप में लगभग 90 सेकंड लगते हैं: GitHub पर SeaMeet को अधिकृत करें, इसे आपकी रिपो बनाने दें, प्रारंभिक अपलोड की प्रतीक्षा करें, और आप पूर्ण हैं।
चरण 1: Sync सेटिंग्स खोलें
- सेटिंग्स गियर आइकन क्लिक करें
- बाएँ रेल में Sync टैब खोलें
- आप "Sync with GitHub" हेडर कार्ड देखेंगे
यदि आप Sync टैब नहीं देखते हैं, तो आपका सदस्यता स्तर सिंक शामिल नहीं करता है — अपग्रेड करने के लिए अध्याय 35 देखें।
यदि आप एक बैनर देखते हैं जो पढ़ता है "Back up your notes to a private GitHub repo with BYOK Pro", आपके पास एक मुफ्त खाता है। paywall खोलने के लिए बैनर पर क्लिक करें, या जब तक आप सब्सक्राइब नहीं करते तब तक इस अध्याय के बाकी हिस्से को छोड़ दें।
चरण 2: "Set Up GitHub Sync" क्लिक करें
Sync सेटिंग्स खाली स्थिति तीन benefit tiles ("Free & private", "Effectively unlimited", "One repo per workspace") और नीचे एक प्राथमिक Set Up GitHub Sync बटन दिखाती है।
इसे क्लिक करें। आपका डिफ़ॉल्ट ब्राउज़र एक GitHub authorization page पर खुलता है।
चरण 3: SeaMeet GitHub App स्थापित करें (एक बार)
पहली बार जब आप SeaMeet को अधिकृत करते हैं, GitHub आपसे SeaMeet GitHub App को अपने खाते पर स्थापित करने के लिए कहेगा। यह प्रति GitHub खाते (या प्रति संगठन, यदि आप एक org-स्वामित्व वाले रिपो में सिंक करना चाहते हैं) एक बार का चरण है।
GitHub install page पर:
- खाता या संगठन चुनें जिसमें आप SeaMeet को लिखने देना चाहते हैं
- "All repositories" या "Only select repositories" चुनें — SeaMeet App को आपकी ओर से सिंक रिपो बनाने के लिए
contents: writeऔरadministration: writeअनुमतियों की आवश्यकता है - Install & Authorize क्लिक करें
GitHub आपको SeaMeet पर वापस उछालता है। Sync सेटिंग्स पैनल अब दिखाता है:
┌──────────────────────────────────────────────────────┐
│ ✓ Authorized │
│ ⟳ Creating repository & uploading... │
└──────────────────────────────────────────────────────┘
एक GitHub App क्यों और एक सादा OAuth टोकन नहीं? GitHub Apps में सूक्ष्म-स मय प्रति-रिपो अनुमतियाँ और घूर्णन refresh tokens हैं। SeaMeet के पास हमेशा केवल उन रिपो को लिखने का एक्सेस होता है जिन्हें आपने स्पष्ट रूप से चुना था, और OAuth access token हर 8 घंटे में समाप्त हो जाता है — भले ही यह लीक हो जाए, विंडो छोटी होगी। (देखें कि SeaMeet इसे आपको कैसे अदृश्य रखता है इसके लिए नीचे OAuth Auto-Refresh अनुभाग देखें।)
चरण 4: रिपॉजिटरी निर्माण (स्वचालित)
SeaMeet अब आपकी ओर से GitHub API को कॉल करता है और:
- आपके कार्यस्थान के नाम पर एक निजी रिपो बनाता है (जैसे
seameet-work-notes) - यदि एक पहले से मौजूद नहीं है तो आपके कार्यस्थान फ़ोल्डर के अंदर एक स्थानीय Git रिपो आरंभ करता है
git initचलाता है, एक.gitignoreलिखता है जो audio/video/screenshot फ़ाइलों को बाहर करता है, और एक प्रारंभिक कमिट करता है- नई GitHub रिपो को
originके रूप में जोड़ता है - प्रारंभिक कमिट को पुश करता है
आप साइडबार के नीचे स्थिति बार को इसके माध्यम से संक्रमित होते देखेंगे:
Creating repository... → Syncing... → Synced · just now
बस इतना ही। आपका कार्यस्थान अब GitHub द्वारा समर्थित है।
चरण 5: पहला सिंक स्वचालित रूप से चलता है
अब से, SeaMeet हर 5 मिनट (डिफ़ॉल्ट रूप से) ऑटो-कमिट करता है जब भी आपके पास unsaved changes होते हैं, और प्रत्येक कमिट के तुरंत बाद GitHub पर पुश करता है। SeaMeet के अगले लॉन्च पर, ऐप संपादन शुरू करने से पहले ही GitHub से खींचता है — इसलिए किसी अन्य डिवाइस पर किए गए परिवर्तन ऐप खुलते ही दिखाई देते हैं।
सिंक स्टेट मशीन
SeaMeet का SyncManager एक छोटी स्टेट मशीन चलाता है और अपनी वर्तमान स्थिति को renderer पर प्रसारित करता है। साइडबार SyncStatusBar और Sync सेटिंग्स पैनल दोनों इस स्थिति से पढ़ते हैं। स्थितियों को समझना आपको UI को सटीक रूप से पढ़ने में मदद करता है।
┌─────────────┐
│ idle │ ◄──────┐
└──────┬──────┘ │
│ file change │
▼ │
┌─────────────┐ │
┌────►│ pending │ │
│ └──────┬──────┘ │
file │ │ commit timer │
change │ ▼ │
│ ┌─────────────┐ │
│ │ committing │ │
│ └──────┬──────┘ │
│ ▼ │
│ ┌─────────────┐ │
│ │ pushing │ │
│ └──────┬──────┘ │
│ ▼ │
│ ┌─────────────┐ │
│ │ synced │── 5s ──┘
│ └─────────────┘
│
│ ┌─────────────┐
├─────┤ pulling │ (startup or push-rejected)
│ └─────────────┘
│
│ ┌─────────────┐
├─────┤ conflict │ → user resolves → syncing → synced
│ └─────────────┘
│
│ ┌─────────────┐
├─────┤ offline │ → network back → retry
│ └─────────────┘
│
│ ┌─────────────┐
├─────┤ timeout │ → user clicks Retry
│ └─────────────┘
│
│ ┌────────────────┐
└─────┤ token-expired │ → re-authorize card
└────────────────┘
यहाँ UI में प्रत्येक स्थिति का क्या मतलब है:
| स्थिति | स्थिति बार लेबल | इसका क्या मतलब है |
|---|---|---|
| idle | "Synced · 2 min ago" | कुछ लंबित नहीं, अंतिम कमिट साफ़ था |
| pending | "Pending..." | आपके पास unsaved changes हैं; कमिट टाइमर अगले अंतराल पर चलेगा |
| committing | "Syncing..." | एक Git कमिट स्थानीय रूप से चल रहा है |
| pushing | "Pushing..." | स्थानीय कमिट पूर्ण; GitHub पर पुश कर रहा है |
| pulling | "Pulling..." | या तो startup sync, या पुश को अस्वीकार किया गया और हम पहले खींच रहे हैं |
| syncing | "Syncing..." | संघर्ष समाधान के बाद एक rebase समाप्त कर रहा है |
| synced | "Synced · just now" | अभी-अभी पूर्ण हुई सफलता; 5 सेकंड के लिए दिखाया जाता है, फिर idle पर वापस आता है |
| conflict | "Sync conflict" | स्थानीय और रिमोट दोनों ने एक ही फ़ाइल को संपादित किया। UI संघर्ष समाधान प्रवाह को दिखाता है। |
| error | "Sync error" | एक गैर-नेटवर्क, गैर-संघर्ष विफलता (जैसे git विफलता)। 5 बार तक exponential backoff के साथ ऑटो-रिट्रीज़ करता है। |
| offline | "Offline" | नेटवर्क पहुँच से बाहर। अगले फ़ाइल परिवर्तन पर या 60 सेकंड के बाद फिर से प्रयास करेगा। |
| timeout | "Sync timed out" | एक git कमांड 60 सेकंड से अधिक समय लिया (नीचे Sync Timeout Protection देखें) |
| token-expired | "Re-authorize" | OAuth रिफ्रेश विफल हो गया और उपयोगकर्ता को मैन्युअल रूप से फिर से अधिकृत करना होगा |
| installing-app | "Installing GitHub App..." | उपयोगकर्ता को अपने ब्राउज़र में GitHub App install चरण समाप्त करने की प्रतीक्षा कर रहा है |
| creating-repo | "Creating repository..." | सेटअप प्रवाह GitHub रिपो बना रहा है और प्रारंभिक कमिट को पुश कर रहा है |
यदि स्थिति बार एक स्पिनर दिखा रहा है, तो यह सामान्य पृष्ठभूमि गतिविधि है। यदि यह amber या लाल है, तो नीचे समस्या निवारण अनुभाग देखें।
OAuth ऑटो-रिफ्रेश
GitHub Apps user access tokens जारी करते हैं जो हर 8 घंटे में समाप्त हो जाते हैं, साथ ही एक refresh token जो 6 महीने के लिए मान्य है। SeaMeet आपके लिए इसे प्रबंधित करता है ताकि आपको लगभग कभी इसके बारे में सोचने की आवश्यकता न पड़े।
यह कैसे काम करता है:
- जब SeaMeet पुश या पुल करने वाला होता है,
SyncManager._refreshTokenIfNeeded()जाँचता है कि क्या वर्तमान टोकन अगले 5 मिनट के भीतर समाप्त हो जाता है। - यदि हाँ, SeaMeet संग्रहीत refresh token के साथ GitHub के
/login/oauth/access_tokenendpoint को कॉल करता है। GitHub एक नया access token लौटाता है और refresh token को घुमाता है। SeaMeet दोनों को डिस्क पर encrypted token file में वापस लिखता है। - Git कमांड फिर ताज़ा-रिफ्रेश किए गए टोकन के साथ चलता है। आप स्क्रीन पर कुछ नहीं देखते हैं — पूरा रिफ्रेश एक सेकंड से कम में होता है।
क्षणिक विफलता हैंडलिंग: यदि रिफ्रेश कॉल विफल हो जाता है क्योंकि नेटवर्क ख़राब है या GitHub ने 5xx (एक REFRESH_NETWORK_ERROR) लौटाया, तो SeaMeet मौजूदा टोकन को