SeaMeet Desktop hadir — Rekam segalanya, jangan lewatkan apa pun. Unduh gratis →

Pengaturan Sinkronisasi GitHub

Bab 38: Pengaturan Sinkronisasi GitHub

Sinkronisasi GitHub mengubah ruang kerja SeaMeet Anda menjadi pohon Markdown pribadi dan dikendalikan versi yang tinggal di repositori GitHub Anda sendiri. Setiap kali Anda mengedit catatan, mengganti judul perekaman, atau menyesuaikan halaman wiki, SeaMeet diam-diam mengomit perubahan di latar belakang dan mendorongnya ke GitHub. Buka SeaMeet di laptop berbeda dan catatan Anda tertarik turun pada peluncuran pertama — tidak ada Dropbox di tengah, tidak ada server Seasalt dalam loop. Repo adalah milik Anda, data adalah milik Anda, dan Anda dapat menelusurinya langsung di github.com jika Anda ingin.

Modelnya sederhana: repositori GitHub Anda adalah penyimpanan. SeaMeet tidak menjalankan layanan sinkronisasi. Itu memasang Aplikasi GitHub kecil di akun Anda, mendapatkan token OAuth per pengguna, dan menggunakan token itu untuk mendorong dan menarik komit Git secara langsung. Karena penyimpanan adalah tingkat gratis GitHub — yang memberi Anda repo pribadi tak terbatas — sinkronisasi secara efektif gratis. Dan karena setiap ruang kerja SeaMeet adalah repositorinya sendiri, Anda dapat menjaga ruang kerja kerja dan pribadi terpisah sepenuhnya.


Tujuan Bab

Setelah membaca bab ini, Anda akan dapat:

  • Memasang Aplikasi GitHub SeaMeet di akun atau organisasi Anda
  • Mengotorisasi SeaMeet melalui OAuth dan membiarkannya membuat repositori sinkronisasi pribadi untuk Anda
  • Membaca bilah status sinkronisasi dan memahami setiap status dalam mesin status sinkronisasi
  • Mengenali kapan OAuth telah diperbarui otomatis di latar belakang dan kapan Anda perlu mengotorisasi ulang secara manual
  • Menyelesaikan konflik sinkronisasi saat catatan yang sama telah diedit di dua perangkat
  • Menyesuaikan panel Pengaturan Sinkronisasi (sinkronisasi otomatis, interval sinkronisasi, sinkronisasi saat startup)
  • Memecahkan masalah mode kegagalan paling umum

Prasyarat

Sebelum Anda mulai, pastikan Anda memiliki:

  • Akun GitHub — tingkat gratis baik-baik saja; Anda tidak memerlukan GitHub Pro
  • Hak sinkronisasi aktif — termasuk dengan tingkat BYOK Pro dan Sync Pro. Jika tingkat penagihan Anda tidak menyertakan sinkronisasi, layar Pengaturan Sinkronisasi akan menampilkan spanduk "Berlangganan untuk mengaktifkan sinkronisasi". Lihat Bab 35: Langganan & Tagihan untuk detail paket.
  • Ruang kerja terbuka di SeaMeet — sinkronisasi melekat pada ruang kerja aktif, bukan aplikasi secara keseluruhan. Jika Anda memiliki beberapa ruang kerja, masing-masing adalah repositori GitHub-nya sendiri.
  • Akses internet yang berfungsi — alur pengaturan membuka GitHub di browser default Anda

Satu repo per ruang kerja. SeaMeet membuat repositori pribadi terpisah untuk setiap ruang kerja yang Anda hubungkan. Ini menjaga catatan kerja dan catatan pribadi terpisah dengan bersih dan berarti Anda dapat memutuskan koneksi satu tanpa menyentuh yang lain.


Pengaturan Langkah demi Langkah

Pengaturan pertama kali memakan waktu sekitar 90 detik: otorisasi SeaMeet di GitHub, biarkan ia membuat repo Anda, tunggu unggahan awal, dan Anda selesai.

