TurtleGit for Mac

View Markdown source ↗

UI comparison requirements

Every ported window and context menu must be compared with the pinned TortoiseGit source, resource layout and behavior. Native macOS controls replace Windows APIs; the port must retain the arrangement, command hierarchy, selection semantics, information density and interaction order. Generic dialogs remain temporary.

The complete resource inventory is upstream-dialogs.csv (130 dialogs). upstream-controls.csv now inventories 1,659 static controls at that same pinned commit, including hidden controls, IDs, labels and full resource declarations. Regenerate it with python3 scripts/inventory-dialog-controls.py. Pending controls require native mapping, enablement/layout comparison and operational evidence; this inventory does not prove those checks have passed. Dynamic menus, histories, plugin controls and state transitions also require source review. A native replacement remains partial until its controls, enablement, context actions, keyboard behavior, resizing and Git effects have been verified. The file audit in upstream-files.csv records the source implementation separately from artwork.

Inventory regeneration

Both inventories read resource content from the exact recorded upstream commit. Dirty resource files and an advanced checkout HEAD do not change the audit pin. An intentional update uses scripts/inventory-upstream.py --ref <commit> followed by scripts/inventory-dialog-controls.py. Changed file blobs and dialog resources are marked upstream-changed-needs-review; changed control declarations invalidate their prior review status while retaining the native mapping for reinspection. Unchanged controls retain their decisions. The isolated regression scripts/check-inventory-pin.py checks dirty/advanced checkout behavior, explicit repinning, review invalidation and repeated generation. This protects inventory integrity; it does not establish UI or implementation parity.

Clean has partial native options/progress and app/Finder command routing, backed by Core preview, accepted-plan execution and recursive submodule batches. Remaining work is in Clean parity.

Current comparison

