SmartGit Portable is a Git client with support for GitHub

SmartGit Portable

SmartGit Portable

  -  109 MB  -  Freeware
  • Latest Version

    SmartGit Portable 24.1 LATEST

  • Review by

    Daniel Leblanc

  • Operating System

    Windows 7 / Windows 7 64 / Windows 8 / Windows 8 64 / Windows 10 / Windows 10 64

  • User Rating

    Click to vote
  • Author / Product

    SyntEvo GmbH / External Link

  • Filename

    smartgit-portable-24_1_0.7z

SmartGit Portable is a Git client for Windows PC, Mac, and Linux. It is free for non-commercial use, provides graphical access to Git repositories, and can access Subversion repositories. For trivial Pull, Commit, and Push you will find simpler alternatives than this tool. Purchase your license once and use it on as many machines and operating systems you like. No need to install and configure additional tools. SmartGit comes with special integrations for GitHub, BitBucket, and Atlassian Stash to create and resolve Pull Requests and Review Comments. Of course, you can use SmartGit Portable with your own repositories or other hosting providers (e.g. GitLab).

Features and Highlights
  • Virtually all local working tree operations
  • Status, diff, log
  • Push, pull, fetch (for all protocols)
  • Tag and branch management
  • Merge, cherry-pick, rebase, revert, rebase
  • Stash management
  • Remotes management
  • Submodule support
  • Advanced SVN support (use Smart Git as SVN client)
Also Available: Download SmartGit for Mac

  • SmartGit Portable 24.1 Screenshots

    The images below have been resized. Click on them to view the screenshots in full size.

    SmartGit Portable 24.1 Screenshot 1
  • SmartGit Portable 24.1 Screenshot 2
  • SmartGit Portable 24.1 Screenshot 3
  • SmartGit Portable 24.1 Screenshot 4
  • SmartGit Portable 24.1 Screenshot 5

What's new in this version:

SmartGit Portable 24.1
Fixed:
- Bisect (Mark as Good/Bad): might fail in LFS repositories (credential helper pops up)
- Blame, Changes Since: too light background color
- Completion popup: did not scroll to selection
- GitHub: possible internal error when reading pull request comments without author

Syntax:
- Groovy: internal error typing @
- InnoSetup: internal error typing ' or "
- PHP: <? can occur inside tag arguments
- XML: internal error typing &

Other Noteworthy Changes:
- Bitbucket: added low-level property "bitbucketCloud.repositoryPageSize"
- translations updated


SmartGit Portable 23.1.4.2
Fixed:
- Add Submodule: possible internal error
- Find Object: possible internal error pasting too long string
- GUI: catch (temporary?) no-more-handles error

Other Noteworthy Changes:
- allow MacOS 15 (Sequoia)
- Setup: show welcome page (for evaluation only); disable by settings system property "smartgit.setup.welcomeUrl.evaluation="


SmartGit Portable 23.1.4.1
Fixed:
- Setup wizard: internal error if a file contains "weird" characters in its name that could not be mapped to the file system (regression)


SmartGit Portable 23.1.4
Fixed:
Changes view:
- internal error trying to stage "left" block at first line
- Unstage Selection: internal error for last block in unified diff view
- Changes view/File Compare/...: parsing was broken if token ended with 32-bit char (e.g. "emoji")
- Cherry-Pick/Squash Commits: possible internal error related to invalid Git commits
- Fetch more: after unshallowing commits graph is not refreshed
- Git-Flow, Init: failed in empty repository; now it creates initial empty commit if required
- GitLab: possible error "Object 'sha' not found"
- Init: may fail to create objects in case of file system problems
- Investigate: initial switch from Blame to Diff view gives empty panel
- Log Graph (and Commits view):
- for email-only `.mailmap` lines, the original Author name was lost
- for `.mailmap` lines containing `<>`, mapping was not applied
- Rebase: some warning dialogs showed "Merge" instead of "Rebase" in title

Refresh:
- possible internal error if `mailmap.file` contains an invalid path
- possible error "The process cannot access the file because another process has locked a portion of the file" for untracked-missing rename detection
- Rename: was not applicable any more for submodules (regression since 22.1)
- Remove: was not applicable any more for submodules (regression since 22.1)
- Window | Reset Perspective: kept previous layout

Standard window:
- possible internal error if a dialog occurs (e.g. master password dialog) while dragging a tab
- internal error trying to modify toolbar with "Basic" feature set
- Graph: internal error when toggling "Show Tags" before graph has been loaded

Windows:
- possible error "Failed to invoke filter 'lfs'"
- possible errors related to invalid HOME