Langkah 1: Buka Pengaturan Sinkronisasi

  1. Klik ikon roda gigi Pengaturan
  2. Buka tab Sync di rel kiri
  3. Anda akan melihat kartu header "Sinkronisasi dengan GitHub"

Jika Anda tidak melihat tab Sync, tingkat langganan Anda tidak menyertakan sinkronisasi — lihat Bab 35 untuk upgrade.

Jika Anda melihat spanduk yang berbunyi "Cadangkan catatan Anda ke repo GitHub pribadi dengan BYOK Pro", Anda memiliki akun gratis. Klik spanduk untuk membuka paywall, atau lewati sisa bab ini sampai Anda berlangganan.

Langkah 2: Klik "Atur Sinkronisasi GitHub"

Status kosong Pengaturan Sinkronisasi menampilkan tiga ubin manfaat ("Gratis & pribadi", "Efektif tak terbatas", "Satu repo per ruang kerja") dan tombol utama Atur Sinkronisasi GitHub di bagian bawah.

Klik itu. Browser default Anda terbuka ke halaman otorisasi GitHub.

Langkah 3: Pasang Aplikasi GitHub SeaMeet (sekali)

Pertama kali Anda mengotorisasi SeaMeet, GitHub akan meminta Anda memasang Aplikasi GitHub SeaMeet di akun Anda. Ini adalah langkah satu kali per akun GitHub (atau per organisasi, jika Anda ingin menyinkronkan ke repo yang dimiliki organisasi).

Di halaman instalasi GitHub:

  1. Pilih akun atau organisasi yang Anda ingin SeaMeet menulis ke
  2. Pilih "Semua repositori" atau "Hanya pilih repositori" — Aplikasi SeaMeet memerlukan izin contents: write dan administration: write sehingga dapat membuat repo sinkronisasi atas nama Anda
  3. Klik Pasang & Otorisasi

GitHub memantulkan Anda kembali ke SeaMeet. Panel Pengaturan Sinkronisasi sekarang menunjukkan:

┌──────────────────────────────────────────────────────┐
│   ✓ Diotorisasi                                      │
│   ⟳ Membuat repositori & mengunggah...               │
└──────────────────────────────────────────────────────┘

Mengapa Aplikasi GitHub dan bukan token OAuth biasa? Aplikasi GitHub memiliki izin per-repo yang halus dan token penyegaran berputar. SeaMeet hanya pernah memiliki akses tulis ke repo yang Anda pilih secara eksplisit, dan token akses OAuth kedaluwarsa setiap 8 jam — bahkan jika bocor, jendela akan kecil. (Lihat bagian OAuth Auto-Refresh di bawah untuk bagaimana SeaMeet menjaga itu tetap tak terlihat bagi Anda.)

Langkah 4: Pembuatan repositori (otomatis)

SeaMeet sekarang memanggil API GitHub atas nama Anda dan:

  1. Membuat repo pribadi yang dinamai sesuai ruang kerja Anda (mis. seameet-work-notes)
  2. Menginisialisasi repo Git lokal di dalam folder ruang kerja Anda jika belum ada
  3. Menjalankan git init, menulis .gitignore yang mengecualikan file audio/video/tangkapan layar, dan membuat komit awal
  4. Menambahkan repo GitHub baru sebagai origin
  5. Mendorong komit awal

Anda akan melihat bilah status di bagian bawah sidebar bertransisi melalui:

Membuat repositori...  →  Menyinkronkan...  →  Disinkronkan · baru saja

Itu saja. Ruang kerja Anda sekarang didukung oleh GitHub.

Langkah 5: Sinkronisasi pertama berjalan otomatis

Mulai sekarang, SeaMeet mengomit otomatis setiap 5 menit (secara default) setiap kali Anda memiliki perubahan yang belum disimpan, dan mendorong ke GitHub segera setelah setiap komit. Pada peluncuran SeaMeet berikutnya, aplikasi menarik dari GitHub bahkan sebelum Anda mulai mengedit — sehingga perubahan yang dibuat di perangkat lain muncul saat aplikasi dibuka.