Native window Upstream reference Evidence and remaining differences
Load Images IDD_OPEN and MainWindow OpenDlgProc Native two-path chooser, per-side Browse, OK/Cancel, scoped Cmd+O and standalone app entry. Empty/single/duplicate inputs, invalid-path recovery, authorization cancellation and file-grant lifetime passed with two engines. Physical Browse/text entry, historical-blob prefill and signed acceptance remain pending; see IMAGE-OPEN-PARITY.md.
Image comparison TortoiseIDiff MainWindow, PicWindow, menus and image-diff manual Native image decoding now routes existing file comparisons to an image view with original artwork, side-by-side/vertical panes, linked width/height controls, source stepped zoom and fit/original sizing, linked scroll, drag pan, alpha/XOR overlay, 17-position slider, Control-Shift wheel, scoped image keyboard commands, per-pane frame/page navigation and playback, image metadata, shared transparency colors and local Dark Mode. Three-pane image conflict selection now has Mine/Base/Theirs and copy-then-resolve confirmation; actual native Select/Yes/No, stale-confirmation recovery and Git-byte checks passed with two engines. Broader controls remain partial; see IMAGE-COMPARISON-PARITY.md and IMAGE-CONFLICT-PARITY.md.
Log Messages LogDlg, GitLogListBase, Show Log manual and LogMessages.png Three panes, compact graph before list, refs, message, file statistics and basic revision menus verified. Commit revision-selection mode and acceptance/cancel/search guards checked. Original lazy Actions icons, optional metadata/Bug-ID columns, date preferences and Jump/selection-history model checks are implemented; displayed acceptance remains partial. Edit Notes now maps the upstream input dialog and preserves exact note text; Revert maps merge-parent menus, No-default confirmation and OK/Commit result callbacks. Displayed editor/prompt acceptance remains pending. Working-tree row and per-parent file groups now have actual receiver checks, including scoped Add/Commit/Revert, flags, Ignore/Delete and pinned submodule history. Statistics now has a partial native dialog, charts/styles/preferences, lazy calculation, source titles/axis units/integer ticks/average guides/author stacks and PDF/PNG/JPEG/BMP/GIF graph export; displayed/signed acceptance remains pending (LOG-STATISTICS-PARITY.md). Native reference/Walk/View menus, retained ranges under All/basic/local masks, remembered scopes and three-pane restoration now have grouped native and light/dark evidence; see LOG-CONTROLS-LAYOUT-PARITY.md. Remaining group/view variants, physical menu/splitter/selection gestures, accessibility and signed acceptance remain pending. See LOG-PARITY.md.
Revision Graph / Filter / Find RevisionGraphDlg, RevisionGraphWnd, IDD_REVISIONGRAPH, IDD_REVGRAPHFILTER and shared IDD_FIND Native OGDF canvas, colored reference rows, selection, comparison/Log routing, zoom, tooltip and owned Filter scope/Reset/cancellation checks passed with both Git engines. Solid source reference colors, left padding and I/II selection markers corrected; actual native light/dark graph and Filter captures inspected. SVG/Graphviz/PDF/PNG/JPEG/BMP/GIF exports and native format choices checked with both engines; SVG also rendered in Quick Look. Source node menus, branch/tag callbacks, ranged Log, per-ref/All deletion, Return Abort and stale-ref guards checked with both engines. Modeless Find now has original small reference-type icons, owned error acknowledgment and text/case/ECMAScript/ref searches, source author/committer/email fields, history, delayed reference filtering and native layout/loading/modal/parent-close checks with both engines. Log now shares this Find window with a complete-field, all-parent/rename search and source-order early stop; see LOG-FIND.md. Save-panel/physical gestures, alternative tools, persistence and signed Finder acceptance remain pending; see REVISION-GRAPH-PARITY.md.
Commit CommitDlg, IDD_COMMITDLG, Commit.png, PatchViewDlg Message above checked file list; independent checkbox/highlight selection; optional three-state staging; native commits exercised in both modes. Attached right-hand patch window with native line/hunk staging and unstaging verified. Native Find, Save As, Escape, saved width and show/hide labels ported. Parent/HEAD amend comparison and native selective amendment verified. Read-only View Patch and saved repository staging/patch preferences implemented; native restoration checks recorded. Second-precision author date/time, override and Reset amendments verified. Saved Message/Changes divider drag, adjustment and minimum-window checks verified. Template/operation-message loading and unchanged-template warning implemented; real Git seed tests pass, native template No and ReCommit reset verified. Recent-message insertion, multiple selection, Delete, double-click, Undo, Cancel Yes/No and corrected native history layout verified; broader history QA pending. Native Pick commit hash/message insertion, Cancel, Undo and selection/search guards verified. File Open/Open With/Finder/Log/clipboard menu commands implemented; clipboard and chooser checks recorded, external handoffs pending. Selected-row contrast corrected and captured. Unsupported file types, remaining options and menus pending. See COMMIT-PARITY.md.
Repository status ChangedDlg, IDD_CHANGEDFILES and GitStatusListCtrl Standalone branch/list/filter/action layout, six columns, native filter and stage/unstage/diff/export checks. Full context menus, persisted options, cancellation and remote checks pending. See STATUS-PARITY.md.
Switch/Checkout GitSwitchDlg, IDD_GITSWITCH, SwitchCommand and CChooseVersion Native Branch/Tag/Commit rows and option controls; captured full options route through shared Switch results, source-ordered recovery and cancellation confirmation. Full chooser, physical progress and broader UI QA pending. See SWITCH-PARITY.md.
New Branch/Tag CreateBranchTagDlg, IDD_NEW_BRANCH_TAG, BranchCommand, TagCommand and CAppUtils Native name/revision/options/description or message layout; branch creation hands off to shared Switch, then captured description with description-only retry; tag Push and cross-name Continue retain submitted choices. Full choosers, signing UI, physical handoffs and broader QA pending. See BRANCH-TAG-PARITY.md.
Synchronization SyncDlg, IDD_SYNC and GitSync.png Native graph-first incoming/outgoing history, file/ref/tag results, owned Pull/Fetch/Rebase/Push/Submodule/Stash/Apply Patch/Email Patch workflows and branch/remote choosers remain partial. Source tab order and captions below results, Force beside SSH and status/Close/Help footer now match the source arrangement; six actual normal/minimum/incoming light/dark captures checked. Close/reopen and immediate popup deletion now preserve source history rules. Revision lists now use source-default Actions/Message/Author/Date, optional SHA-1/email/committer columns, conditional Bug-ID, original action icons, colored tracking/annotated ref labels and shared date/message settings. Both Git engines passed native rendering/preferences/owned-read-close checks. Captured clipboard submenus and hash-based selection retention now have native evidence; normal public-site screenshots updated. Full remaining column/row/context interactions, autocomplete, project hooks, progress phases and physical/signed acceptance remain pending. See SYNCHRONIZATION-PARITY.md.
Push PushDlg, IDD_PUSH, PushCommand and CAppUtils Native reference/destination/options arrangement; branch/upstream and tag-scoped handoff verified with unchanged index/worktree patches. Basic Manage and cached ref browsers; full choosers/settings, progress, cancellation and authentication pending. See PUSH-PARITY.md.
Fetch PullFetchDlg, IDD_PULLFETCH, FetchCommand and CAppUtils Native control arrangement and three-state Tags/Prune; URL branch browse/fetch and configured named-remote fetch verified with unchanged HEAD/index/worktree. Fetch → Rebase plan verified; full settings, progress and broader QA pending. See FETCH-PARITY.md.
Pull PullFetchDlg, IDD_PULLFETCH, PullCommand and CAppUtils Shared native remote/options window; fast-forward pull preserves unrelated mixed changes, flag enablement and error → Working Tree verified. Configured Pull → Rebase auto-start verified; progress and full recovery pending. See PULL-PARITY.md.
Rebase RebaseDlg, IDD_REBASE, RebaseCommand, GitLogListBase and official manual Native branch/action/list/lower-tabs arrangement, original icons and light/dark captures. Real Start/Skip and recovered Edit/Amend verified; Fetch/Pull handoffs verified; full recovery QA and advanced controls pending. See REBASE-PARITY.md.
Cherry Pick RebaseDlg Cherry Pick mode, ID_CHERRY_PICK and official pinned screenshot Native selected-commit plan, disabled reference row, Add via multi-select Log, attribution, merge-parent prompts and shared recovery implemented. Displayed acceptance and advanced controls remain pending. See CHERRY-PICK-PARITY.md.
Merge MergeDlg, IDD_MERGE, MergeCommand and AppUtils::DoMerge Native revision/options/message arrangement, conditional enablement, No Commit merge and staging Commit completion verified; strategy tests pass. Full history/choosers/progress/recovery pending. See MERGE-PARITY.md.
Stash Save StashSave, IDD_STASH, AppUtils::StashSave and official manual Optional message, mutually exclusive untracked/all controls and Abort/Continue warning verified natively; tracked/index/untracked/ignored effects tested. Progress/post-actions, suppression persistence after Continue and broader appearance/resize QA pending. See STASH-PARITY.md.
Stash Apply/Pop AppUtils::StashApply/StashPop, StashCommand and official manual Immediate operation, native progress/result prompts and Yes → Working Tree verified for success/conflict; Git retains failed/conflicted stash. Selected UI, full recovery, preference relaunch and signed Finder QA pending. See STASH-PARITY.md.
RefLog / Stash List RefLogDlg, refloglist, IDD_REFLOG and RefLogCommand Full-width Ref selector and upstream five-column order, native Search, selected Apply, inspection and Delete/Clear Abort verified. Real Git stale snapshot and multi-drop tests pass. Full menus, persistence, sorting, deletion execution and dark/resize QA pending. See REFLOG-PARITY.md.
Clone CloneDlg, IDD_CLONE, CloneCommand and CloneProgressCommand Native option groups and enablement; captured result/retry, ordered Log/Finder actions and cancellation confirmation. Six Core tests and four-Git native shallow/branch/origin, bare/no-checkout, preservation and cancellation checks; physical picker/result, authentication, streaming adoption outside Clone, SVN/libgit2 and signed sandbox acceptance pending. Live Clone bytes/CR/percentages/output limits verified; physical scrolling remains pending. See CLONE-PARITY.md.
Create Repository CreateRepoDlg, IDD_CREATEREPO and CreateRepositoryCommand Native Bare/text/OK/Cancel/Help arrangement, .git default and destination warnings; normal/bare creation, Cancel, occupied-bare Abort and bare workspace/Log verified. Picker confirmation, adoption/recent behavior, signed Finder and broader QA pending. See INIT-PARITY.md.
Rename RenameDlg, IDD_RENAME, RenameCommand and MenuInfo Native six-control arrangement, original icon and Commit/Working Tree/Finder entry points. Native collision → correction, two mixed-file renames and menu handoffs verified; browse, post-close restoration, signed Finder and broader QA pending. See RENAME-PARITY.md.
Delete / keep local RemoveCommand, shell resources and warning/result strings (no dedicated IDD) Native confirmation and successful two-path keep-local removal verified; retained-copy commit/amend behavior tested. Native confirmation Abort, Ignore/Abort continuation and checked-deletion Commit handoff verified. Full appearance/keyboard QA, submodules and signed Finder pending. See REMOVE-PARITY.md.
Ignore IgnoreDlg, IDD_IGNORE, IgnoreCommand, AppUtils and shell/status-list menus All ten controls mapped to native groups/radios/buttons; native Cancel, per-folder recursive rules, dark Delete-and-ignore keep-local extension rules and Commit/Working Tree menu handoffs verified. Full menus, recovery, permissions and broader QA pending. See IGNORE-PARITY.md.
Delete/modify conflict DeleteConflictDlg, IDD_RESOLVE_CONFLICT and CAppUtils::ConflictEdit Native path/reference/status/buttons arrangement, light/dark captures, conditional comparison, incoming-side Log and Modified effects verified. Full comparison editor, Created/rebase/Delete/error/native parent QA remain pending; see DELETE-CONFLICT-PARITY.md.
Resolve ResolveDlg, IDD_RESOLVE, ResolveCommand and shared conflict actions Native six-control checked list, current/mine/theirs, original icon and app/Finder dispatch; checked-current/Cancel and submodule Reset/resume verified. Full conflict editor, submodule chooser, progress, signed Finder and broader QA pending; see RESOLVE-PARITY.md.
Submodule Update SubmoduleUpdateDlg, IDD_SUBMODULE_UPDATE and SubmoduleCommand Update branch Native selected-path list, all seven options, Whole Project and three-state all control. Scoped selection/Cancel/selective Init/No fetch/saved options/F5/light-dark checked. Separate progress, signed Finder/sandbox and remaining variants are partial; see SUBMODULE-UPDATE-PARITY.md.
Working-file Revert RevertDlg, RevertCommand, RevertProgressCommand and GitProgressDlg / IDD_SVNPROGRESS Native scoped checked plan and light/dark columns verified. Ordered action/path progress, cooperative cancellation, busy-Quit blocking and Trash recovery checked with a delayed native checkout. Core index-preservation and bounded-batch tests pass. Shared progress/post-options, complete menus, signed Finder/sandbox and broader native workflows remain partial; see REVERT-PARITY.md.
Reset ResetDlg, IDD_RESET, CChooseVersion and CAppUtils::GitReset Native nineteen-control mapping, light/dark captures, Mixed and submodule Soft/resolution effects verified. Full ref/log/diff-list, progress, Hard warning/recovery, parent restoration and signed QA pending; see RESET-PARITY.md.
Export ExportDlg, IDD_EXPORT and CAppUtils::Export Native ZIP/revision/Whole Project options and radio controls; owned progress with original Explore icon, captured close/cancel settings and atomic ZIP preservation. Four-Git models/archive contents and RefLog handoffs checked. Sync-owned options/progress, actual ZIP and startup Cancel/forced close checked with two engines; corrected intrinsic sheet sizing and inspected light/dark options captures. Full chooser/history, physical input, Finder reveal and signed acceptance pending; see EXPORT-PARITY.md.
Compare revisions / Changed Files FileDiffDlg, IDD_DIFFFILES and CompareRevisions.png Native source toolbar, RefBrowse/Log/RefLog split selectors, five-column status-colored list, compared-range Log, exact file selections/viewer caches and captured menu ownership. Owned Save/Export/Open With/list panels and cancellation are covered by the grouped comparison receiver; Core guards exact Revert/Export targets and ambiguous local writes. Physical gestures, remaining source variants, accessibility and signed acceptance remain partial; see COMPARE-WORKFLOW-PARITY.md.
Diff / text merge TortoiseMerge, CAppUtils::ConflictEdit and TortoiseUDiff Native three-pane UTF-8 conflict editor, line numbers, block choices and guarded Save/Mark as resolved. Core tests and initial native block/Find checks pass; full aligned diff views, menus and native acceptance remain partial. See TEXT-MERGE-PARITY.md. Partial staging remains available in the Commit patch window.
Remote settings CSettingGitRemote / IDD_SETTINREMOTE Native AppKit list/fields/Rename/Add New-Save/Remove, tags and three-state Prune, source questions and owned BrowseRefs Fetch offer. Push/Fetch use the same page. Separate native SSH Key row with private file-grant selection added while retaining PuTTY interoperability; automatic identity transport, full settings tree, timed hint/history and physical/signed acceptance remain pending; see REMOTE-SETTINGS-PARITY.md.
Settings / Merge General SetMainPage, IDD_SETMAINPAGE, MainFrm width bounds and BaseView defaults Native Appearance and Merge Editor tabs. Use spaces, Smart tab char and Tab size saved with Apply/Cancel; invalid zero, live clean-pane updates and relaunch verified. Show line numbers hides/shows all four rulers while retaining session width and active Undo history. Other General/Colors controls, EditorConfig and full settings behavior pending. See TEXT-MERGE-PARITY.md.
Finder menu ShellExt.cpp, resource shell menu, cache states Original icons, independent preferences and path selection dispatch implemented. Clone/Create folder entries and targetless toolbar creation routes have actual receiver checks; native/signed handoff remains pending. See FINDER-CREATION-PARITY.md. Menu conditions, command coverage, separators, configuration and signed native appearance still need comparison/QA. Finder placement follows macOS extension rules.