Other Noteworthy Changes:
Clone:
- GitHub: improve error message if authentication fails due to outdated username/password
- Conflict Solver: the Base window now has its own window bounds
- Evaluation: more possibilities to copy evaluation-IDs for expired evaluations
- Log and Working Tree window: optionally hide *Toggle 'Assume Unchanged'* and *Toggle 'Skip Worktree'* commands by setting the low-level property `file.contextMenu.toggleRareFileStates` to `false`

macOS:
- Setup wizyard: when searching repositories avoid scanning into directories known to trigger macOS to show a confirmation dialog


SmartGit Portable 23.1.3
Fixed:
Refresh:
- config: possible internal error if config file ends after subsection name
- possible "ghost" modified state related to invalid "text=" in .gitattributes

- Simple hosting providers: Domain input field is missing

Linux:
- default dark theme: assertion showing comment
- table columns too narrow by default

macOS:
- env-var parser fails if `pwsh` is configured
- Reveal in Finder: always shows an empty output dialog

- WSL: if appending Windows path is disabled, browser windows can't be opened

Other Noteworthy Changes:
- updated Chinese translation

company configuration:
- allow to have fixed Git executable version by configuring `executable.requiredExactVersion`

on-premise license server:
- About dialog: show details about on-premise license server
- Setup: improve warning message in case of rejected authorization (LDAP)
- Setup/Register: prevent requesting license if Git email address is not configured

Working Tree window:
- Show Changes: introduce low-level property `showChanges.askForIndexAndWtModifiedFiles` to show selection dialog for wt-index-modified files

- Refresh (macOS): added low-level property `core.status.ignoreGenericFileSystemExceptionOnMacOs` to work around "Operation not permitted" error caused by inaccessible directories


SmartGit Portable 23.1.2
Fixed:
Blame:
- by-author-coloring is always dark, even with light theme

Branches view:
- toggling grouping option in hamburger menu did not trigger refresh

Commit view:
- Rewrap (Windows): introduced additional lines/spaces

File Log:
- possible internal error in case of missing objects

Hosting Providers:
- Azure: client certificates did not work
- Bitbucket:
- own comments may not be editable
- Merge to Local did not work for SSH repositories
- possible dead lock opening a project for some hosting providers, e.g. BitBucket
- GitHub: possible error "Object 'id' not found" related to pull request reviewer assignments
- GitLab: possible internal error for redirected repositories

Open:
- for worktree with mismatch between Git admin pointers, the more unexpected repo will be opened
- for worktree with non-existing Git admin pointer, opening fails

Refresh:
- possible internal error if config file ends with subsection quote (`[remote "`)
- possible internal error for large commit dates, e.g. year 2286
- inefficient refreshing for large repositories with many submodules
- low-level property `json.graphQL.ignoreNullArrayElements` did not work properly

Log window:
- all refs should be displayed by default (regression since 22.1)

Standard window:
- tabs: internal error related to (unintentional) tab dragging while a dialog occurs
- Delete/Move to Trash (macOS): did not refresh correctly after removing `.git` file


SmartGit Portable 23.1.1
Fixed:
- GitHub email address confirmation dialog: selecting the *Always use default email address* radio button wrote empty email address to `.git/config`
- Azure DevOps: OAuth-authentication for repository was broken (unless Git config "useHttpPath" was set)
- Investigate: under certain unclear conditions an internal error could occur when closing the Investigate window

Standard window:
- Commit: should not allow to create empty commit even if repository is empty
- Linux: several problems with forced light theme on dark system theme
- the background color of the Std, Directories table is dark gray instead of light gray
- the caret in text fields is not visible
- the preferences tree uses light foreground on light background for the selected node
- macOS: click-dragging a table item might cause an internal error under unclear conditions

Other Noteworthy Changes:
- Branches view:
- when using `branchBrowser.showClassicAheadBehindNumbers`, colors are used (as in before SmartGit 22.1)
- Log: added low-level property `core.remote.configNamesToIgnoreForUrlLessRemotes` to hide incomplete remotes (that are shown by `git status`)
- some i18n fixes


SmartGit Portable 23.1.0
Fixed:
- Refresh: possible internal error while concurrently adding LFS objects


SmartGit Portable 22.1.7
Fixed:
- 2nd SmartGit instance crashes with FileSystemException
- Rebase, Step: should not be available in non-step mode

Refresh:
- possible problems with custom "filter..process" (long running filter process)
- -may not show modifications for files containing "eol" attribute without "text" attribute
- Linux: evaluation reminder dialog might be hidden behind main window making the impression that SmartGit hangs

Other Noteworthy Changes:
- Graph layout: reduced memory consumption
- added low-level properties github.userQuery.* to fine-tune/debug query-sizes


SmartGit Portable 22.1.6
Fixed:
- Changes view, Split Index/WT files: even if changes.preservePositionWhenSwitchingBetweenWtIndexHead is set to false, selecting the index or working tree of the same file did not select the first diff
- Commit Message, Rewrap: possible internal error
- Distributed Reviews: pull requests may not be properly updated to merge base
- GitHub Enterprise: possible internal errror for "Generate Token" in preferences
- JNA: still created temp directories (regression since 21.2)