Mesin Status Sinkronisasi

SyncManager SeaMeet menjalankan mesin status kecil dan menyiarkan status saat ini ke renderer. SyncStatusBar sidebar dan panel Pengaturan Sinkronisasi keduanya membaca dari status ini. Memahami status membantu Anda membaca UI dengan akurat.

                      ┌─────────────┐
                      │    idle     │ ◄──────┐
                      └──────┬──────┘        │
                             │ perubahan file│
                             ▼               │
                      ┌─────────────┐        │
                ┌────►│   pending   │        │
                │     └──────┬──────┘        │
       perubahan│            │ timer komit   │
       file     │            ▼               │
                │     ┌─────────────┐        │
                │     │ committing  │        │
                │     └──────┬──────┘        │
                │            ▼               │
                │     ┌─────────────┐        │
                │     │   pushing   │        │
                │     └──────┬──────┘        │
                │            ▼               │
                │     ┌─────────────┐        │
                │     │   synced    │── 5s ──┘
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   pulling   │  (startup atau push ditolak)
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤  conflict   │  → pengguna selesaikan → syncing → synced
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   offline   │  → jaringan kembali → coba lagi
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   timeout   │  → pengguna klik Coba Ulang
                │     └─────────────┘
                │
                │     ┌────────────────┐
                └─────┤ token-expired  │ → kartu otorisasi ulang
                      └────────────────┘

Berikut yang dimaksud setiap status di UI:

StatusLabel bilah statusApa artinya
idle"Disinkronkan · 2 menit lalu"Tidak ada yang menunggu, komit terakhir bersih
pending"Menunggu..."Anda memiliki perubahan yang belum disimpan; timer komit akan menyala pada interval berikutnya
committing"Menyinkronkan..."Komit Git sedang berlangsung secara lokal
pushing"Mendorong..."Komit lokal selesai; mendorong ke GitHub
pulling"Menarik..."Baik sinkronisasi startup, atau push ditolak dan kami menarik terlebih dahulu
syncing"Menyinkronkan..."Menyelesaikan rebase setelah resolusi konflik
synced"Disinkronkan · baru saja"Sukses yang baru selesai; ditampilkan selama 5 detik, lalu kembali ke idle
conflict"Konflik sinkronisasi"Lokal dan jarak jauh keduanya mengedit file yang sama. UI menampilkan alur resolusi konflik.
error"Kesalahan sinkronisasi"Kegagalan non-jaringan, non-konflik (mis. kegagalan git). Coba lagi otomatis dengan backoff eksponensial hingga 5 kali.
offline"Offline"Jaringan tidak dapat dijangkau. Akan mencoba lagi pada perubahan file berikutnya atau setelah 60 detik.
timeout"Sinkronisasi waktu habis"Perintah git memakan waktu lebih dari 60 detik (lihat Perlindungan Timeout Sinkronisasi di bawah)
token-expired"Otorisasi ulang"Penyegaran OAuth gagal dan pengguna harus mengotorisasi ulang secara manual
installing-app"Memasang Aplikasi GitHub..."Menunggu pengguna menyelesaikan langkah instalasi Aplikasi GitHub di browser mereka
creating-repo"Membuat repositori..."Alur pengaturan sedang membuat repo GitHub dan mendorong komit awal

Jika bilah status menunjukkan spinner, itu adalah aktivitas latar belakang normal. Jika berwarna amber atau merah, lihat bagian Pemecahan Masalah di bawah.


OAuth Auto-Refresh

Aplikasi GitHub mengeluarkan token akses pengguna yang kedaluwarsa setiap 8 jam, ditambah token penyegaran yang valid selama 6 bulan. SeaMeet mengelola ini untuk Anda sehingga Anda hampir tidak pernah harus memikirkannya.