Verification procedure for each replacement

  1. Find the upstream resource and its dialog implementation; capture every control and context command, including hidden conditional states and split buttons.
  2. Compare the native window with the upstream reference at ordinary and minimum sizes, light/dark appearances and common data sizes. Check graph/column placement, file groups, message ordering, icons, command names and enabled states.
  3. Exercise empty repositories, file/folder requests, multiple selection, renames, binary files, staged/unstaged combinations, conflicts and relevant Git states.
  4. Verify keyboard actions, double-click, right-click targeting and resizing using the running native app. Check resulting Git state with real integration tests.
  5. Record remaining differences explicitly; update the corresponding parity document and inventory. Do not treat compilation or a screenshot as complete UI parity.

Screenshots must use disposable repositories. A native UI interaction failure must be diagnosed or recorded as unverified, never replaced with an invented mockup.

Color and documentation references

Compare with the official manual’s dialog screenshots and pinned resources in both light and dark appearances. Preserve semantic status colors, colored command artwork, graph lanes and reference labels; see APPEARANCE.md. The future user-facing guide follows the upstream manual’s organization with Mac-specific screenshots/instructions; see MANUAL-PLAN.md. These references are part of each dialog audit, not a claim that all existing dialogs have passed visual QA.

Submodule conflict: native 26-control resource mapping, checkout Base, colored types, side choices and rebase stage ordering are partial; see SUBMODULE-CONFLICT-PARITY.md.