Refresh:
- refreshing fails when using negative respecs (^)
- LFS (Windows): possible internal error for case-changed directories
- SSHJ: possible internal error for unsupported private key format
- possible internal error killing a (Git) child process

GUI:
- view tabs (Log, WT window): a too-fast drag-and-drop continued to show the drag-reject cursor

Log window:
- GitHub: possible too large amount of REST calls

Working Tree window:
- if in Setup wizard the Standard window is selected as default, neither the Commit toolbar button nor the Commit view were visible
- Refresh: possible performance problems for .git/index file without checksum

Log window:
- Graph: Varying Coloring uses now more distinct colors
- reactive license.serverPing.url


SmartGit Portable 22.1.5
Fixed:
- Kill hanging process: possible internal error

- Refresh:
- possible internal error in case of corrupt .git/index file
- possible internal error related to bad branch..merge entry in .git/config
- problem reading packed-refs

- Standard window: possible internal error when filtering

Other Noteworthy Changes:
- Log: remove notification "would you like the Log as default window?"
- Preferences: after changing the Startup window option, show restart notification
- Setup wizard: let the user confirm the Standard window


SmartGit Portable 22.1.4
Fixed:
- Background scan: fixed memory leak if Detect Local Changes is disabled
- Changes view: Resolve may fail with "Input length = ..." error depending on the used encodings
- Fetch More: internal error when trying to fetch non-branch, like Gerrit refs/changes/01/000002/3

Standard window:
- Files: possible incorrect original path shown for renamed file
- Filter: various regex-selectors, e.g. .* were non-functional
- GitHub: possible internal error during refresh
- Rebase may silently do nothing

- Linux bundle: old .svg file was bundled

Other Noteworthy Changes:
- Tools: the obsolete ff-merge.sh tool is removed automatically, even if upgraded from older SmartGit versions)


SmartGit Portable 22.1.3
Fixed:
Standard window:
- Start Feature: could reset diverged local branch (not ahead or behind) onto remote branch (possible loss of commit)
- Graph: internal error when selecting virtual and one other commit

Log window:
- Changes: clicking submodule commit did not reveal commit reliably

Hosting providers:
- Azure: for multiple configured hosting providers (accounts), refreshing only worked randomly
- GitHub: possible "Object author not found as parent of PullRequest" for pull requests of non-existing users

Refresh:
- at line end of config file was erroneously treated as line continuaton
- could break in case of inaccessible directory or file
- Setup wizard: possible internal error on Finish (related to proxy configuration)

Other Noteworthy Changes:
- Azure DevOps: added low-level property "azure.accountMatchHonorOrganization"
- Rebase: by default rejects Rebase Interactive when trying to rebase onto a commit of the HEAD's history (low-level property "rebase.invokeInteractiveForBranchHistory")

Log window:
- Changes: font to display comments might be too small to read: added low-level property "changesView.comment.fontSize" to configure the size


SmartGit Portable 22.1.2
Fixed:
- Annotate: possible internal error
- Background scan: fixed memory leak
- Bitbucket: failed for pull requests with invalid refs (silently ignores them now)
- GitHub integration: possible error "Object 'requestReviewer' not found as parent of 'nodes'"

Refresh:
- possible error "is a directory" when opening a repository with symlinks in .git/refs
- possible error "Bad entry" for rn continuation in Git config file
- Spell checker: possible internal error when accepting fix while the message was cleared automatically after a successful commit
- Syntax coloring, PHP: incorrect end of string detection

UI:
- Changes View/Compare: non-US-ASCII-related problems; restored SmartGit 21.2 behavior
- Investigate toolbar icon had wrong background
- Standard window, Commit: line length guide ignored left margin

- Various operations: possible error "Inappropriate ioctl for device" when writing .git/config


SmartGit Portable 22.1.1
Fixed:
Fetch: possible internal error
- Git config file: possible corruption when writing, especially for lines after a comment line

Log:
- Subdirectory Log: internal error double-clicking a commit
- Graph: possible internal error when filtering with set low-level property "log.graph.topoFilter.alwaysIncludeContainingMerges"

- Push To: did not configure tracking even if options were set to do so
- Preferences: certain .gitconfig options may become confused if not stored with canonical case in .gitconfig

Standard window:
- internal error cloning a repository into a directory which was already open and had been deleted outside SmartGit
- Local Files, Push toolbar buttons: count badge might be outside the button depending on the screen zoom level

i18n:
- Investigate: i18n problems
- macOS: window-less menu bar was not translated


SmartGit Portable 22.1.0
Fixed:
- File Log: hitting Del in the Branches view caused internal error
- JIRA: many recurring dialogs after cancelling SSL client certificate