Cara kerjanya:

  1. Saat SeaMeet akan mendorong atau menarik, SyncManager._refreshTokenIfNeeded() memeriksa apakah token saat ini kedaluwarsa dalam 5 menit berikutnya.
  2. Jika ya, SeaMeet memanggil endpoint /login/oauth/access_token GitHub dengan token penyegaran yang disimpan. GitHub mengembalikan token akses baru dan memutar token penyegaran. SeaMeet menulis keduanya kembali ke file token terenkripsi di disk.
  3. Perintah Git kemudian berjalan dengan token yang baru disegarkan. Anda tidak melihat apa pun di layar — seluruh penyegaran memakan waktu jauh di bawah satu detik.

Penanganan kegagalan sementara: Jika panggilan penyegaran gagal karena jaringan tidak stabil atau GitHub mengembalikan 5xx (REFRESH_NETWORK_ERROR), SeaMeet tidak membuang token yang ada. Sebaliknya, sinkronisasi masuk ke status offline dan mencoba lagi nanti. Ini penting karena token yang ada mungkin masih valid selama beberapa menit lagi — membuangnya pada blip jaringan sementara akan membuat Anda keluar dari sinkronisasi yang tidak perlu.

Penggabungan penyegaran bersamaan: GitHub memutar token penyegaran setiap kali Anda menggunakannya, sehingga dua penyegaran bersamaan akan berlomba dan satu akan membatalkan yang lain. SeaMeet menciutkan panggilan penyegaran bersamaan menjadi satu Promise dalam penerbangan (_refreshPromise) sehingga sinkronisasi-startup dan dorong-dengan-coba-ulang tidak pernah berebut token yang berputar.

Saat penyegaran benar-benar gagal: Jika GitHub mengembalikan REFRESH_TOKEN_EXPIRED — berarti token penyegaran 6 bulan telah kedaluwarsa atau dicabut — SeaMeet:

  1. Menghapus file token terenkripsi dari disk
  2. Memasuki status terminal token-expired
  3. Menampilkan kartu amber di Pengaturan Sinkronisasi:
┌──────────────────────────────────────────────────────┐
│ ⚠  Otorisasi GitHub telah kedaluwarsa. Silakan       │
│    otorisasi ulang untuk melanjutkan sinkronisasi.   │
│                                                       │
│  [ ↻ Otorisasi Ulang GitHub ]                         │
└──────────────────────────────────────────────────────┘

Klik Otorisasi Ulang GitHub. Anda dikirim kembali melalui alur OAuth — tetapi karena Aplikasi GitHub sudah dipasang, itu adalah satu klik untuk mengonfirmasi dan Anda selesai dalam sekitar 10 detik. SeaMeet kemudian melepaskan token basi apa pun dari git config lokal Anda (token lama mungkin tertanam di URL origin) sebelum dorong berikutnya, sehingga Anda tidak loop pada kredensial mati.


Perlindungan Timeout Sinkronisasi

Perintah Git dapat menggantung selamanya jika jaringan diam di tengah transfer — soket TCP mungkin duduk dalam status setengah terbuka tanpa pernah memunculkan kesalahan. SeaMeet membungkus setiap Git push dan pull dalam timeout AbortController 60 detik.

Jika push atau pull tidak selesai dalam 60 detik, SeaMeet:

  1. Membatalkan subproses git
  2. Memasuki status timeout
  3. Menampilkan kartu amber di Pengaturan Sinkronisasi:
┌──────────────────────────────────────────────────────┐
│ ⚠  Sinkronisasi waktu habis. Ini mungkin disebabkan  │
│    oleh masalah jaringan atau otorisasi GitHub yang  │
│    kedaluwarsa.                                       │
│                                                       │
│  [ ↻ Coba Ulang Sinkronisasi ] [ Otorisasi Ulang GitHub ]│
└──────────────────────────────────────────────────────┘

Coba Ulang Sinkronisasi menjalankan commitNow lagi. Ini adalah tombol yang tepat untuk diklik jika Anda pikir jaringan Anda baru saja terputus sebentar. Otorisasi Ulang GitHub menjalankan alur OAuth lagi; klik ini jika timeout terus berulang, yang biasanya berarti token Anda adalah masalahnya daripada jaringan.