Submodule Delete/Abort, recoverable Trash, and file-to-gitlink directory conversion are implemented with native Abort/Delete effects verified. Registered/multi-item removal and reverse transitions remain partial. Shared command labels now respect template tinting for monochrome Log, Help and cherry-pick artwork.

Text conflict editor now has aligned read-only source rows, original source numbers, and upstream light/dark removed/added/conflicted/empty colors. Both actual native captures were inspected. The full suite passes 180 tests. Exact libsvn alignment parity and synchronized scrolling acceptance remain pending; logical Command-Z and Shift-Command-Z are verified on the QA host; broader keyboard combinations remain pending. See Text merge parity.

Merge source panes now offer Use this whole file. Native Mine, Theirs, Undo/Redo and unsaved-close Cancel were verified; rebase native combinations remain pending. Reload is visible with original artwork and successful-load history reset. Its dirty prompt and Cancel were verified; confirmed reload/reset acceptance remains pending.

Reload now offers Save and Reload, Reload Without Saving and Cancel, matching the reviewed upstream three-way Save check. Native Save and Reload wrote exact Mine bytes and preserved unresolved stages; post-reload rendering/history and the new prompt's other choices remain unverified after observer timeouts.

EOF source metadata now preserves missing final newlines for the unchanged final conflict, including a separator for combined choices. Native combined choice and Save bytes were verified; CRLF/resolution/Undo native combinations remain pending. Full upstream EOL/encoding parity is still incomplete.