SmartGit Portable 21.2.4
Fixed:
- Azure DevOps: integration was not applicable for ssh://[email protected]:22/project/_git/application URLs

Changes view:
- possible internal error selecting certain images (depending on color model)
- possible internal error when applying/reverting selection containing removal of empty line

Git-Flow (external): finish feature/hotfix/release branches containing '/' did not work
- Log:
- Graph: possible internal error for partial clones when filtering for file name or content

Refresh:
- BitBucket Server: possible internal error if pull request has been created from tag
- squashed subtrees were not detected

- rebooting while running might lose newly entered hosting provider credentials
- Refresh (working tree): possible internal error if .git/index has null-checksum

Other Noteworthy Changes:
- added low level property refresh.checkGitAdminOutsideOfModel


SmartGit Portable 21.2.3
Fixed:
- Changes view
- internal error related "Split leading/trailing lines" option
- Copy without selection: copies 1 char too much resulting in crash for last line
- for Unified view, Goto Next Change may remain at existing change
- error "failed to read file" for missing files if "core.autocrlf=input" is configured
- Files (Log and WT): State and Working Tree State columns should denote rename sources as "missing", not "unchanged"
- GitLab: error "The authorization server does not support this response type" when trying to generate a new token
- Log: possible internal error when filter for modified content
- Pull: Git config "pull.rebase=merges" should be honored
- Pull/others: submodule..update=none should be honored
- Refresh (WT): "filter" may not be applied if listed after "text" or "eol" in .gitattributes


SmartGit Portable 21.2.2
Fixed:
- Changes view: split-off block may miss background color
- Cherry-pick: possible internal error related to subtrees
- Conflict Solver: for LFS conflicts, left and right will show wrong contents (of base file)
- Graph (macOS): (x refs) box with dark background on dark system with light SmartGit theme
- Pull: possible internal error when trying to initialize SVN submodule
- Refresh (Windows): internal error when trying to open repository located at special directory, like "C:UsersaccountMy Documents"
- added low-level property "gitlab.additionalRequestHeaders"


SmartGit Portable 21.2.1
Fixed:
Changes view:
- unexpected "Error reading file, Details: cancelled" for Git-LFS file which exceed the size threshold
- possible internal error clicking "Force Compare"
- Commit/Stash: possible error "unknown option `pathspec-from-file=-'" when using Git 2.25
- External tools: ${commit2} was marked incorrectly as optional
- Gravatar: fixed assertion for incorrectly sized images

Log:
- Graph: memory leak of core objects after invoking popup menu
- File log: internal error if deleting and re-cloning repository while file log is open

Refresh:
- possible internal error "Unknown chunk ID ..."
- internal error trying to open a repository which is actually a file
- macOS bundle with invalid version information


SmartGit Portable 21.2.0
Fixed:
- Changes view: hitting Refresh did not reload file content


SmartGit Portable 21.1.3
- Changes View:
- Apply was available when starting within an inner-line change
- possible internal error when reverting a black and changing the file once again while the confirmation dialog is showing

- Azure DevOps: should allow multiple configurations for different server URLs
- Journal: possible false-positive pushed commits for local, untracked branches
- Kaleidoscope.app command line tool hang until SmartGit was closed; added a workaround


SmartGit Portable 21.1.2
Fixed:
- Azure DevOps: possible "Could not parse date" error on pull request refresh

- Branches view:
- refresh may change selection from remote to local tracking branch
- tag message did not show up for grouped tags
- toggling remote ref might select local ref

- Changes view:
- if saving fails, error banner hides too quickly
- horizontal scrolling did not always update reliably
- possible assertion on Apply
- staging hunks for untracked-missing renamed file fails with "Failed to write file" error
- Working Tree window: did not reliably refresh after failed save
- Ignore: showed scary warning about discarding changes for untracked file

- Log:
- Files (working tree): ignored removed file which is locally existing does not show up unless View Ignored Files is selected
- Refresh (Working Tree): automatic refresh did not clean up files after ignoring directory in non-root .gitignore
- Refresh: possible internal error for commits with commit times > 2038

Other Noteworthy Changes:
- UTF8 detection now scans full file instead of just the first 64kB
- GitHub: shows reasonable warning in case of organization access restrictions
- low-level property "core.tree.filter.backwardCompatibilityWithNonUnicodeGitOnWindows"
- Table controls: if low-level property table.scrollToSelection is set to false, ignore the selection's visibility


SmartGit Portable 21.1.1
Fixed:
- BitBucket: possible internal error on refresh

- Changes pane:
- maximum size limit was not applied to images possibly resulting in out-of-memory errors
- possible out-of-memory error when selecting large file and having "core.autocrlf=input" configured
- Stage did nothing on "Added" conflicts
- fixed names on Unstage/Revert Hunk
- Working Tree window: Changes pane does not show file if it is made visible while a file already was selected