Status kembali ke idle secara otomatis setelah sekitar 30 detik bahkan jika Anda tidak mengklik apa pun — sinkronisasi akan mencoba lagi pada perubahan file berikutnya.


Resolusi Konflik

Konflik terjadi saat file yang sama telah diedit di dua perangkat sejak sinkronisasi terakhir. Contoh: Anda menulis paragraf di meetings/2026-06-03-standup.md di laptop Anda, lalu mengedit paragraf yang sama di mesin teman. Saat perangkat kedua mendorong, GitHub menolak dorongan karena histori berbeda.

SeaMeet menangani ini dengan:

  1. Menarik perubahan jarak jauh dengan rebase
  2. Mendeteksi penanda konflik gabungan
  3. Memasuki status conflict
  4. Menampilkan konflik di bilah status sidebar (yang menjadi dapat diklik) dan di panel konflik Pengaturan Sinkronisasi

Mengklik bilah status saat sinkronisasi berada dalam conflict membuka Modal Resolusi Konflik:

┌──────────────────────────────────────────────────────────┐
│  ⚠  Konflik Sinkronisasi              1 / 2        [×]  │
├──────────────────────────────────────────────────────────┤
│                                                          │
│  "2026-06-03-standup.md" diubah di perangkat lain.       │
│                                                          │
│  ┌────────────────────────┐  ┌────────────────────────┐  │
│  │ ✎  Edit manual         │  │ ✦  Gabungan Agen       │  │
│  └────────────────────────┘  └────────────────────────┘  │
│                                                          │
└──────────────────────────────────────────────────────────┘

Anda memiliki dua opsi:

Edit manual — membuka file konflik di editor default sistem Anda dengan penanda standar Git <<<<<<< / ======= / >>>>>>> di tempat. Edit file untuk menyelesaikannya, simpan, lalu kembali ke SeaMeet dan klik Selesai. SeaMeet menyiapkan file yang diselesaikan dan melanjutkan rebase.

Gabungan Agen (hanya BYOK Pro, memerlukan Agen AI yang dikonfigurasi) — mengirim kedua versi ke Agen AI yang dikonfigurasi Anda (GitHub Copilot atau Claude Code, lihat Bab 36: Panduan Pengaturan BYOK) dan memintanya menghasilkan versi gabungan yang mempertahankan maksud kedua sisi. Output agen disiapkan secara otomatis; Anda akan melihat spinner "Menyelesaikan sinkronisasi..." saat rebase selesai.

Jika ada beberapa konflik sekaligus, modal menunjukkan penghitung (1 / 2, 2 / 2) dan panah chevron di panel konflik Pengaturan Sinkronisasi sehingga Anda dapat melangkahinya satu per satu.

Opsi "Simpan milik saya" / "Simpan milik mereka" / "Simpan keduanya" muncul sebagai pilihan alami saat Anda berada di dalam editor manual: tinggalkan hanya teks versi Anda di antara penanda, hanya teks versi jarak jauh, atau selingi keduanya. Tombol Gabungan Agen secara efektif melakukan "simpan keduanya, secara cerdas."

Bagaimana jika Anda membuat kesalahan? Konflik sinkronisasi bersifat non-destruktif. Git menyimpan konten asli "milik kami" dan "milik mereka" dalam indeks, dan getConflictVersions(filePath) dapat mengambil keduanya kapan saja selama resolusi. Anda tidak akan secara tidak sengaja kehilangan pekerjaan.


Panel Pengaturan Sinkronisasi

Setelah Anda terhubung, Pengaturan Sinkronisasi (Pengaturan → Sync) memberi Anda satu layar dengan semua dalam satu tempat:

┌─────────────────────────────────────────────────────────────┐
│  ✓ Sinkronisasi & Cadangan                                  │
│  Catatan dan wiki Anda secara otomatis disinkronkan ke      │
│  GitHub. Perekaman audio, perekaman video, dan tangkapan    │
│  layar tidak disinkronkan.                                  │
├─────────────────────────────────────────────────────────────┤
│  ⓘ  https://github.com/you/seameet-work-notes                │
│  🕒 Sinkronisasi terakhir: 4 menit lalu                      │
├─────────────────────────────────────────────────────────────┤
│  Sinkronisasi otomatis                          [ AKTIF ◉ ] │
│  Interval sinkronisasi                          [ 5 menit ▾]│
│  Cabang                                              main   │
│  Terakhir disinkronkan                        4 menit lalu  │
├─────────────────────────────────────────────────────────────┤
│  Sinkronisasi otomatis pada perubahan           [ AKTIF ◉ ] │
│  Sinkronisasi saat startup                      [ AKTIF ◉ ] │
├─────────────────────────────────────────────────────────────┤
│  [ ⤓ Sinkronkan Sekarang ]                                  │
├─────────────────────────────────────────────────────────────┤
│  [ ↗ Lihat di GitHub ]    [ Putuskan koneksi ]              │
└─────────────────────────────────────────────────────────────┘

Kontrol, dari atas ke bawah:

  • Sinkronisasi otomatis — toggle master untuk timer komit latar belakang. Tidak aktif berarti SeaMeet hanya mengomit saat Anda mengklik Sinkronkan Sekarang.
  • Interval sinkronisasi — seberapa sering timer komit menyala. Pilihan adalah 1 / 5 / 10 / 30 menit. Default adalah 5 menit. Interval 1 menit baik-baik saja untuk pencatatan aktif; 30 menit bagus untuk ruang kerja dengan sedikit pengeditan di mana Anda lebih suka komit batch.
  • Cabang — cabang Git tempat SeaMeet menyinkronkan. Hampir selalu main. Hanya-baca di UI.
  • Terakhir disinkronkan — stempel waktu relatif dari dorongan sukses terakhir.
  • Sinkronisasi otomatis pada perubahan — saat aktif, dorongan terjadi segera setelah setiap komit lokal (kasus tipikal). Saat tidak aktif, SeaMeet mengomit secara lokal tetapi hanya mendorong saat Anda mengklik Sinkronkan Sekarang. Berguna jika Anda ingin batch dorongan (mis. pada koneksi terukur).
  • Sinkronisasi saat startup — saat aktif, SeaMeet menarik dari GitHub pada saat aplikasi diluncurkan. Direkomendasikan kecuali Anda memiliki koneksi yang sangat lambat.
  • Sinkronkan Sekarang — paksa siklus komit-dan-dorong segera. Tidak menunggu timer. Berguna sebelum menutup laptop Anda.
  • Lihat di GitHub — membuka repo di browser Anda.
  • Putuskan koneksi — membersihkan token OAuth yang disimpan, menghapus file token terenkripsi, dan menghapus origin dari repo Git lokal Anda. File Markdown lokal dan histori Git Anda tidak tersentuh — hanya tautan ke GitHub yang diputus.

Apa yang Disinkronkan (dan Apa yang Tidak)

Ini didokumentasikan di indeks bagian, tetapi layak diulang di sini:

DisinkronkanTidak disinkronkan
Catatan (file .md)Perekaman audio (.webm, .mp3)
Halaman wiki (file .md)Perekaman video (.webm, .mp4)
Manifest perekaman (JSON metadata)Tangkapan layar (.png, .jpg)
Ringkasan dan transkrip AIPembuatan AI yang di-cache
Grafik wikilinkPengaturan aplikasi
.gitignoreStatus scratch editor

.gitignore yang ditulis SeaMeet mengecualikan semua kategori biner besar. Ini disengaja: repo pribadi gratis GitHub dibatasi pada 1 GB, dan video 30 menit akan menghabiskannya sendiri. SeaMeet menyimpan media di disk lokal Anda dan menyinkronkan hanya Markdown ringan.

Jika Anda ingin sinkronisasi media penuh, itu adalah tingkat Sync Pro — lihat Bab 35.


Pemecahan Masalah

"Otorisasi gagal" tepat setelah mengklik Atur Sinkronisasi GitHub