The text merge result now offers the upstream nine-style line-ending submenu with reversible conversion. A shared UTF-16 scanner fixes CRLF marker detection and caret line numbers. Native CRLF → LF, Undo/Redo and unresolved Save warning were verified; complete EOL/encoding metadata and exotic native combinations remain partial. See TEXT-MERGE-PARITY.md.

The text merge context menu now includes upstream leading tabs/spaces conversion and Trim right, with single-step Undo and conditional availability. Native conversion, Undo and exact Unicode/CRLF Save bytes were verified. Global tab-width preferences, EditorConfig and locale-specific Unicode trim remain pending. See TEXT-MERGE-PARITY.md.

The merge editor now has independent 1/2/4/8 tab-width menus in each pane. Native width changes preserved clean state and Undo history; merged-result conversion and Save bytes at width eight were verified. Global persistence, global insertion-mode preferences and EditorConfig remain pending.

Merge pane menus now include Tab/Space and Smart tab char. Native Space insertion, nearby-tab Smart choice, multiline Tab/Shift-Tab, Undo and exact Save bytes were verified. Global preferences, EditorConfig, precise partial-column selection restoration and broader key/view behavior remain pending.

Push live output now follows the shared source CLI parser, with CR replacement, phase/percentage, captured output limit and end scrolling. Complete raw results still drive recovery after display truncation. Push live-output QA records Core and four-Git hidden native evidence; physical scrolling, complete progress controls, hooks/network and signed acceptance remain pending.