- Conflict Solver:
- external conflict solver: temporary files may be corrupted by replacing LF with CRLF

- Refresh:
- index files format 4 could not be read
- fails for repotool files which have been initialized with --worktree option
- Windows: might fail if file in repository was inaccessible (regression since 20.2)
- Setup: possible internal error with invalid msysgit-installation location
- Startup: --log with a file fails with "Cache has not yet been updated/initialized"

- Syntax coloring:
- Java: binary and hex literals were not detected correctly
- PHP: 'strings in quotes' are not detected in script mode
- MacOS 11: radio button selection changes invisibly when clicking a dfifferen tab item


SmartGit Portable 21.1
Fixed:
- Changes view: possible paint artefacts by resizing window


SmartGit Portable 20.2.5
Fixed:
- BitBucket: redundant "access token"-refresh requests if integration and OAuth is enabled
- internal error if java.library.path contains invalid entry

Log:
- File log: internal error when invoking Files, Rename
- Repositories, Refresh:
- after switching branches, obsolete submodules may remain
- after switching branches, state of new submodules should be populated

- Refresh: possible "submodule has error-prone admin area configuration" warning for main repositories created with "--separate-git-dir"
- Submodule, Initialize: problems with named submodules

Stash:
- Quick Stash behaves like normal Stash (showing a dialog)
- Stash on Demand: must not apply if operation stopped in abortable state (rebase, merge, ...)

- macOS: error parsing environment variables for 'fish' shell
- Windows: internal error checking directory type under special conditions

Other Noteworthy Changes:
- low-level property "smartgit.nodecache.subtrees.enabled" to disable subtree detection and functionality
- Tag grouping: "name" extraction should be honored in Branches view groups, too


SmartGit Portable 20.2.4
Fixed:
- Changes view: possible redundant refreshing if repository is a worktree
- Edit Commit Message: did not warn before modifying pushed commits if HEAD was selected
- Gerrit: detection fails if hooks/commit-msg is a symlink

Log:
- Files: Blame should not be available on submodules
- File Log:
- failed to open for deleted-by-us conflict
- (re)selecting "Index" node should reset Files/Changes view

- Investigate: possible "missing blob" error when selecting commit which contains removed submodule

Refresh:
- possible internal error for submodule entries containing // in .git/config
- Working Tree window: possible wrong matching between submodule entries in .git/config and .gitmodules

Syntax:
- Shell: invalid parsing of $'foo' or $(command parameter)


SmartGit Portable 20.2.3
Fixed:
- Branches: stashes might be missing in case of corrupted logs/refs/stash file (which still could be processed by Git)
- Changes View: no caret was visible
- Distributed Reviews: showed duplicate comments on left side

Log:
- Files: possible internal error related to deleted-by-us submodule conflicts
- Graph: possible "missing blob" error when selecting commit which contains removed submodule

- Refresh: possible internal error related to concurrently changing, renamed files
- Spell checker: could not read files with UTF-8-BOM
- Startup/opening repository: possible internal error related to file-system probing of special network drives

Syntax:
- fixed C# and SQL parsing of # lines, also fixing a performance problem
- Python: a line containing only a # was not detected as comment line

- Worktrees: for some minor internal operations the worktree's config file was search at the wrong location

Other Changes:
- Git-Flow: added low-level-property "gitflow.external.avh1.12"

Log:
- Details: possible confusion about "Tags", "Same State Tags" and "Closest Tags"
- Graph, Filtering: horizontal space better used for filter options

- having SmartGit running only in the tray, launching it a 2nd time reopens last repositories
- Linux: with dark theme comboboxes were hard to read


SmartGit Portable 20.2.2
Fixed:
- Changes View, Compare, ...: internal error trying to stage/apply a selection at the file end
- Log: possible internal error related to layouting very broad graphs
- Preferences: internal error clicking search icon in search input field
- Set Tracked Branch: possible internal error for branch names like "2%"

Syntax coloring:
- Java: 100f is not detected as one number, but as 100 and f
- JavaScript: missed RegEx string
- macOS 10.15: problem parsing environment variables if 'tcsh' is used as shell

Other Changes:
- updated SWT
- Linux: internal error changing screen DPI


SmartGit Portable 20.2.1
New Features and Improvements:
- Commit, line-length guides: added low-level properties commit.lineLengthGuide.limit1/limit2/limit3 to configure limits
- Log - Select Parent/Child Commit has less priority if a file is selected; makes is easier to use the same shortcut for other commands, e.g. Previous/Next Change

Fixed-Bugs:
- Files - "inactive" submodules did not show up despite of selected "Show Ignored File"
- Internal error selecting Files tab if it is in the same tab group as the Changes view
- Graph (File log) - for grouped tags, denote whether the first tag is signed