Penyebab dan perbaikan:

  • Pop-up blocker — jika tidak ada jendela browser yang terbuka, OS atau browser Anda mungkin telah memblokir peluncuran. Klik Atur Sinkronisasi GitHub lagi dan konfirmasi prompt pop-up apa pun.
  • Anda menolak izin Aplikasi GitHub — kembali melalui alur dan terima cakupan contents: write + administration: write. Tanpa administration: write, SeaMeet tidak dapat membuat repo untuk Anda.
  • Kesalahan ketidakcocokan status — tutup jendela SeaMeet lain yang mungkin berlomba pada alur OAuth yang sama, lalu coba lagi.

Kesalahan "izin repo" selama pengaturan

Kesalahan berbunyi seperti "Aplikasi GitHub memiliki izin 'contents: read', tetapi membutuhkan 'contents: write'." Ini berarti Anda memasang versi Aplikasi yang lebih lama.

Perbaikan:

  1. Buka github.com/settings/installations
  2. Temukan SeaMeet dalam daftar dan klik Configure
  3. Di bawah Repository permissions, ubah Contents dan Administration menjadi Read and write
  4. Simpan, lalu uninstall dan pasang ulang aplikasi — GitHub hanya menerapkan izin baru saat pemasangan ulang
  5. Jalankan ulang Atur Sinkronisasi GitHub di SeaMeet

"Tidak dapat menjangkau GitHub" / sinkronisasi macet di "Offline"

Kegagalan jaringan. SeaMeet akan mencoba lagi secara otomatis saat:

  • Anda membuat perubahan file apa pun (memicu upaya coba ulang segera)
  • 60 detik berlalu dari coba ulang terakhir

Jika jaringan Anda kembali dan sinkronisasi masih menunjukkan Offline setelah beberapa menit:

  1. Klik Sinkronkan Sekarang untuk memaksa coba ulang
  2. Jika itu waktu habis: periksa firewall Anda tidak memblokir github.com
  3. Sebagai upaya terakhir, mulai ulang SeaMeet — sinkronisasi startup akan menyala saat peluncuran

Sinkronisasi macet di "Pending"

Ini biasanya berarti timer komit otomatis belum menyala. Secara default itu menyala setiap 5 menit. Tidak ingin menunggu? Klik Sinkronkan Sekarang.

Jika Sinkronkan Sekarang tidak memindahkan sinkronisasi melewati Pending, periksa:

  • Apakah Anda berada di tingkat penagihan yang mencakup sinkronisasi? Buka Pengaturan Sinkronisasi — jika Anda melihat spanduk berlangganan, sinkronisasi dinonaktifkan di lapisan hak.
  • Apakah ada perubahan yang belum dikomit di luar pohon Markdown? Timer komit otomatis hanya menyala saat _pendingChanges tidak kosong.

"Saya melihat kartu token-expired"

Ini adalah akhir yang diharapkan dari siklus hidup penyegaran OAuth — token penyegaran 6 bulan Anda telah kedaluwarsa, atau Anda mencabut Aplikasi GitHub, atau Anda mengubah kata sandi GitHub Anda (yang membatalkan semua token OAuth).

Perbaikan: klik Otorisasi Ulang GitHub di kartu. Alurnya sama dengan pengaturan awal tetapi melewatkan langkah pemasangan Aplikasi GitHub (Anda sudah memilikinya yang terpasang). Memakan waktu sekitar 10 detik.

Panel resolusi konflik tidak akan menutup

Panel hanya menutup setelah semua konflik dalam daftar diselesaikan. Jika Anda melihat penghitung (1 / 3), gunakan panah chevron di panel konflik Pengaturan Sinkronisasi untuk melangkahi file yang tersisa. Masing-masing membutuhkan resolusi eksplisit (edit manual + Selesai, atau Gabungan Agen).

Jika panel bersikeras ada konflik tetapi Anda tidak melihat penanda apa pun di file Anda, klik Sinkronkan Sekarang — status conflict yang basi akan dibersihkan pada upaya sinkronisasi sukses berikutnya.

Loop "Push ditolak"

