{"id":13713403,"url":"https://github.com/hotoo/gitopen","last_synced_at":"2026-03-11T04:03:47.651Z","repository":{"id":1014148,"uuid":"37975092","full_name":"hotoo/gitopen","owner":"hotoo","description":":twisted_rightwards_arrows: Open git/hg/svn remote url via web browser from terminal.","archived":false,"fork":false,"pushed_at":"2026-03-02T03:41:51.000Z","size":2534,"stargazers_count":42,"open_issues_count":8,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-05T15:58:41.298Z","etag":null,"topics":["git","gitcafe","github","gitlab"],"latest_commit_sha":null,"homepage":"https://hotoo.github.io/blog/post/gitopen","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hotoo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":null,"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":["hotoo"]}},"created_at":"2015-06-24T09:24:30.000Z","updated_at":"2026-03-02T03:41:47.000Z","dependencies_parsed_at":"2024-01-12T20:57:46.900Z","dependency_job_id":"a4b4b68c-1c88-4950-8fcb-497e1769f4d4","html_url":"https://github.com/hotoo/gitopen","commit_stats":{"total_commits":162,"total_committers":6,"mean_commits":27.0,"dds":0.07407407407407407,"last_synced_commit":"5a9af95d65fc032761bcb358825b638f28c84de5"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/hotoo/gitopen","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hotoo%2Fgitopen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hotoo%2Fgitopen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hotoo%2Fgitopen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hotoo%2Fgitopen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hotoo","download_url":"https://codeload.github.com/hotoo/gitopen/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hotoo%2Fgitopen/sbom","scorecard":{"id":469525,"data":{"date":"2025-08-11","repo":{"name":"github.com/hotoo/gitopen","commit":"b038a19e38f64fc99c33789e92d1d66a794a7295"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/9 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":"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":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/node.js.yml:1","Info: no jobLevel write permissions found"],"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":"Maintained","score":8,"reason":"10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/node.js.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/hotoo/gitopen/node.js.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/node.js.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/hotoo/gitopen/node.js.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/node.js.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/hotoo/gitopen/node.js.yml/master?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/node.js.yml:30","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 npmCommand 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":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"10 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T13:28:44.533Z","repository_id":1014148,"created_at":"2025-08-19T13:28:44.537Z","updated_at":"2025-08-19T13:28:44.537Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30370286,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T21:41:54.280Z","status":"online","status_checked_at":"2026-03-11T02:00:07.027Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["git","gitcafe","github","gitlab"],"created_at":"2024-08-02T23:01:35.185Z","updated_at":"2026-03-11T04:03:47.634Z","avatar_url":"https://github.com/hotoo.png","language":"JavaScript","readme":"\n# gitopen\n\n[![NPM version][npm-badge]][npm-url]\n[![Build status][travis-badge]][travis-url]\n[![Coveralls status][Coveralls-badge]][coveralls-url]\n\n[npm-badge]: https://img.shields.io/npm/v/gitopen.svg?style=flat\n[npm-url]: https://www.npmjs.com/package/gitopen\n[travis-badge]: https://travis-ci.org/hotoo/gitopen.svg\n[travis-url]: https://travis-ci.org/hotoo/gitopen\n[coveralls-badge]: https://coveralls.io/repos/hotoo/gitopen/badge.svg?branch=master\n[coveralls-url]: https://coveralls.io/r/hotoo/gitopen\n\nOpen git/hg/svn remote url in web browser from terminal.\n\n![demo](./demo.gif)\n\nSupport:\n\n* Mac OS X\n* Windows\n* Linux/Unix\n\n,\n\n* git\n* hg\n* svn\n\nand\n\n* [GitHub](https://github.com/)\n* [GitLab](https://gitlab.com/)\n* [BitBucket](https://bitbucket.org/)\n* [Gitea](https://gitea.com/)\n* ~~[GitCafe](https://gitcafe.com/)~~ Merged into coding.net.\n* [Coding](https://coding.net/)\n* [gitee](https://gitee.com/)\n* [CSDN gitcode.net](https://gitcode.net/)\n* [AntCode](https://code.alipay.com/)\n* Custom\n\nIf you are use [GitBucket](https://github.com/takezoe/gitbucket),\n[tell me please](https://github.com/hotoo/gitopen/issues/new).\n\n## Install\n\n```\n$ npm install -g gitopen\n```\n\n## Usage\n\n```\n$ git remote -v\norigin\tgit@github.com:hotoo/gitopen.git (fetch)\norigin\tgit@github.com:hotoo/gitopen.git (push)\n$ git branch\n* master\n$ cd subdir\n\n$ gitopen                       # Open git repository homepage, like: https://github.com/hotoo/gitopen\n$ gitopen :master               # Open git repository on given branch name.\n$ gitopen -b master             # Same the `:master`\n$ gitopen issues                # https://github.com/hotoo/gitopen/issues\n$ gitopen #1                    # https://github.com/hotoo/gitopen/issues/1\n$ gitopen pr                    # New a pull-request\n$ gitopen !1                    # Open merge/pull request by id.\n$ gitopen prs                   # https://github.com/hotoo/gitopen/pulls, alias `pulls`, `mrs`.\n$ gitopen wiki                  # Open wiki pages.\n$ gitopen release               # Open releases page.\n$ gitopen tags                  # Open tags page.\n$ gitopen commits               # Open commits page.\n$ gitopen brs                   # Open branches page, alias `branchs` and `branches`.\n$ gitopen {hash}                # Open commit page by hash code.\n\n$ gitopen README.md             # Open remote blob url. default use current working branch.\n$ gitopen README.md -b branch   # Open remote blob url by given branch.\n$ gitopen README.md :branch     # Open remote blob url by given branch.\n$ gitopen path/to/dir           # Open remote tree url. default use current working branch.\n\n# global command.\n$ gitopen @lizzie               # https://github.com/lizzie\n$ gitopen @hotoo/gitopen        # https://github.com/hotoo/gitopen\n```\n\n## Configuration\n\nDefault support [github.com](https://github.com/),\n[bitbucket.org](https://bitbucket.org/),\n[gitlab.com](https://gitlab.com/),\n[gitea.com](https://gitea.com/),\n~~[gitcafe.com](https://gitcafe.com/)~~,\n[coding.net](https://coding.net/),\n[gitee.com](https://gitee.com/),\n[AntCode](https://code.alipay.com/)\nand CSDN [gitcode.com](https://gitcode.net/).\n\nIf you are use [GitHub Enterprise](https://enterprise.github.com/),\n[GitLab Community Edition (CE), GitLab Enterprise Edition (EE)](https://gitlab.org/),\n[Atlassian Stash](https://www.atlassian.com/software/stash),\n~~[GitCafe Enterprise](https://enterprise.gitcafe.com/)~~\nYou need config in ~/.gitconfig file:\n\n```\n[gitopen \"github.company.com\"]\n\ttype = github\n\tprotocol = https\n[gitopen \"gitlab.company.net\"]\n\ttype = gitlab\n\tprotocol = http\n```\n\nYou can config it by git command-line:\n\n```bash\n; global\n$ git config --global gitopen.github.company.com.type github\n$ git config --global gitopen.github.company.com.protocol https\n\n; set local repo default remote name.\n$ git remote add gitlabRemote git@gitlab.com:hotoo/gitopen.git\n$ git config gitopen.remote gitlabRemote\n```\n\n\nAlso you can config it in ~/.gitopenrc file for global settings:\n\n```yaml\ngithub.company.com:\n  type: github\n  protocol: https\ngitlab.company.net:\n  type: gitlab\n  protocol: http\n```\n\n- `github.company.com`, `gitlab.company.net` is your company's git web server domain name.\n  - `type` is the type of your company's git web server, support `github`, `gitlab`, `gitbucket`, `gitea`, `coding`, `gitee`, `gitcode`, `antcode`.\n  - `protocol`: protocol of your company's git web server, `http` or `https`.\n\nElse if you are using other custom web system build your owner git server, you need config like:\n\n```yaml\ngit.example.com:\n  type: custom\n  protocol: http\n  scheme:\n    issues: /path/to/issues\n    wiki: /path/to/wikis\n    more: [reference to github scheme](./lib/scheme/github.js)\n    ...\n```\n\nYou can git alias in ~/.gitconfig:\n\n```\n[alias]\n  open = !gitopen\n```\n\nThen you can use command like:\n\n```\n$ git open\n```\n\n## gitopen Commands\n\n### $ gitopen\n\nOpen git repository homepage.\n\n### $ gitopen issues\n\nOpen git repository issues list page.\n\n### $ gitopen issue [title]\n\nOpen new issue with title (optional).\n\n### $ gitopen #1\n\nOpen git repository issue by id.\n\n### $ gitopen pulls\n\nOpen git repository pulls list page.\n\n### $ gitopen pull [branch-name]\n\nOpen pull request or merge request from given branch or current working branch\nfor git repository.\n\nalias:\n\n* `$ gitopen pr`\n* `$ gitopen mr`\n\nfor example:\n\n```\n$ gitopen pr        # current working branch to compare default branch.\n$ gitopen pr a      # given branch(a) to compare default branch.\n$ gitopen pr a b    # branch b to compare branch a.\n$ gitopen pr a...b  # branch b to compare branch a.\n```\n\n### $ gitopen !1\n\nOpen git repository pull request or merge request by id.\n\nalias:\n\n* `$ gitopen pr1`\n* `$ gitopen mr#1`\n\nsupport `@`, `/`, `#`, `:`, `-` or without sparator.\n\n### $ gitopen blame path/to/file\n\nOpen file blame information page.\n\n### $ gitopen commits\n\nOpen git repository commits list page.\n\nalias:\n\n* `$ gitopen commit`\n* `$ gitopen ci`\n\n### $ gitopen {hash}\n\nOpen  commit page by hash code.\n\n### $ gitopen wiki\n\nOpen git repository wiki home page.\n\nalias:\n\n* `$ gitopen wikis`\n\n### $ gitopen tags\n\nOpen git repository tags list page.\n\nalias:\n\n* `$ gitopen tag`\n\n### $ gitopen milestones\n\nOpen git repository milestones list page.\n\n### $ gitopen milestones@id\n\nOpen git repository milestones by given id.\n\nalias:\n\n* `$ gitopen milestone@id`\n\nsupport `@`, `/`, `#`, `:`, `-` sparator.\n\n### $ gitopen milestone\n\nOpen new milestone for git.\n\n### $ gitopen releases\n\nOpen git repository releases list page.\n\nalias:\n\n* `$ gitopen release`\n\n### $ gitopen release new [tag-name]\n\nOpen new release by tag name.\n\n### $ gitopen release edit \u003ctag-name\u003e\n\nEdit release by tag name.\n\n### $ gitopen filename [--branch \u003cbranch\u003e]\n\nOpen given file on given branch, default use current working branch.\n\nalias:\n\n* `$ gitopen filename :branch`\n* `$ gitopen filename -b branch`\n\n### $ gitopen directory [--branch \u003cbranch\u003e]\n\nOpen given directory on given branch, default use current working branch.\n\nalias:\n\n* `$ gitopen directory :branch`\n* `$ gitopen directory -b branch`\n\n### $ gitopen snippet\n\n[LOCAL COMMAND] Open new snippet.\n\n[GLOBAL COMMAND] Open https://gist.github.com/\n\nalias:\n\n* `$ gitopen snip`\n* `$ gitopen gist`\n\n### $ gitopen network\n\nOpen network page.\n\n### $ gitopen @profile\n\n[GLOBAL COMMAND] Open profile page on GitHub.\n\n### $ gitopen @profile/repository-name\n\n[GLOBAL COMMAND] Open given repository homepage on GitHub.\n\n## hgopen Commands\n\nSupport all of gitopen in repository local commands (not support global commands), like:\n\n* `$ hgopen` open homepage.\n* `$ hgopen issues` open issues list page.\n* `$ hgopen #id` op issues by id.\n* ...\n\n## svnopen Commands\n\n### $ svnopen\n\nOpen svn repository on current working directory.\n\n## Options\n\n### -p, --path\n\nSpecify file/directory path, default is current working directory.\n\nIf you want open a file or directory name is reserved words, like `issues` and\n`pr`, you can use `--path` option instead.\n\n```\n$ gitopen -p issues\n$ gitopen --path pr\n```\n\n### -b, --branch\n\nSpecify git/hg branch name, default is current working branch.\n\n### -r, --remote\n\nSpecify git remote name, default is `origin`.\n\n### -v, --verbose\n\nDisplay detail information for debug.\n\n## FAQ\n\n### `xdg-open: not found` in Linux\n\n```bash\nsudo apt-get install xdg-utils --fix-missing\n```\n\n- See [xdg-open command is not working](https://askubuntu.com/questions/704712/in-ubuntu-xdg-open-command-is-not-working)\n\n## License\n\n[MIT](http://hotoo.mit-license.org/)\n\n## Donate\n\nIf this tool is useful for you, please [Star this repository](https://github.com/hotoo/gitopen).\n\nAnd maybe you want to donate me via Alipay / WeChat:\n\n\u003cimg src=\"https://hotoo.github.io/images/donate-hotoo.png\" alt=\"Alipay:hotoo.cn@gmail.com, WeChat:hotoome\" width=\"400\" /\u003e\n\n\nThank you.\n","funding_links":["https://github.com/sponsors/hotoo"],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhotoo%2Fgitopen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhotoo%2Fgitopen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhotoo%2Fgitopen/lists"}