GitHub:
- During refresh comments vanished temporarily in Changes view

Refresh:
- Windows - possible false-positive modifications of symlinks
- Internal error in case of corrupted filemode bits in .git/index
- Subtree, Add - may fail with "terminal prompts disabled" message


SmartGit Portable 20.2.0
Fixed:
- Journal: possible internal error on drag and drop
- Log:
- Interactive Rebase, Modify/Split Commit: menu items should not be disabled because of merge commits (but though reject to operate because of merge commits)
- Refresh:
- Linux, macOS: performance regression related to timestamp precision
- Remove Worktree: possible internal error if working tree was open in multiple windows
- Stage: reported warnings about unrelated inaccessible directories
- Linux: internal error related to checking the version of the bundled Git
- macOS:
- Cmd+W did not close log or working tree window
- Stage: did not work for repository located directly at $HOME

Changed:
- Ignore dialog: added low-level property "ignore.defaultSelection" that influences which option is selected by default depending on the selected file count and names
- LFS: added low-level property "executable.addBinDirectoryToPath" to prepend the Git bin directory to the PATH, because otherwise for some configs git-lfs is not found
- Log:
- Graph: added low-level property "log.graph.drawSignedIcon" to hide the icon for signed commits


SmartGit Portable 20.1.5
Fixed:
- Journal: possible internal error on drag and drop
- Log:
- Interactive Rebase, Modify/Split Commit: menu items should not be disabled because of merge commits (but though reject to operate because of merge commits)
- Refresh:
- Linux, macOS: performance regression related to timestamp precision
- Remove Worktree: possible internal error if working tree was open in multiple windows
- Stage: reported warnings about unrelated inaccessible directories
- Linux: internal error related to checking the version of the bundled Git
- macOS:
- Cmd+W did not close log or working tree window
- Stage: did not work for repository located directly at $HOME

Changed:
- Ignore dialog: added low-level property "ignore.defaultSelection" that influences which option is selected by default depending on the selected file count and names
- LFS: added low-level property "executable.addBinDirectoryToPath" to prepend the Git bin directory to the PATH, because otherwise for some configs git-lfs is not found
- Log:
- Graph: added low-level property "log.graph.drawSignedIcon" to hide the icon for signed commits


SmartGit Portable 20.1.5
Fixed:
- Commit view with commit template message does not clean comment line (as Commit dialog does)
- Compare: options for ignoring whitespace are not remembered on "Remember as Default"
- Git-Flow, Start Feature: fixed wording in case of fast-forward merge is necessary
- Log: possible internal error with swapped node cache
- Passwords file: possible empty error dialog in case of corrupt passwords file
- Update check is disabled after setting up SmartGit as registered user
- Workaround for https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8253212


SmartGit Portable 20.1.4
Fixed:
- Changes: is not cleaned up correctly if file is selected and repository is removed outside SmartGit

Compare, Conflict Solver:
- internal error applying last (non-empty) line to other side

Conflict Solver:
- "compare.applyGitFilters" was not honored

Distributed Reviews:
- Integrate Pull Request: squashing fails with Git error "You cannot combine --squash with --commit"
- Files, Copy commands: internal error if invoked in bare repository
- Format Patch default external tool: was only available for head commit (regression)
- GitHub Enterprise/GitLab: client certificates without password couldn't be used

Log:
- Graph: Checkout offered to track even remote head branch, e.g. origin/HEAD
- Refresh: after opening repository, background tasks (like continuing SVN clone) were not scheduled
- Refresh: "File system loop encountered" as part of the node cache refreshing
- Settings: bugtracker-settings.xml was not read on first start

SVN:
- possible problems when trying to resume a clone
- Table control: with table.scrollToSelection=false setting a selection did not unselect previously selected files
- Working Tree window: title was not showing open repository under certain conditions


SmartGit Portable 20.1.3
New Features, Improvements:
- File Log, Blame, Investigate: rename detection for searching the file origin was limited to commits with up to 500 additions/removals
- Search for Repositories: added low-level property repositorySearch.autoSearchInDialog to disable the automatic search (useful for slow machines with hard drives)

Fixed Bugs:
- could not be started with + sign in the path
- BitBucket/others: Create Pull Request dialog contained duplicate target entries
- Distributes Reviews:
- Branches view: "Show Closed Pull Requests" had no effect
- External Tools: even if 2 refs are required, the tool could be invoked on a single ref
- Find Object, open repository: did not always select open repository
- File compare: stderr/stdout redirection for external tools did not work

GitHub:
- possible "404 not found" error for subsequent refresh after adding a comment
- Log: possible out-of-memory error while refreshing comments

Files:
- for file log, the filter pattern from the repository root log was initialized

Graph:
- when filtered, checking out a commit may erroneously check out mapped local/remote branch, e.g. different commit