Jika sinkronisasi bergantian antara pushing dan pulling berulang kali, GitHub menolak dorongan Anda karena jarak jauh terus bergerak maju. Ini bisa terjadi jika:

  • Instance SeaMeet lain berjalan terhadap repo yang sama dan mendorong lebih cepat daripada yang ini dapat mengejar — tutup instance lainnya.
  • Seseorang (atau alat) mengomit ke repo GitHub dari luar SeaMeet — jeda alat eksternal sampai klon lokal Anda menyusul.

Catatan Keamanan

Di mana token OAuth disimpan: di keychain OS Anda melalui API safeStorage Electron. Di Windows itu DPAPI, di macOS itu Keychain Services, di Linux itu libsecret. Blob terenkripsi ditulis ke <userData>/github-token.enc dengan mode file 0o600. File menyimpan token akses, token penyegaran, stempel waktu kedaluwarsa, dan ID klien Aplikasi GitHub, rahasia klien, dan slug.

Apa yang tidak disimpan di argv: token OAuth tidak pernah dilewatkan sebagai argumen -c http.extraHeader=... ke git, karena argv terlihat oleh pengguna lain melalui ps aux. Sebaliknya, header Otorisasi disuntikkan melalui variabel lingkungan GIT_CONFIG_PARAMETERS, yang bersifat pribadi untuk proses. Pengguna lain di mesin yang sama tidak dapat melihat token Anda.

Apa yang berakhir di disk di repo: file Markdown biasa. Tidak ada token, tidak ada rahasia, tidak ada kredensial. .gitignore mengecualikan file media, tetapi Anda masih harus menghindari menempel rahasia ke dalam isi catatan — itu akan disinkronkan.

Mencabut akses: untuk segera memotong akses SeaMeet ke repo, uninstall Aplikasi GitHub SeaMeet di github.com/settings/installations. Upaya sinkronisasi berikutnya akan gagal dengan token-expired dan SeaMeet akan membersihkan token lokalnya. Catatan lokal Anda tidak tersentuh.


Referensi Cepat

┌─────────────────────────────────────────────────────────────┐
│                   SINKRONISASI GITHUB                       │
│                   Referensi Cepat                           │
├─────────────────────────────────────────────────────────────┤
│  Buka Pengaturan Sync│ Pengaturan → Sync                    │
│  Pengaturan pertama  │ Klik "Atur Sinkronisasi GitHub"      │
│  Cakupan yang diperlukan│ contents: write, admin: write     │
│  Penamaan repo       │ Satu repo pribadi per ruang kerja    │
├─────────────────────────────────────────────────────────────┤
│  Interval sync default│ 5 menit (1 / 5 / 10 / 30)           │
│  Paksa sinkronisasi  │ Tombol "Sinkronkan Sekarang"         │
│  Sinkronisasi otomatis pada push│ Aktif (toggle di Pengaturan Sync)│
│  Sinkronisasi saat startup│ Aktif (toggle di Pengaturan Sync)│
├─────────────────────────────────────────────────────────────┤
│  Margin penyegaran OAuth│ 5 menit sebelum kedaluwarsa       │
│  Timeout perintah Git│ 60 detik (AbortController)           │
│  Batas coba ulang otomatis│ 5 upaya, backoff exp.           │
│  Penyimpanan token   │ Keychain OS (safeStorage)            │
├─────────────────────────────────────────────────────────────┤
│  UI konflik         │ Klik bilah status saat dalam konflik  │
│  Selesaikan manual  │ Edit penanda → Selesai                │
│  Gabungan Agen      │ BYOK Pro + Agen AI dikonfigurasi      │
├─────────────────────────────────────────────────────────────┤
│  Putuskan koneksi   │ Pengaturan Sync → Putuskan koneksi    │
│  Cabut dari GitHub  │ github.com/settings/installations     │
│  Lihat repo         │ Tautan "Lihat di GitHub"              │
└─────────────────────────────────────────────────────────────┘

Terakhir diperbarui: 2026-06-04

Bab 37: Penyedia GitHub Copilot | (akhir manual — kembali ke Indeks)

Published: