Appearance
Import from GitHub
Choose Import from GitHub in the dashboard or repository list to paste a GitHub HTTPS URL, or browse the repositories accessible to the configured GitHub token and import several at once. Finluth Git creates mirrors that keep source commit history, branches, and tags.
The repository browser requires GITHUB_TOKEN with read access to repository metadata and contents; direct imports of public repositories work without a token. For private repositories, set GITHUB_TOKEN to a fine grained GitHub token with read only Metadata and Contents access.
Pull requests
Open Repositories → GitHub sync setup → Import GitHub pull requests to import and refresh pull request descriptions, states, labels, assignees, timestamps, discussion comments, inline review threads and resolution state, review decisions, and reactions. Re-running the import updates GitHub-sourced entries without duplicating them and keeps Finluth-only comments and reviews. The token needs read access to Metadata, Contents, Pull requests, and Issues (Issues access is used to read pull request conversation comments and reactions).
Issues
Use Repositories → GitHub sync setup → Import GitHub issues to migrate open and closed issues from all linked repositories, including descriptions, discussion comments, original issue numbers, labels, all assignees, timestamps, and reactions. Re-running the import updates GitHub-sourced fields and adds or refreshes comments and reactions without duplicating them; Finluth comments are kept.
Existing local issues that conflict with an imported GitHub issue number are left untouched and reported. GitHub issue numbers also include pull requests, so Finluth reserves numbers through the highest source issue or pull request number for future issues. The GitHub issues API includes pull requests in its issue listing, so the importer excludes those entries and uses the pull request importer for them.
If GitHub reports Resource not accessible by personal access token, grant the fine-grained token access to each source repository and Issues: Read-only, then approve it for the organization if required; classic tokens need the repo scope. Update GITHUB_TOKEN on the server and restart Finluth Git before retrying.
Sync and cutover
Imported repositories sync from GitHub when a signed push webhook arrives and once per hour as a fallback. Open Repositories → GitHub sync setup while signed in for the webhook URL and generated secret. In each GitHub source repository, add a webhook with that URL, content type application/json, the displayed secret, and the push event. You can also run a manual sync from the imported repository page.
The GitHub backup panel shows the last successful sync separately from the last attempt and error, checks current branch/tag ref parity, and compares issue and pull request records plus comments, inline review threads, review decisions, reactions, labels, assignees, and timestamps against GitHub. Re-import issues and pull requests to refresh their history snapshots before cutover.
Missing records, count mismatches, missing snapshots, changes since import, unavailable review-thread state, missing pull request head refs, import errors, and missing token access are shown as gaps or warnings, not as complete. The checklist does not claim history is current when GitHub access or pagination limits prevent verification.
While linked, imported repositories are read-only in Finluth: Git pushes are rejected, and pull request merges are disabled. To cut over, a repository admin chooses Prepare cutover on the repository page. Review the checklist, then Finluth checks every branch and tag ref and asks for explicit confirmation; it repeats the ref check under the sync lock before disconnecting. An incomplete or unverified history checklist requires explicit acknowledgement in the confirmation. If refs differ, sync from GitHub and verify again.
After disconnect, webhook and hourly sync skip the repository, and Finluth pushes and pull request merges are enabled. Imported GitHub comments and reviews remain local to Finluth and are not sent back to GitHub. The webhook secret is stored under .finluth/, so preserve that directory when backing up the app.