- Linux: right-clicking set focus too late and hence showed an outdated context menu

Refresh:
- possible endless loop in file system benchmarking code
- Working Tree window: opening broken repository (without admin dir) broke subsequent refreshing and file monitoring until repository was closed and reopened

Windows:
- cloning to path with lower-case drive letter caused core.worktree to be set resulting in a notification of SmartGit - workaround for a Git bug


SmartGit Portable 20.1.2
New Features and Improvements:
- Commit template: set caret at the end of the first (valid) line (instead of the beginning)
- Log, Graph view: set low-level property "log.graph.showMergeCommitsGray" to false to not avoid gray merge commits
- Rebase Interactive, Investigate: don't stop after title when shortening message
- Search/Filter: set low-level property "fileSearchOrFilter.matchInside" to false to match the file name start
- Refresh: set low-level property "nodecache.reflogRoots.followSymlinks" to false to prevent possible "java.nio.file.FileSystemLoopException"

Fixed Bugs:
- Blame: didn't distinguish between trailing line ending or not
- Branches view: Del key did not invoke Delete command on focused remote
- Commit: committing many files created multiple commits
- Compare, Index Editor: did not keep posix file mode on save
- Files view: "intent-to-add" files showed up as "modified"
- Gravatar images: incorrectly sized when switching between display zoom level 100% 200% on the same machine
- JIRA integration (cloud instance): didn't re-ask for password in case of HTTP error 403
- Linux: launcher script suggested to try SWT_GTK3=0 though GTK2 is not supported any more

Log:
- Changes view: changes for "assume unchanged" files were not displayed (as in Working Tree window)
- Commit view: missing primary "parent" link for merge commit when "Follow Only First Parent" is selected
- Files view: internal error comparing Index with conflicts against commit
- Graph view: signed commit symbol was not supported by macOS system font
- window could be closed while a command was running
- pressing Ctrl+Shift+3 if all files are staged, did not focus the right table in the Files view
- Preferences, Colors tab: no editor colors were shown on macOS

Refresh:
- internal error if core.excludesfile points to invalid path
- internal error if HEAD points to non-local branch
- possible internal error related to core.ignoreCase=true on case-sensitive file system (e.g. Linux)
- removed but ignored, physically existing file showed up as untracked

Stage:
- possible internal error for file names containing special characters
- possible error "..System Volume Information"
- Windows: possible error "the following file has local modifications"
- SSH: using "System SSH" Git was not correctly configured for plink passing invalid arguments ("plink: unknown option "-o"")


SmartGit Portable 20.1.1
Fixed Bugs:
- Commit: internal error double-clicking entry in file completion popup
- Clone: internal error if clone finishes after the repository had been removed while cloning
- several commands: internal errors for "unusual" file names

Log:
- Files view (Linux): staging all files loses focus
- Refresh: working tree node doesn't show up after switching back to modified repository

Changes:
- Setup wizard: the Log vs. Working Tree option covers more changed options now
- updated Chinese translation


SmartGit Portable 20.1
Fixed Bugs:
- temp dir cleanup did not work reliable on shutdown
- Windows installer: did not uninstall "Open in SmartGit" explorer context menus
- Windows: tree control uses full row selection as on other platforms, because https://bugs.eclipse.org/bugs/show_bug.cgi?id=438479 seems to be fixed now

SVN:
- Log, Graph: "SVN revision" column won't immediately show up after opening SVN repository (but only after first refresh once it's already open)


SmartGit Portable 19.1.7
Fixed Bugs:
- BitBucket Server: possible internal error when refreshing (related to moved repositories)
- GitHub, Create Pull Request: fails if target repository name contains uppercase letters

Refresh:
- Git-LFS lock file information may fail to parse due to new timestamp format
- Git-LFS locks processing (for own locks) should be more tolerant in case of missing "owner"
- corrupt yml settings files (e.g. containing 0x00 bytes) fail SmartGit to start
- Investigate: showed DeepGit version in title


SmartGit Portable 19.1.6
Fixed Bugs:
- Git-Flow, Integrate/Finish Feature: may unexpectedly skip commits to rebase
- Opening bare repository may fail due to missing "logs" directory
- Internal error setting log level to FINE

Log:
- possible internal error for files obstructured by submodules

Log/Working tree window:
- memory leak when closing

Log Graph/Journal:
- internal error if a user name contained r

Journal:
- changing Auxiliary Ref in submodule did not refresh automatically

Ignore:
- internal error trying to ignore the root directory; resolved by only allowing directories containing only untracked (or ignored) files

Refresh:
- for notification "Repository ... has a locked index" the "Delete" button may not work if .git/index.lock has been removed in the meanwhile

GUI:
- text input field, e.g. filters: Ctrl+Z triggered accelerator instead of accepting as undo for text field


SmartGit Portable 19.1.5
New Features, Improvements:
GUI:
- Table control: added low-level property table.scrollToSelection to prevent scrolling to selection, e.g. after toggling the sort status

Fixed Bugs:
Compare:
- GitHub: query was not tolerant in case of missing parent repositories
- Rebasing commands (reordering, changing messages, ...): had problems with spaces in paths
- Opening a missing repository in 2 windows could result in an internal error when confirming the removal
- Possible internal error related to bare repositories
- Index Editor: did not show a warning if a file could not be saved, e.g. because it was locked by another application
- I18n: variable text parts could be replaced by "1", "2", ...
- Internal error saving passwords
- For commercial users with outdated licenses the evaluation did not work
- Applying changes from default settings (startup.settingsToReplaceFromDefaults) did not work when upgrading from old XML files
- resizing the window did not redraw the "Long lines" view causing garbage to be shown there
- forgots some options when using "Remember as Default"

Log:
- opening a freshly cloned shallow repository failed if a commit listed in .git/shallow was not present in the repository


SmartGit Portable 19.1.4
New Features, Improvements:
- Branches view: ability to copy stash name
- Changes view: include commit ID for "Could not find submodule commit" message
- Hosting providers: added low-level property
- smartgit.hostingProvider.skipCheckForConfigurations to prevent, e.g. notifications "Bitbucket Server integration is not yet configured"
- Added low-level property smartgit.pull.skipCheckForExternalCredentialsHelper to prevent notification "External Credentials Helper detected"

Fixed Bugs:
Log:
- Files: toggling Show Directories did not update the GUI immediately
- Working Tree refresh: possible internal error related to core.ignoreCase=true
- Clicking sourcetree:// URLs in Bitbucket did not open clone wizard any more

SVN:
- Submodule initialization was not possible if smartgit.svn.scanSubmodulesForNonSvnParents=true
- Refresh: uninitialized submodules don't show up if smartgit.svn.scanSubmodulesForNonSvnParents=true

UI:
- Ctrl+Shift+1/2/... did not work if commit message field in Commit/Message view
- Was focused
- Graph/Journal view: focus rect not drawn correctly
- Windows launchers were monitor-dpi-aware by accident
- Other Noteworthy Changes
- Dropped "Merge Directly To" 3rd-party tool due to a couple of problems with changed low-level Git API


SmartGit Portable 19.1.3
Fixed Bugs:
Log, Graph:
- Enter did not the same as double-click
- Focus rect is not drawn any more
- Compare or others: possible internal error applying change
- Output: for Git >= 2.23, progress output like "Compressing objects:" is not properly-recognized anymore
- Stash On Demand: should not fail with "Your local changes have been stashed away, but could not be reapplied." if stashing untracked files is disabled
- Windows: if some special environment variables were set, e.g. JAVA_TOOL_OPTIONS, the launchers did not recognize the bundled JRE and possibly tried to use an outdated one from the system causing an internal error


SmartGit Portable 19.1.2
Fixed Bugs:
Git-Flow:
- Finish Release: Tag Message is not set to tag
- Finish Feature/Hotfix/Release: should not remeove remote branch if "push" option is deselected

Log:
- Commit view: temporary inconsistency might caused assertion

Graph:
- Could become inconsistend between selected refs and shown commits
- When merging a tag (by right-clicking it), commit or other branch name on commit was used instead of the tag
- Adding/removing tag from local branch did not properly update local/remote state (orange vs. black nodes)
- Rebasing state: "done" labels might be in wrong order
- Repository state banner text could get focus with blinking caret, e.g. after having clicked (Rebase) Continue
- Internal error trying to open bare repository containing .git admin directory
- Window | Files tried to focus Directories view, even if hidden
- Pull: possible internal error if repository config could not be read
- Refresh: - reduced short-term memory usage
- Stash on Demand: asked to stash untracked files even if option to stash untracked files was unselected

SVN:
- Cherry Picking a not yet pushed commit (= a commit without a revision) fails with "Aborting commit due to empty commit message "forgot" https credentials

GUI:
- Possible internal error expanding a tree control


SmartGit Portable 19.1.1
Fixed Bugs:
- Commit, Discard: invoking Compare for renamed file does not show source file, but only empty file

Git-Flow:
- Integrate did not honor custom base (if configured)
- Start Hotfix fails if an unrelated version-tag is present
- Start Release may suggest invalid (already existing) release name

- Tools: tools with only ${dirSelect} did not show up in menu
- Startup: under certain conditions always asks for confirmation to send bug traces


SmartGit Portable 19.1.0
- GitLab: Open-link did not work for repositories in subgroups

SVN:
- Cloning created 2 smartgit-*.tmp files in repository
- Duplicate tooltip in the status bar while cloning

GUI:
- Docking: unmaximizing a view with double click could close another view
- If its (X) button was positioned at the same location