Fetch and merge-based Pull now have live CLI output, CR replacement, phase/percentage, captured limits and end scrolling. Fetch/Rebase retains its source decisions and immutable target; ff-only Merge clears the Fetch phase but still returns completion-time output. Fetch/Pull live-output QA records Core and four-Git hidden native checks. Complete controls, physical scrolling/focus/defaults/themes, real network and signed acceptance remain pending.

Merge now streams source CLI bytes, phase/percentage and captured output limits, with raw diagnostics preserved after truncation. ConfirmKillProcess uses the source Yes/No sheet; completion while it is pending defers close/post-actions. Fetch's ff-only Merge has its own presentation phase in the existing owned result. Merge live-output QA records Core and four-Git hidden native evidence. Complete controls, upstream modal ownership, physical scrolling/defaults/focus/themes, hooks and signed acceptance remain pending.

Saved progress action log checkpoint

The Action log guide tracks source retention and Saved Data Show/Clear parity, headless verification, covered progress windows and remaining physical/signed and wider Saved Data gaps.

Saved Data history and decisions checkpoint

The Saved Data guide maps URL/input-message history and stored decision controls to the source and documents reset scope and remaining groups. Core reset-scope tests and private native model checks are recorded in the checkpoint.

Temporary files checkpoint

The temporary-file guide maps shared private temporary storage and Saved Data's confirmed cleanup to the pinned source. Checkpoint evidence distinguishes Core/native checks from remaining physical, live-operation and signed acceptance.

Dialog geometry checkpoint

Dialog sizes and positions maps native frame persistence and Saved Data reset to the source, with Core/headless verification and physical, mode-specific and signed gaps. Evidence: checkpoint.

Shared Sync Find consumer (October 11)

Sync In/Out now use the same native Find dialog as Log and Revision Graph, with the source's menu position, original filter icon and independent list-owned cursors/windows. Subject, metadata, path, regex/case, reference and Shift-highlight routes, busy/error gates and forced parent closure have native two-engine checks. Actual light/dark Find window captures were inspected and added to the site. The source dialog/control inventory remains partial; these checks do not establish full physical, accessibility, signed or all-consumer parity. See Sync parity.