{"id":13579757,"url":"https://github.com/kr-g/gitonic","last_synced_at":"2026-01-16T13:06:21.826Z","repository":{"id":50555796,"uuid":"421080505","full_name":"kr-g/gitonic","owner":"kr-g","description":"gitonic simplifies working with multiple git repositories","archived":false,"fork":false,"pushed_at":"2025-11-28T17:00:52.000Z","size":10980,"stargazers_count":29,"open_issues_count":5,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-30T02:49:40.187Z","etag":null,"topics":["developer-tools","git","git-tool","git-workspace","gitonic","python","source-control","tk","tkinter"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/gitonic","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kr-g.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"kr-g","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-10-25T15:29:06.000Z","updated_at":"2025-11-28T17:00:55.000Z","dependencies_parsed_at":"2023-11-16T10:30:54.422Z","dependency_job_id":"ce1d1e5a-7350-470b-84c6-1a548d914d29","html_url":"https://github.com/kr-g/gitonic","commit_stats":{"total_commits":205,"total_committers":2,"mean_commits":102.5,"dds":0.3853658536585366,"last_synced_commit":"54fb1b9ba68e0b0bdb645b22fe080c959ca671b2"},"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/kr-g/gitonic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kr-g%2Fgitonic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kr-g%2Fgitonic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kr-g%2Fgitonic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kr-g%2Fgitonic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kr-g","download_url":"https://codeload.github.com/kr-g/gitonic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kr-g%2Fgitonic/sbom","scorecard":{"id":569127,"data":{"date":"2025-08-11","repo":{"name":"github.com/kr-g/gitonic","commit":"5a57a373030719722eb14e34fc1dec90fa4181f4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":2,"reason":"3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: pipCommand not pinned by hash: install_linux.sh:8","Info:   0 out of   1 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-20T15:50:25.037Z","repository_id":50555796,"created_at":"2025-08-20T15:50:25.037Z","updated_at":"2025-08-20T15:50:25.037Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478916,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["developer-tools","git","git-tool","git-workspace","gitonic","python","source-control","tk","tkinter"],"created_at":"2024-08-01T15:01:42.740Z","updated_at":"2026-01-16T13:06:21.821Z","avatar_url":"https://github.com/kr-g.png","language":"Python","readme":"[![PEP-08](https://img.shields.io/badge/code%20style-PEP08-green.svg)](https://www.python.org/dev/peps/pep-0008/)\n\n\nyou are reading VERSION = v0.18.6-develop\n\nversion v0.18.0 will come with some bigger changes.\n\n\nread latest news here:\n\n[`CHANGELOG`](https://github.com/kr-g/gitonic/blob/main/CHANGELOG.md)\n\n\nolder versions:\n\n[`OLD VERSIONS`](https://github.com/kr-g/gitonic/tags)\n\n\n\n\n# gitonic \n\ngitonic simplifies working with multiple git repositories.\n\n\ngitonic comes with an easy to use Tkinter GUI.\n\n\n# background \n\nwhere software components/ artefacts are stored in multiple repositories \nseparately gitonic helps to keep track\n\n\n# what's new ?\n\nCheck\n[`CHANGELOG`](https://github.com/kr-g/gitonic/blob/main/CHANGELOG.md)\nfor latest ongoing, or upcoming news.\n\n\n# limitations\n\nCheck \n[`BACKLOG`](https://github.com/kr-g/gitonic/blob/main/BACKLOG.md)\nfor open development tasks and limitations.\n\nIMPORTANT:\n\n`gitonic` interacts with `git` just like starting in bash / commandline.\nat the present time there is **no additional** error checking. \nthis must be done by checking the log tab manually where all cmdline output goes.\n\n\n# recommended readings prior using gitonic\n\nan introduction on how git works in general can be found in the official git documentation in section\n[`Git-Basics`](https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository).\n\nanother very good book \n[`progit2`](https://github.com/progit/progit2)\ncan be downloaded from the official github project page.\nunder [`releases`](https://github.com/progit/progit2/releases) \nare different formats such as pdf, epub ...\n\n\n# how to use\n\ntodo - documentation pending\n\n\n## working with mutiple git repositories\n\nwhen adding a git repo to the tracked list, and staging files (from different repositories)\na following commit command is executed on **all** repositories in the tracked list with the same commit message.\nthis is not a bug; moreover it is intened to be like that.\n\n\n# hotkeys \n\nfollowing list contains all hotkeys:\n\n| key | action |\n|---|---|\n| Esc | minimize the app window |\n| Esc Esc | press quickly Esc twice to close the app |\n| Control-p | pull all tracked gits |\n| Control-Shift-p | fetch all tracked gits |\n| F1 | refresh all in changed files view |\n| F2 | select all in changed files view |\n| F3 | un-select all in changed files view |\n| F5 | select previous tab |\n| F6 | select next tab |\n| Alt-a | stage file(s) in git |\n| Alt-q | un-stage file(s) in git |\n| Alt-w | diff file(s) |\n| Alt-d | difftool file(s) |\n| Alt-f | auto format file(s) with `black` PEP08 |\n| Alt-c | go to commit tab and clear commit message field(s) |\n| Alt-x | commit file(s) |\n| Alt-s | push git(s) |\n| Alt-e | commit and push git(s), like pressing Alt-x and Alt-s |\n\nHINT:\n\nif not responding to a hotkey, make sure that CapsLock is disabled\n\n\n# file status staged / unstaged \n\nthe file status is the same as when calling \n[`git status --porcelain`](https://git-scm.com/docs/git-status#_options).\nsee also under [`git status output`](https://git-scm.com/docs/git-status#_output).\n\n| status | comment |\n|---|---|\n| M | modified |\n| A | added |\n| D | deleted |\n| R | renamed |\n| C | copied |\n| U | updated but unmerged |\n| ?? | not in git. untracked |\n\nNOTE:\n`gitonic` use porcelain format version 1.\n\n\n# file formatter \n\nit is possible to configure external formatter tools depending on the file extension.\n\n`gitonic` will use the configuration file `~/.gitonic/formatter.json`.\n\nthe general structure is:\n\n    {\n      \".file-ext\": {\n        \"cmd\": \"full-path-to-command\",\n        \"para\": [\n          \"%file\"\n        ]\n      }\n    }\n\nwhere `.file-ext` is a simple file extension such as `.py`, \nor a comma separated list of extensions `.c,.h,.cpp`.\nwild-cards are not supported.\n\nwhere `para` is an array of cmd-line options passed to the formatter command\nwhere `%file` is a placeholder and replaced by the file name\n\nfor different file extensions `gitonic` will call the formatter accordingly \neven if the selected files are of different types (extensions)\n\n\n## templates for python pep08 formatters\n\nall of the following tools are part of `gitonic` standard installation\n(available as extra, see below under installation). \nchoose the one what fits best for your needs.\n\n\n### autopep8\n\n[autopep8](https://github.com/hhatto/autopep8)\nis a python formatter what fixes problems reported by \n[pycodestyle](https://github.com/PyCQA/pycodestyle).\npycodestyle is an official tool from python's code quality authority.\n\n    {\n      \".py\": {\n        \"cmd\": \"autopep8\",\n        \"para\": [\n          \"-i\",\n          \"%file\"\n        ]\n      }\n    }\n\nto use the same code formatter also for \n[`cython's`](https://github.com/cython/cython) \nfiles with extension `.pyx` change the setting to\n\n    {\n      \".py,.pyx\": {\n        \"cmd\": \"autopep8\",\n        \"para\": [\n          \"-i\",\n          \"%file\"\n        ]\n      }\n    }\n\nor in case autopep8 is installed in a venv, e.g.\n\n    {\n      \".py,.pyx\": {\n        \"cmd\": \"~/gitonic/.venv/bin/autopep8\",\n        \"para\": [\n          \"-i\",\n          \"%file\"\n        ]\n      }\n    }\n\n\n\n### black\n\n[black](https://github.com/psf/black)\n\n    {\n      \".py\": {\n        \"cmd\": \"black\",\n        \"para\": [\n          \"%file\"\n        ]\n      }\n    }\n\n\n### yapf \n\n[yapf](https://github.com/google/yapf)\n(google python code formatter). \n\n    {\n      \".py\": {\n        \"cmd\": \"yapf\",\n        \"para\": [\n          \"-i\",\n          \"%file\"\n        ]\n      }\n    }\n\n\n## templates for c, c++ formatters\n\nall of the following tools are **NOT** part of `gitonic` standard installation. \n\n\n### uncrustify\n\n[`uncrustify`](https://github.com/uncrustify/uncrustify) \nis a code formatter for c, c++ (and other languages).\n\nhere in this config sample it is configured for extensions `.c`, `.h`, and `.cpp`.\n\nIMPORTANT: `uncrustify` requires an additional config file, a sample can be found here\n[`uncrustify.cfg`](https://github.com/uncrustify/uncrustify/blob/master/forUncrustifySources.cfg)\n\nhere in the sample the `uncrustify` config file is placed in path `~/.gitonic/uncrustify.cfg`.\nmake sure that it is there.\n\nthe following needs to be placed inside `~/.gitonic/formatter.json`\n\n\n    \".c,.h,.cpp\": {\n        \"cmd\": \"uncrustify\",\n        \"para\": [\n              \"-c\",\n              \"~/.gitonic/uncrustify.cfg\",\n              \"--replace\",\n              \"%file\",\n              \"--no-backup\",\n              \"--if-changed\"\n        ]\n    }\n\n\n# custom context menu handler \n\nwhen clicking on the `changes` tab right a context memu opens offering \nto open the system file manager tool (file explorer) \nat the base git repo path or at the changed file path.\n\nin addition it is possible to add own custom context menu entries here.\nconfiguration is done with `~/.gitonic/contextmenu.json` file.\n\nthe general structure is:\n\n    {\n    \"acontext-name\": {\n        \"expr\": \"*\",\n        \"changes-all|file|repo\": [\n          {\n            \"name\": \"a text $_GIT\",\n            \"para\": [\n              \"cmd-path\",\n              \"whatever_param=$GIT\"\n            ]\n          },\n          {\n            \"name\": \"some other text $_PATH\",\n            \"para\": [\n              \"cmd-path2\",\n              \"whatever_param=$PATH\"\n            ]\n          },\n          ...\n        ]\n      },\n      ...\n    }\n\nwhere `changes-all|file|repo` is the section where the context menu should appear.\n- `changes-file` is the right section where all files are listed\n- `changes-repo` is the left section where all repos are listed\n- `changes-all` will appear in both (left and right section)\n\nhere the variables `$GIT`, `$FILE`, `$PATH`, `$NAME`, or `$PYTHON` \nare replaced by the corrosponding path before execution. \nwhere `$PYTHON` expands to `sys.executable` from `gitonic` runtime.\nand `$NAME` is a placeholder for `os.path.basedir`,\nand `$PATH` for `os.path.dirname`.\n\nthe variables `$_GIT`, `$_FILE`, `$_PATH`, or `$_NAME` are the shorten\npath specifiers with `~` replacing the users home folder.\n\nthe `expr` key contains a single file pattern, or a list of \nfile patterns - when to enable the context menu. \nthe file pattern is following Unix filename pattern matching.\n\nthe `workdir` key will change the current working directory before running\nthe command.\n\nthe `name` contains the text to display in the menu, \nand `para` the command-binary plus params as array.\n\nthe context name as such can have any value \n(as long it is unique in the structure).\n\n\nbelow a sample `~/.gitonic/contextmenu.json` file \nfor running on linux with xfce.\n\n    {\n      \"term-ctx\": {\n        \"expr\": \"*\",\n        \"changes-all\": [\n          {\n            \"name\": \"Open Terminal at $_GIT\",\n            \"para\": [\n              \"xfce4-terminal\",\n              \"--default-working-directory=$GIT\"\n            ]\n          },\n          {\n            \"name\": \"Open Terminal at $_PATH\",\n            \"para\": [\n              \"xfce4-terminal\",\n              \"--default-working-directory=$PATH\"\n            ]\n          },\n          {\n            \"name\": \"Edit .gitignore at $_GIT\",\n            \"para\": [\n              \"xed\",\n              \"$GIT/.gitignore\"\n            ]\n          }\n        ]\n      },\n      \"basic-ctx\": {\n        \"expr\": \"*\",\n        \"changes-file\": [\n          {\n            \"name\": \"less $NAME at $_PATH\",\n            \"para\": [\n              \"xfce4-terminal\",\n              \"-x\",\n              \"less\",\n              \"$FILE\"\n            ]\n          },\n          {\n            \"name\": \"edit $NAME at $_PATH\",\n            \"para\": [\n              \"xed\",\n              \"$FILE\"\n            ]\n          },\n          {\n            \"name\": \"vi $NAME at $_PATH\",\n            \"para\": [\n              \"xfce4-terminal\",\n              \"-x\",\n              \"vi\",\n              \"$FILE\"\n            ]\n          }\n        ]\n      },\n      \"spyder-ctx\": {\n        \"expr\": \"*.py\",\n        \"changes-file\": [\n          {\n            \"name\": \"spyder python $_FILE\",\n            \"para\": [\n              \"~/spyder/.venv/bin/spyder\",\n              \"$FILE\"\n            ]\n          }\n        ]\n      },\n      \"autopep8-ctx\": {\n        \"expr\": \"*.py\",\n        \"changes-file\": [\n          {\n            \"name\": \"autopep8 python $_FILE\",\n            \"para\": [\n              \"~/repo/gitonic/.venv/bin/autopep8\",\n              \"-i\",\n              \"$FILE\"\n            ]\n          }\n        ]\n      },\n      \"geany-path\": {\n        \"expr\": [\n          \"*.c\",\n          \"*.cpp\",\n          \"*.h\"\n        ],\n        \"changes-file\": [\n          {\n            \"name\": \"geany c $_FILE\",\n            \"para\": [\n              \"geany\",\n              \"$FILE\"\n            ]\n          }\n        ]\n      },\n      \"uncrustify-path\": {\n        \"expr\": [\n          \"*.c\",\n          \"*.cpp\",\n          \"*.h\"\n        ],\n        \"changes-file\": [\n          {\n            \"name\": \"uncrustify c $_FILE\",\n            \"para\": [\n              \"uncrustify\",\n              \"-c\",\n              \"~/.gitonic/uncrustify.cfg\",\n              \"--replace\",\n              \"$FILE\",\n              \"--no-backup\",\n              \"--if-changed\"\n            ]\n          }\n        ]\n      },\n      \"git-base-tools\": {\n        \"expr\": [\n          \"*\"\n        ],\n        \"workdir\": \"$GIT\",\n        \"changes-all\": [\n          {\n            \"name\": \"git push $_GIT\",\n            \"para\": [\n              \"git\",\n              \"push\"\n            ],\n            \"logexpert\" : true\n          },\n          {\n            \"name\": \"git pull $_GIT\",\n            \"para\": [\n              \"git\",\n              \"pull\"\n            ],\n            \"logexpert\" : true\n          },\n          {\n            \"name\": \"gitk $_GIT\",\n            \"para\": [\n              \"gitk\"\n            ]\n          },\n          {\n            \"name\": \"git gui $_GIT\",\n            \"para\": [\n              \"git\",\n              \"gui\"\n            ]\n          }\n        ]\n      }\n    }\n\n\nremark:\nthe sample config file provides support for opening\n- terminal, in this case `xfce4-terminal`, can be replaced by e.g. `xterm` - depending on your distribution\n- open file with `less`, `xed`, or `vi` - might be different with your distribution (see line above)\n- `.gitignore` file for selected repo with [`xed`](https://en.wikipedia.org/wiki/Xed)\n- [`spyder-ide.org`](https://spyder-ide.org/), for files matching `*.py`\n- [`geany`](https://www.geany.org/), for files matching `*.c`, `*.cpp`, `*.h`\n- `gitk` and `git gui` the base git tools which are automatically installed with `git`\n- \n\n\n**limitation:**\n\nat the present time the context menu only works on the underlying file (row) in the table.\nthere is **no** support for multiple files (selection) as of now.\n\n\n# related\n\nplugin for thonny ide \n[`thonny-gitonic`](https://github.com/kr-g/thonny-gitonic)\n\n\n# platform\n\ntested on python3, and linux\n\n\n# contribution\n\nany contribution is welcome !\n\nplease create one issue for each proposal, or merge request.\n\n\n# installation\n\nit is recommented to install gitonic into a \n[virtual environment](https://docs.python.org/3/library/venv.html).\nthe following script will install gitonic in your home directory (linux).\n\n\n    #!/bin/bash\n    \n    # create virtual environment \n    \n    cd ~\n    python3 -m venv gitonic\n    \n    cd gitonic\n    \n    source ./bin/activate\n    \n    # install gitonic with all pep08 and meld\n    \n    pip3 install gitonic[PEP08,MELD]\n\n\nthis script can be found here\n[`install_linux.sh`](install_linux.sh)\n\nto install just `gitonic` without the extras replace with\n\n    # install gitonic \n    ~/gitonic/bin/pip install gitonic\n\n\n\nto run gitonic use the script from the virtual environment directly \n(no prior venv activation required)\n\n    ~/gitonic/bin/gitonic\n    \n \nit is recommented to create some alias in `.bash_aliases`. \nadd the following line at the end of `.bash_aliases`\n\n    alias gitonic=~/gitonic/bin/gitonic\n    \n    alias gtcd=~/gitonic/bin/gtcd\n    alias gtls=~/gitonic/bin/gtls\n    \n\n## other installation dependencies\n\nto use git difftool, and mergetool, download and install a 3rd party tool like \n[`meld merge`](https://meldmerge.org/)\nand configure like described below.\n\nnote: \n\nwith gitonic \u003e= v0.12.0 meld is already included in standard installation\n(as extra, see also under installation) and download is obsolete when \ninstalled as part of gitonic. you just need to configure git then.\n\nin case meld installation fails install into the virtual environment \n\n    cd ~\n    ~/gitonic/bin/pip install PyGObject\n\n\n### all installation options\n\noptions can be combined by `|`.\nuse \n\n    ~/gitonic/bin/pip install gitonic[*options*] \n\n\n|option|included packages|\n|---|---|\n| PEP08 | pycodestyle, flake8, autopep8 |\n| PEP08_BLACK | pycodestyle, flake8, black |\n| PEP08_FULL | pycodestyle, flake8, autopep8, black, yapf |\n| MELD | meld |\n| DEFAULT | pycodestyle, flake8, autopep8, meld |\n\n\n## installation on raspberry pi, or fedora\n\nwhen during startup an error is thrown, refer to \n[installation on raspberry, fedorra](https://github.com/kr-g/gitonic/issues/6)\n\n\n# git configuration\n\nadd a `.git-credentials` file as described here \n[`git-credentials`](https://git-scm.com/docs/git-credential-store)\n\n\nNOTE: the structure for an entry in `.git-credentials` is as following, \n e.g. for github put a single text line with\n\n    https://your-user:your-personal-classic-token@github.com\n\n\nNOTE: `github` personal access tokens (classic) are maintained on `github` under:\n\n    profile \u003e settings \u003e developer settings \u003e personal access tokens \u003e tokens (classic)\n\n\nadd a `.gitconfig` file as described here\n[`git-config`](https://git-scm.com/docs/git-config)\n\nand configure for diff and merge tools. \nNOTE: you need to install the diff-tool e.g. \n[`meld merge`](https://meldmerge.org/) manually, \nif meld is not installed pressing the button will have no effect.\n\n\n    [user]\n        name = your name\n        email = you@email.tld\n        \n    [credential]\n        helper = store\n\n    [diff]\n        tool = meld\n    [difftool]\n        prompt = false\n    [difftool \"meld\"]\n        cmd = meld --newtab \"$LOCAL\" \"$REMOTE\"\n\n    [merge]\n        tool = meld\n    [mergetool \"meld\"]\n        # Choose one of these 2 lines (not both!) \n        # cmd = meld \"$LOCAL\" \"$MERGED\" \"$REMOTE\" --output \"$MERGED\"\n        cmd = meld --newtab \"$LOCAL\" \"$BASE\" \"$REMOTE\" --output \"$MERGED\"\n\n\n# additional notes \n\nthe following tools are part of the standard git distribution \n\n- [`gitk`](https://git-scm.com/docs/gitk)\ngit history browser\n- [`git-gui`](https://git-scm.com/docs/git-gui/)\na git front end\n\nother gui-clients are listed on [`git-scm`](https://git-scm.com/downloads/guis)\n\n\n# internals\n\nfollowing files are used:\n\n|file|description|\n|---|---|\n|~/.gitonic/commit.json|the last commit messages show in the combo box|\n|~/.gitonic/config.json|configuration settings|\n|~/.gitonic/contextmenu.json|configuration for context menu on changes tab|\n|~/.gitonic/formatter.json|configuration for external formatter tools|\n|~/.gitonic/tracked.json|tracked git repositories|\n|~/.gitonic/socket|internal use|\n\n\nHINT:\ncrash after configuration change can be resolved by changing the setting manually \nin `config.json`, or delete the config file to fall back to the defaults\n\n\n# license\n\ngitonic is released under the following\n[`LICENSE`](https://github.com/kr-g/gitonic/blob/main/LICENSE.md)\n\ngit logos from [git-scm](https://git-scm.com/downloads/logos)\n\n\n## included components licenses\n\n[tkinter-tooktip](https://github.com/gnikit/tkinter-tooltip)\n\n[google-material-icons](https://github.com/google/material-design-icons)\n\n\n# support and donations\n\nsupport the further development of `gitonic` with a donation of your choice.\n\n[support and donnations](https://github.com/kr-g/gitonic/wiki/Support)\n\nthank you !!!\n\n","funding_links":["https://github.com/sponsors/kr-g"],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkr-g%2Fgitonic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkr-g%2Fgitonic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkr-g%2Fgitonic/lists"}