diff --git a/.doxie.render.js b/.doxie.render.js deleted file mode 100644 index 82673fa..0000000 --- a/.doxie.render.js +++ /dev/null @@ -1,24 +0,0 @@ -function escapeStr(str) { - return str - .replace(/\"/g, '\\"') - .replace(/\n/g, '\\n'); -} - -var render = function(data) { - var data = data.data; - - var tips = [ - '## ' + data.title, - '```sh', - data.tip, - '```', - '\n' - ]; - Array.isArray(data.alternatives) && tips.push(['__Alternatives:__']) && - data.alternatives.map(function(alternative){ - tips = tips.concat(['```sh',alternative,'```','\n']) - }); - return tips.join('\n'); -}; - -module.exports = render; diff --git a/.doxie.render.toc.js b/.doxie.render.toc.js deleted file mode 100644 index bc74e84..0000000 --- a/.doxie.render.toc.js +++ /dev/null @@ -1,19 +0,0 @@ -// from https://gist.github.com/mathewbyrne/1280286 -slugify = function(text){ - return text.toString().toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(/[^\w\-]+/g, '') // Remove all non-word chars - .replace(/\-\-+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, ''); // Trim - from end of text -} - -var render = function(data) { - var data = data.data; - - var out = '* [' + data.title + '](#' + slugify(data.title) + ')\n'; - - return out; -}; - -module.exports = render; diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 0000000..c0c620f --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,30 @@ +name: Deploy GitBook + +on: + push: + branches: + - master + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 20 + + - name: Install Dependencies + run: npm ci + + - name: Build Docs + run: npm run docs:build + + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/_book diff --git a/.gitignore b/.gitignore index 67d713f..b848f5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea node_modules npm-debug.log +docs/_book diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..e96f702 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at hemanth.hm@gmail.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/README.md b/README.md index 688d835..d3e54d9 100644 --- a/README.md +++ b/README.md @@ -1,1195 +1,1282 @@ ## git-tips > Collection of `git-tips`, want to add your tips? Checkout [contributing.md](./contributing.md) -[English](http://git.io/git-tips) | [中文](https://github.com/521xueweihan/git-tips) | [Русский](https://github.com/Imangazaliev/git-tips) | [한국어](https://github.com/mingrammer/git-tips) | [Tiếng Việt](https://github.com/hprobotic/git-tips) | [日本語](https://github.com/isotai/git-tips) +[English](http://git.io/git-tips) | [中文](https://github.com/521xueweihan/git-tips) | [Русский](https://github.com/Imangazaliev/git-tips) | [한국어](https://github.com/mingrammer/git-tips) | [Tiếng Việt](https://github.com/hprobotic/git-tips) | [日本語](https://github.com/isotai/git-tips) | [नेपाली](https://github.com/amarduwal/git-tips) | [Polski](https://github.com/mbiesiad/tips) | [فارسی](https://github.com/javadnikbakht/git-tips) ### __Tools:__ * [git-tip](https://www.npmjs.com/package/git-tip) - A handy CLI to make optimum use of these tips. ([Here in Docker container](https://github.com/djoudi5/docker-git-tip)) +📖 **[Read the interactive GitBook documentation here!](https://git-tips.github.io/tips/)** + P.S: All these commands are tested on `git version 2.7.4 (Apple Git-66)`. - - -* [Everyday Git in twenty commands or so](#everyday-git-in-twenty-commands-or-so) -* [Show helpful guides that come with Git](#show-helpful-guides-that-come-with-git) -* [Search change by content](#search-change-by-content) -* [Remove sensitive data from history, after a push](#remove-sensitive-data-from-history-after-a-push) -* [Sync with remote, overwrite local changes](#sync-with-remote-overwrite-local-changes) -* [List of all files till a commit](#list-of-all-files-till-a-commit) -* [Git reset first commit](#git-reset-first-commit) -* [List all the conflicted files](#list-all-the-conflicted-files) -* [List of all files changed in a commit](#list-of-all-files-changed-in-a-commit) -* [Unstaged changes since last commit](#unstaged-changes-since-last-commit) -* [Changes staged for commit](#changes-staged-for-commit) -* [Show both staged and unstaged changes](#show-both-staged-and-unstaged-changes) -* [List all branches that are already merged into master](#list-all-branches-that-are-already-merged-into-master) -* [Quickly switch to the previous branch](#quickly-switch-to-the-previous-branch) -* [Remove branches that have already been merged with master](#remove-branches-that-have-already-been-merged-with-master) -* [List all branches and their upstreams, as well as last commit on branch](#list-all-branches-and-their-upstreams-as-well-as-last-commit-on-branch) -* [Track upstream branch](#track-upstream-branch) -* [Delete local branch](#delete-local-branch) -* [Delete remote branch](#delete-remote-branch) -* [Delete local tag](#delete-local-tag) -* [Delete remote tag](#delete-remote-tag) -* [Undo local changes with the last content in head](#undo-local-changes-with-the-last-content-in-head) -* [Revert: Undo a commit by creating a new commit](#revert-undo-a-commit-by-creating-a-new-commit) -* [Reset: Discard commits, advised for private branch](#reset-discard-commits-advised-for-private-branch) -* [Reword the previous commit message](#reword-the-previous-commit-message) -* [See commit history for just the current branch](#see-commit-history-for-just-the-current-branch) -* [Amend author.](#amend-author) -* [Reset author, after author has been changed in the global config.](#reset-author-after-author-has-been-changed-in-the-global-config) -* [Changing a remote's URL](#changing-a-remotes-url) -* [Get list of all remote references](#get-list-of-all-remote-references) -* [Get list of all local and remote branches](#get-list-of-all-local-and-remote-branches) -* [Get only remote branches](#get-only-remote-branches) -* [Stage parts of a changed file, instead of the entire file](#stage-parts-of-a-changed-file-instead-of-the-entire-file) -* [Get git bash completion](#get-git-bash-completion) -* [What changed since two weeks?](#what-changed-since-two-weeks) -* [See all commits made since forking from master](#see-all-commits-made-since-forking-from-master) -* [Pick commits across branches using cherry-pick](#pick-commits-across-branches-using-cherry-pick) -* [Find out branches containing commit-hash](#find-out-branches-containing-commit-hash) -* [Git Aliases](#git-aliases) -* [Saving current state of tracked files without commiting](#saving-current-state-of-tracked-files-without-commiting) -* [Saving current state of unstaged changes to tracked files](#saving-current-state-of-unstaged-changes-to-tracked-files) -* [Saving current state including untracked files](#saving-current-state-including-untracked-files) -* [Saving current state with message](#saving-current-state-with-message) -* [Saving current state of all files (ignored, untracked, and tracked)](#saving-current-state-of-all-files-ignored-untracked-and-tracked) -* [Show list of all saved stashes](#show-list-of-all-saved-stashes) -* [Apply any stash without deleting from the stashed list](#apply-any-stash-without-deleting-from-the-stashed-list) -* [Apply last stashed state and delete it from stashed list](#apply-last-stashed-state-and-delete-it-from-stashed-list) -* [Delete all stored stashes](#delete-all-stored-stashes) -* [Grab a single file from a stash](#grab-a-single-file-from-a-stash) -* [Show all tracked files](#show-all-tracked-files) -* [Show all untracked files](#show-all-untracked-files) -* [Show all ignored files](#show-all-ignored-files) -* [Create new working tree from a repository (git 2.5)](#create-new-working-tree-from-a-repository-git-25) -* [Create new working tree from HEAD state](#create-new-working-tree-from-head-state) -* [Untrack files without deleting](#untrack-files-without-deleting) -* [Before deleting untracked files/directory, do a dry run to get the list of these files/directories](#before-deleting-untracked-filesdirectory-do-a-dry-run-to-get-the-list-of-these-filesdirectories) -* [Forcefully remove untracked files](#forcefully-remove-untracked-files) -* [Forcefully remove untracked directory](#forcefully-remove-untracked-directory) -* [Update all the submodules](#update-all-the-submodules) -* [Show all commits in the current branch yet to be merged to master](#show-all-commits-in-the-current-branch-yet-to-be-merged-to-master) -* [Rename a branch](#rename-a-branch) -* [Rebases 'feature' to 'master' and merges it in to master ](#rebases-feature-to-master-and-merges-it-in-to-master) -* [Archive the `master` branch](#archive-the-master-branch) -* [Modify previous commit without modifying the commit message](#modify-previous-commit-without-modifying-the-commit-message) -* [Prunes references to remote branches that have been deleted in the remote.](#prunes-references-to-remote-branches-that-have-been-deleted-in-the-remote) -* [Retrieve the commit hash of the initial revision.](#retrieve-the-commit-hash-of-the-initial-revision) -* [Visualize the version tree.](#visualize-the-version-tree) -* [Visualize the tree including commits that are only referenced from reflogs](#visualize-the-tree-including-commits-that-are-only-referenced-from-reflogs) -* [Deploying git tracked subfolder to gh-pages](#deploying-git-tracked-subfolder-to-gh-pages) -* [Adding a project to repo using subtree](#adding-a-project-to-repo-using-subtree) -* [Get latest changes in your repo for a linked project using subtree](#get-latest-changes-in-your-repo-for-a-linked-project-using-subtree) -* [Export a branch with history to a file.](#export-a-branch-with-history-to-a-file) -* [Import from a bundle](#import-from-a-bundle) -* [Get the name of current branch.](#get-the-name-of-current-branch) -* [Ignore one file on commit (e.g. Changelog).](#ignore-one-file-on-commit-eg-changelog) -* [Stash changes before rebasing](#stash-changes-before-rebasing) -* [Fetch pull request by ID to a local branch](#fetch-pull-request-by-id-to-a-local-branch) -* [Show the most recent tag on the current branch.](#show-the-most-recent-tag-on-the-current-branch) -* [Show inline word diff.](#show-inline-word-diff) -* [Show changes using common diff tools.](#show-changes-using-common-diff-tools) -* [Don’t consider changes for tracked file.](#dont-consider-changes-for-tracked-file) -* [Undo assume-unchanged.](#undo-assume-unchanged) -* [Clean the files from `.gitignore`.](#clean-the-files-from-gitignore) -* [Restore deleted file.](#restore-deleted-file) -* [Restore file to a specific commit-hash](#restore-file-to-a-specific-commit-hash) -* [Always rebase instead of merge on pull.](#always-rebase-instead-of-merge-on-pull) -* [List all the alias and configs.](#list-all-the-alias-and-configs) -* [Make git case sensitive.](#make-git-case-sensitive) -* [Add custom editors.](#add-custom-editors) -* [Auto correct typos.](#auto-correct-typos) -* [Check if the change was a part of a release.](#check-if-the-change-was-a-part-of-a-release) -* [Dry run. (any command that supports dry-run flag should do.)](#dry-run-any-command-that-supports-dry-run-flag-should-do) -* [Marks your commit as a fix of a previous commit.](#marks-your-commit-as-a-fix-of-a-previous-commit) -* [Squash fixup commits normal commits.](#squash-fixup-commits-normal-commits) -* [Skip staging area during commit.](#skip-staging-area-during-commit) -* [Interactive staging.](#interactive-staging) -* [List ignored files.](#list-ignored-files) -* [Status of ignored files.](#status-of-ignored-files) -* [Commits in Branch1 that are not in Branch2](#commits-in-branch1-that-are-not-in-branch2) -* [List n last commits](#list-n-last-commits) -* [Reuse recorded resolution, record and reuse previous conflicts resolutions.](#reuse-recorded-resolution-record-and-reuse-previous-conflicts-resolutions) -* [Open all conflicted files in an editor.](#open-all-conflicted-files-in-an-editor) -* [Count unpacked number of objects and their disk consumption.](#count-unpacked-number-of-objects-and-their-disk-consumption) -* [Prune all unreachable objects from the object database.](#prune-all-unreachable-objects-from-the-object-database) -* [Instantly browse your working repository in gitweb.](#instantly-browse-your-working-repository-in-gitweb) -* [View the GPG signatures in the commit log](#view-the-gpg-signatures-in-the-commit-log) -* [Remove entry in the global config.](#remove-entry-in-the-global-config) -* [Checkout a new branch without any history](#checkout-a-new-branch-without-any-history) -* [Extract file from another branch.](#extract-file-from-another-branch) -* [List only the root and merge commits.](#list-only-the-root-and-merge-commits) -* [Change previous two commits with an interactive rebase.](#change-previous-two-commits-with-an-interactive-rebase) -* [List all branch is WIP](#list-all-branch-is-wip) -* [Find guilty with binary search](#find-guilty-with-binary-search) -* [Bypass pre-commit and commit-msg githooks](#bypass-pre-commit-and-commit-msg-githooks) -* [List commits and changes to a specific file (even through renaming)](#list-commits-and-changes-to-a-specific-file-even-through-renaming) -* [Clone a single branch](#clone-a-single-branch) -* [Create and switch new branch](#create-and-switch-new-branch) -* [Ignore file mode changes on commits](#ignore-file-mode-changes-on-commits) -* [Turn off git colored terminal output](#turn-off-git-colored-terminal-output) -* [Specific color settings](#specific-color-settings) -* [Show all local branches ordered by recent commits](#show-all-local-branches-ordered-by-recent-commits) -* [Find lines matching the pattern (regex or string) in tracked files](#find-lines-matching-the-pattern-regex-or-string-in-tracked-files) -* [Clone a shallow copy of a repository](#clone-a-shallow-copy-of-a-repository) -* [Search Commit log across all branches for given text](#search-commit-log-across-all-branches-for-given-text) -* [Get first commit in a branch (from master)](#get-first-commit-in-a-branch-from-master) -* [Unstaging Staged file](#unstaging-staged-file) -* [Force push to Remote Repository](#force-push-to-remote-repository) -* [Adding Remote name](#adding-remote-name) -* [Show the author, time and last revision made to each line of a given file](#show-the-author-time-and-last-revision-made-to-each-line-of-a-given-file) -* [Group commits by authors and title](#group-commits-by-authors-and-title) -* [Forced push but still ensure you don't overwrite other's work](#forced-push-but-still-ensure-you-dont-overwrite-others-work) -* [Show how many lines does an author contribute](#show-how-many-lines-does-an-author-contribute) -* [Revert: Reverting an entire merge](#revert-reverting-an-entire-merge) -* [Number of commits in a branch](#number-of-commits-in-a-branch) -* [Alias: git undo](#alias-git-undo) -* [Add object notes](#add-object-notes) -* [Show all the git-notes](#show-all-the-git-notes) -* [Apply commit from another repository](#apply-commit-from-another-repository) -* [Specific fetch reference](#specific-fetch-reference) -* [Find common ancestor of two branches](#find-common-ancestor-of-two-branches) -* [List unpushed git commits](#list-unpushed-git-commits) -* [Add everything, but whitespace changes](#add-everything-but-whitespace-changes) -* [Edit [local/global] git config](#edit-localglobal-git-config) -* [blame on certain range](#blame-on-certain-range) -* [Show a Git logical variable.](#show-a-git-logical-variable) -* [Preformatted patch file.](#preformatted-patch-file) -* [Get the repo name.](#get-the-repo-name) -* [logs between date range](#logs-between-date-range) -* [Exclude author from logs](#exclude-author-from-logs) -* [Generates a summary of pending changes](#generates-a-summary-of-pending-changes) -* [List references in a remote repository](#list-references-in-a-remote-repository) -* [Backup untracked files.](#backup-untracked-files) -* [List all git aliases](#list-all-git-aliases) -* [Show git status short](#show-git-status-short) -* [Checkout a commit prior to a day ago](#checkout-a-commit-prior-to-a-day-ago) -* [Push a new local branch to remote repository and track](#push-a-new-local-branch-to-remote-repository-and-track) -* [Change a branch base](#change-a-branch-base) -* [Use SSH instead of HTTPs for remotes](#use-ssh-instead-of-https-for-remotes) - - - - - - - -## Everyday Git in twenty commands or so +## Table of Contents + +* [Basic Operations](#basic-operations) + * [List of all files till a commit](#list-of-all-files-till-a-commit) + * [Quickly switch to the previous branch](#quickly-switch-to-the-previous-branch) + * [Delete remote branch](#delete-remote-branch) + * [Delete remote tag](#delete-remote-tag) + * [Undo local changes with the content in index(staging)](#undo-local-changes-with-the-content-in-indexstaging) + * [Reword the previous commit message](#reword-the-previous-commit-message) + * [See commit history for just the current branch](#see-commit-history-for-just-the-current-branch) + * [Amend author.](#amend-author) + * [Stage parts of a changed file, instead of the entire file](#stage-parts-of-a-changed-file-instead-of-the-entire-file) + * [Pick commits across branches using cherry-pick](#pick-commits-across-branches-using-cherry-pick) + * [Grab a single file from a stash](#grab-a-single-file-from-a-stash) + * [Create new working tree from a repository (git 2.5)](#create-new-working-tree-from-a-repository-git-25) + * [Create new working tree from HEAD state](#create-new-working-tree-from-head-state) + * [Show all commits in the current branch yet to be merged to master](#show-all-commits-in-the-current-branch-yet-to-be-merged-to-master) + * [Modify previous commit without modifying the commit message](#modify-previous-commit-without-modifying-the-commit-message) + * [Prunes references to remove branches that have been deleted in the remote.](#prunes-references-to-remove-branches-that-have-been-deleted-in-the-remote) + * [Retrieve the commit hash of the initial revision.](#retrieve-the-commit-hash-of-the-initial-revision) + * [Import from a bundle](#import-from-a-bundle) + * [Ignore one file on commit (e.g. Changelog).](#ignore-one-file-on-commit-eg-changelog) + * [Fetch pull request by ID to a local branch](#fetch-pull-request-by-id-to-a-local-branch) + * [Restore deleted file.](#restore-deleted-file) + * [Restore file to a specific commit-hash](#restore-file-to-a-specific-commit-hash) + * [Marks your commit as a fix of a previous commit.](#marks-your-commit-as-a-fix-of-a-previous-commit) + * [Skip staging area during commit.](#skip-staging-area-during-commit) + * [Interactive staging.](#interactive-staging) + * [Status of ignored files.](#status-of-ignored-files) + * [Checkout a new branch without any history](#checkout-a-new-branch-without-any-history) + * [Find guilty with binary search](#find-guilty-with-binary-search) + * [Bypass pre-commit and commit-msg githooks](#bypass-pre-commit-and-commit-msg-githooks) + * [Clone a single branch](#clone-a-single-branch) + * [Create and switch new branch](#create-and-switch-new-branch) + * [Show all local branches ordered by recent commits](#show-all-local-branches-ordered-by-recent-commits) + * [Clone a shallow copy of a repository](#clone-a-shallow-copy-of-a-repository) + * [Force push to Remote Repository](#force-push-to-remote-repository) + * [Group commits by authors and title](#group-commits-by-authors-and-title) + * [Forced push but still ensure you don't overwrite other's work](#forced-push-but-still-ensure-you-dont-overwrite-others-work) + * [Number of commits in a branch](#number-of-commits-in-a-branch) + * [Add object notes](#add-object-notes) + * [Apply commit from another repository](#apply-commit-from-another-repository) + * [Specific fetch reference](#specific-fetch-reference) + * [Generates a summary of pending changes](#generates-a-summary-of-pending-changes) + * [Show git status short](#show-git-status-short) + * [Checkout a commit prior to a day ago](#checkout-a-commit-prior-to-a-day-ago) + * [Push the current branch to the same name on the remote repository](#push-the-current-branch-to-the-same-name-on-the-remote-repository) + * [Push a new local branch to remote repository and track](#push-a-new-local-branch-to-remote-repository-and-track) + * [Update a submodule to the latest commit](#update-a-submodule-to-the-latest-commit) + * [Duplicating a repository](#duplicating-a-repository) +* [Branching](#branching) + * [List all branches that are already merged into master](#list-all-branches-that-are-already-merged-into-master) + * [Remove branches that have already been merged with master](#remove-branches-that-have-already-been-merged-with-master) + * [List all branches and their upstreams, as well as last commit on branch](#list-all-branches-and-their-upstreams-as-well-as-last-commit-on-branch) + * [Track upstream branch](#track-upstream-branch) + * [Delete local branch](#delete-local-branch) + * [Get list of all local and remote branches](#get-list-of-all-local-and-remote-branches) + * [Get only remote branches](#get-only-remote-branches) + * [Find out branches containing commit-hash](#find-out-branches-containing-commit-hash) + * [Rename a branch](#rename-a-branch) + * [Archive the `master` branch](#archive-the-master-branch) + * [Delete local branches that has been squash and merged in the remote.](#delete-local-branches-that-has-been-squash-and-merged-in-the-remote) + * [Export a branch with history to a file.](#export-a-branch-with-history-to-a-file) + * [Get the name of current branch.](#get-the-name-of-current-branch) + * [Show the most recent tag on the current branch.](#show-the-most-recent-tag-on-the-current-branch) + * [List all branch is WIP](#list-all-branch-is-wip) + * [Preformatted patch file.](#preformatted-patch-file) + * [Switch to a branch (modern alternative to checkout)](#switch-to-a-branch-modern-alternative-to-checkout) +* [Log and History](#log-and-history) + * [Show helpful guides that come with Git](#show-helpful-guides-that-come-with-git) + * [Search change by content](#search-change-by-content) + * [Show changes over time for specific file](#show-changes-over-time-for-specific-file) + * [List all the conflicted files](#list-all-the-conflicted-files) + * [List of all files changed in a commit](#list-of-all-files-changed-in-a-commit) + * [Unstaged changes since last commit](#unstaged-changes-since-last-commit) + * [Changes staged for commit](#changes-staged-for-commit) + * [Show both staged and unstaged changes](#show-both-staged-and-unstaged-changes) + * [What changed since two weeks?](#what-changed-since-two-weeks) + * [See all commits made since forking from master](#see-all-commits-made-since-forking-from-master) + * [Show all tracked files](#show-all-tracked-files) + * [Show all untracked files](#show-all-untracked-files) + * [Show all ignored files](#show-all-ignored-files) + * [Visualize the version tree.](#visualize-the-version-tree) + * [Visualize the tree including commits that are only referenced from reflogs](#visualize-the-tree-including-commits-that-are-only-referenced-from-reflogs) + * [Show inline word diff.](#show-inline-word-diff) + * [Show changes using common diff tools.](#show-changes-using-common-diff-tools) + * [Commits in Branch1 that are not in Branch2](#commits-in-branch1-that-are-not-in-branch2) + * [List n last commits](#list-n-last-commits) + * [Open all conflicted files in an editor.](#open-all-conflicted-files-in-an-editor) + * [View the GPG signatures in the commit log](#view-the-gpg-signatures-in-the-commit-log) + * [Extract file from another branch.](#extract-file-from-another-branch) + * [List only the root and merge commits.](#list-only-the-root-and-merge-commits) + * [List commits and changes to a specific file (even through renaming)](#list-commits-and-changes-to-a-specific-file-even-through-renaming) + * [Search Commit log across all branches for given text](#search-commit-log-across-all-branches-for-given-text) + * [Get first commit in a branch (from master)](#get-first-commit-in-a-branch-from-master) + * [Show the author, time and last revision made to each line of a given file](#show-the-author-time-and-last-revision-made-to-each-line-of-a-given-file) + * [Show how many lines does an author contribute](#show-how-many-lines-does-an-author-contribute) + * [Show all the git-notes](#show-all-the-git-notes) + * [List unpushed git commits](#list-unpushed-git-commits) + * [Add everything, but whitespace changes](#add-everything-but-whitespace-changes) + * [blame on certain range](#blame-on-certain-range) + * [Show a Git logical variable.](#show-a-git-logical-variable) + * [Get the repo name.](#get-the-repo-name) + * [logs between date range](#logs-between-date-range) + * [Exclude author from logs](#exclude-author-from-logs) + * [View expanded details of changes in last commit](#view-expanded-details-of-changes-in-last-commit) + * [Visualize each position of HEAD in the last 30 days](#visualize-each-position-of-head-in-the-last-30-days) +* [Merging and Rebasing](#merging-and-rebasing) + * [Rebases 'feature' to 'master' and merges it in to master ](#rebases-feature-to-master-and-merges-it-in-to-master-) + * [Stash changes before rebasing](#stash-changes-before-rebasing) + * [Squash fixup commits normal commits.](#squash-fixup-commits-normal-commits) + * [Change previous two commits with an interactive rebase.](#change-previous-two-commits-with-an-interactive-rebase) + * [Find common ancestor of two branches](#find-common-ancestor-of-two-branches) + * [Change a branch base](#change-a-branch-base) +* [Miscellaneous](#miscellaneous) + * [Everyday Git in twenty commands or so](#everyday-git-in-twenty-commands-or-so) + * [Untrack files without deleting](#untrack-files-without-deleting) + * [Don’t consider changes for tracked file.](#dont-consider-changes-for-tracked-file) + * [Check if the change was a part of a release.](#check-if-the-change-was-a-part-of-a-release) + * [List ignored files.](#list-ignored-files) + * [Count unpacked number of objects and their disk consumption.](#count-unpacked-number-of-objects-and-their-disk-consumption) + * [Prune all unreachable objects from the object database.](#prune-all-unreachable-objects-from-the-object-database) + * [Instantly browse your working repository in gitweb.](#instantly-browse-your-working-repository-in-gitweb) + * [Find lines matching the pattern (regex or string) in tracked files](#find-lines-matching-the-pattern-regex-or-string-in-tracked-files) + * [Backup untracked files.](#backup-untracked-files) + * [Send a collection of patches as emails](#send-a-collection-of-patches-as-emails) +* [Remotes](#remotes) + * [Changing a remote's URL](#changing-a-remotes-url) + * [Get list of all remote references](#get-list-of-all-remote-references) + * [Adding Remote name](#adding-remote-name) + * [List all currently configured remotes](#list-all-currently-configured-remotes) + * [List references in a remote repository](#list-references-in-a-remote-repository) + * [Refresh the list of remote branches](#refresh-the-list-of-remote-branches) +* [Setup and Config](#setup-and-config) + * [Remove sensitive data from history, after a push](#remove-sensitive-data-from-history-after-a-push) + * [Reset author, after author has been changed in the global config.](#reset-author-after-author-has-been-changed-in-the-global-config) + * [Get git bash completion](#get-git-bash-completion) + * [Git Aliases](#git-aliases) + * [Always rebase instead of merge on pull.](#always-rebase-instead-of-merge-on-pull) + * [List all the alias and configs.](#list-all-the-alias-and-configs) + * [Make git case sensitive.](#make-git-case-sensitive) + * [Add custom editors.](#add-custom-editors) + * [Auto correct typos.](#auto-correct-typos) + * [Reuse recorded resolution, record and reuse previous conflicts resolutions.](#reuse-recorded-resolution-record-and-reuse-previous-conflicts-resolutions) + * [Remove entry in the global config.](#remove-entry-in-the-global-config) + * [Ignore file mode changes on commits](#ignore-file-mode-changes-on-commits) + * [Turn off git colored terminal output](#turn-off-git-colored-terminal-output) + * [Specific color settings](#specific-color-settings) + * [Alias: git undo](#alias-git-undo) + * [Edit [local/global] git config](#edit-localglobal-git-config) + * [List all git aliases](#list-all-git-aliases) + * [Use SSH instead of HTTPs for remotes](#use-ssh-instead-of-https-for-remotes) + * [Prevent auto replacing LF with CRLF](#prevent-auto-replacing-lf-with-crlf) + * [Edit config for each level](#edit-config-for-each-level) +* [Stashing](#stashing) + * [Saving current state of tracked files without committing](#saving-current-state-of-tracked-files-without-committing) + * [Saving current state of unstaged changes to tracked files](#saving-current-state-of-unstaged-changes-to-tracked-files) + * [Saving current state including untracked files](#saving-current-state-including-untracked-files) + * [Saving current state with message](#saving-current-state-with-message) + * [Saving current state of all files (ignored, untracked, and tracked)](#saving-current-state-of-all-files-ignored-untracked-and-tracked) + * [Show list of all saved stashes](#show-list-of-all-saved-stashes) + * [Show the contents of any stash in patch form](#show-the-contents-of-any-stash-in-patch-form) + * [Apply any stash without deleting from the stashed list](#apply-any-stash-without-deleting-from-the-stashed-list) + * [Apply last stashed state and delete it from stashed list](#apply-last-stashed-state-and-delete-it-from-stashed-list) + * [Delete all stored stashes](#delete-all-stored-stashes) +* [Submodules and Subtrees](#submodules-and-subtrees) + * [Update all the submodules](#update-all-the-submodules) + * [Deploying git tracked subfolder to gh-pages](#deploying-git-tracked-subfolder-to-gh-pages) + * [Adding a project to repo using subtree](#adding-a-project-to-repo-using-subtree) + * [Get latest changes in your repo for a linked project using subtree](#get-latest-changes-in-your-repo-for-a-linked-project-using-subtree) +* [Tagging](#tagging) + * [Create local tag](#create-local-tag) + * [Delete local tag](#delete-local-tag) +* [Undoing Changes](#undoing-changes) + * [Sync with remote, overwrite local changes](#sync-with-remote-overwrite-local-changes) + * [Git reset first commit](#git-reset-first-commit) + * [Reset: preserve uncommitted local changes](#reset-preserve-uncommitted-local-changes) + * [Revert: Undo a commit by creating a new commit](#revert-undo-a-commit-by-creating-a-new-commit) + * [Reset: Discard commits, advised for private branch](#reset-discard-commits-advised-for-private-branch) + * [Before deleting untracked files/directory, do a dry run to get the list of these files/directories](#before-deleting-untracked-filesdirectory-do-a-dry-run-to-get-the-list-of-these-filesdirectories) + * [Forcefully remove untracked files](#forcefully-remove-untracked-files) + * [Forcefully remove untracked directory](#forcefully-remove-untracked-directory) + * [Undo assume-unchanged.](#undo-assume-unchanged) + * [Clean the files from `.gitignore`.](#clean-the-files-from-gitignore) + * [Dry run. (any command that supports dry-run flag should do.)](#dry-run-any-command-that-supports-dry-run-flag-should-do) + * [Unstaging Staged file](#unstaging-staged-file) + * [Revert: Reverting an entire merge](#revert-reverting-an-entire-merge) + * [Restore file (modern alternative to reset/checkout --)](#restore-file-modern-alternative-to-resetcheckout---) + +## Basic Operations + +### List of all files till a commit ```sh -git help everyday +git ls-tree --name-only -r ``` -## Show helpful guides that come with Git +### Quickly switch to the previous branch ```sh -git help -g +git checkout - ``` - -## Search change by content +**Alternatives:** ```sh -git log -S'' +git checkout @{-1} ``` -## Remove sensitive data from history, after a push +### Delete remote branch ```sh -git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ' --prune-empty --tag-name-filter cat -- --all && git push origin --force --all +git push origin --delete ``` - -## Sync with remote, overwrite local changes +**Alternatives:** ```sh -git fetch origin && git reset --hard origin/master && git clean -f -d +git push origin : ``` - -## List of all files till a commit ```sh -git ls-tree --name-only -r +git branch -dr ``` -## Git reset first commit +### Delete remote tag ```sh -git update-ref -d HEAD +git push origin :refs/tags/ ``` -## List all the conflicted files +### Undo local changes with the content in index(staging) ```sh -git diff --name-only --diff-filter=U +git checkout -- ``` -## List of all files changed in a commit +### Reword the previous commit message ```sh -git diff-tree --no-commit-id --name-only -r +git commit -v --amend ``` -## Unstaged changes since last commit +### See commit history for just the current branch ```sh -git diff +git cherry -v master ``` -## Changes staged for commit +### Amend author. ```sh -git diff --cached +git commit --amend --author='Author Name ' ``` - -__Alternatives:__ +### Stage parts of a changed file, instead of the entire file ```sh -git diff --staged +git add -p ``` -## Show both staged and unstaged changes +### Pick commits across branches using cherry-pick ```sh -git diff HEAD +git checkout && git cherry-pick ``` -## List all branches that are already merged into master +### Grab a single file from a stash ```sh -git branch --merged master +git checkout -- ``` - -## Quickly switch to the previous branch +**Alternatives:** ```sh -git checkout - +git checkout stash@{0} -- ``` - -__Alternatives:__ +### Create new working tree from a repository (git 2.5) ```sh -git checkout @{-1} +git worktree add -b ``` -## Remove branches that have already been merged with master +### Create new working tree from HEAD state ```sh -git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d +git worktree add --detach HEAD ``` - -__Alternatives:__ +### Show all commits in the current branch yet to be merged to master ```sh -git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked out +git cherry -v master ``` - -## List all branches and their upstreams, as well as last commit on branch +**Alternatives:** ```sh -git branch -vv +git cherry -v master ``` -## Track upstream branch +### Modify previous commit without modifying the commit message ```sh -git branch -u origin/mybranch +git add --all && git commit --amend --no-edit ``` -## Delete local branch +### Prunes references to remove branches that have been deleted in the remote. ```sh -git branch -d +git fetch -p ``` - -## Delete remote branch +**Alternatives:** ```sh -git push origin --delete +git remote prune origin ``` - -__Alternatives:__ +### Retrieve the commit hash of the initial revision. ```sh -git push origin : + git rev-list --reverse HEAD | head -1 ``` - -## Delete local tag +**Alternatives:** ```sh -git tag -d +git rev-list --max-parents=0 HEAD ``` - -## Delete remote tag ```sh -git push origin :refs/tags/ +git log --pretty=oneline | tail -1 | cut -c 1-40 ``` - -## Undo local changes with the last content in head ```sh -git checkout -- +git log --pretty=oneline --reverse | head -1 | cut -c 1-40 ``` -## Revert: Undo a commit by creating a new commit +### Import from a bundle ```sh -git revert +git clone repo.bundle -b ``` -## Reset: Discard commits, advised for private branch +### Ignore one file on commit (e.g. Changelog). ```sh -git reset +git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog ``` -## Reword the previous commit message +### Fetch pull request by ID to a local branch ```sh -git commit -v --amend +git fetch origin pull//head: ``` - -## See commit history for just the current branch +**Alternatives:** ```sh -git cherry -v master +git pull origin pull//head: ``` -## Amend author. +### Restore deleted file. ```sh -git commit --amend --author='Author Name ' +git checkout -- ``` -## Reset author, after author has been changed in the global config. +### Restore file to a specific commit-hash ```sh -git commit --amend --reset-author --no-edit +git checkout -- ``` -## Changing a remote's URL +### Marks your commit as a fix of a previous commit. ```sh -git remote set-url origin +git commit --fixup ``` -## Get list of all remote references +### Skip staging area during commit. ```sh -git remote +git commit --only ``` - -__Alternatives:__ +### Interactive staging. ```sh -git remote show +git add -i ``` -## Get list of all local and remote branches +### Status of ignored files. ```sh -git branch -a +git status --ignored ``` -## Get only remote branches +### Checkout a new branch without any history ```sh -git branch -r +git checkout --orphan ``` -## Stage parts of a changed file, instead of the entire file +### Find guilty with binary search ```sh -git add -p +git bisect start # Search start +git bisect bad # Set point to bad commit +git bisect good v2.6.13-rc2 # Set point to good commit|tag +git bisect bad # Say current state is bad +git bisect good # Say current state is good +git bisect reset # Finish search + ``` -## Get git bash completion +### Bypass pre-commit and commit-msg githooks ```sh -curl -L http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc +git commit --no-verify ``` -## What changed since two weeks? +### Clone a single branch ```sh -git log --no-merges --raw --since='2 weeks ago' +git clone -b --single-branch https://github.com/user/repo.git ``` - -__Alternatives:__ +### Create and switch new branch ```sh -git whatchanged --since='2 weeks ago' +git checkout -b ``` - -## See all commits made since forking from master +**Alternatives:** ```sh -git log --no-merges --stat --reverse master.. +git branch && git checkout ``` - -## Pick commits across branches using cherry-pick ```sh -git checkout && git cherry-pick +git switch -c ``` -## Find out branches containing commit-hash +### Show all local branches ordered by recent commits ```sh -git branch -a --contains +git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/ ``` - -__Alternatives:__ +### Clone a shallow copy of a repository ```sh -git branch --contains +git clone https://github.com/user/repo.git --depth 1 ``` -## Git Aliases +### Force push to Remote Repository ```sh -git config --global alias. -git config --global alias.st status +git push -f ``` -## Saving current state of tracked files without commiting +### Group commits by authors and title ```sh -git stash +git shortlog ``` - -__Alternatives:__ +### Forced push but still ensure you don't overwrite other's work ```sh -git stash save +git push --force-with-lease ``` -## Saving current state of unstaged changes to tracked files +### Number of commits in a branch ```sh -git stash -k +git rev-list --count ``` - -__Alternatives:__ +### Add object notes ```sh -git stash --keep-index +git notes add -m 'Note on the previous commit....' ``` - +### Apply commit from another repository ```sh -git stash save --keep-index +git --git-dir=/.git format-patch -k -1 --stdout | git am -3 -k ``` -## Saving current state including untracked files +### Specific fetch reference ```sh -git stash -u +git fetch origin master:refs/remotes/origin/mymaster ``` - -__Alternatives:__ +### Generates a summary of pending changes ```sh -git stash save -u +git request-pull v1.0 https://git.ko.xz/project master:for-linus ``` +### Show git status short +```sh +git status --short --branch +``` +### Checkout a commit prior to a day ago ```sh -git stash save --include-untracked +git checkout master@{yesterday} ``` -## Saving current state with message +### Push the current branch to the same name on the remote repository ```sh -git stash save +git push origin HEAD ``` -## Saving current state of all files (ignored, untracked, and tracked) +### Push a new local branch to remote repository and track ```sh -git stash -a +git push -u origin ``` +### Update a submodule to the latest commit +```sh +cd +git pull origin +cd +git add +git commit -m "submodule updated" +``` -__Alternatives:__ +### Duplicating a repository ```sh -git stash --all +git clone --bare https://github.com/exampleuser/old-repository.git + +git push --mirror https://github.com/exampleuser/new-repository.git ``` +## Branching +### List all branches that are already merged into master ```sh -git stash save --all +git branch --merged master ``` -## Show list of all saved stashes +### Remove branches that have already been merged with master ```sh -git stash list +git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d ``` - -## Apply any stash without deleting from the stashed list +**Alternatives:** ```sh -git stash apply +git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked out ``` -## Apply last stashed state and delete it from stashed list +### List all branches and their upstreams, as well as last commit on branch ```sh -git stash pop +git branch -vv ``` - -__Alternatives:__ +### Track upstream branch ```sh -git stash apply stash@{0} && git stash drop stash@{0} +git branch -u origin/mybranch ``` -## Delete all stored stashes +### Delete local branch ```sh -git stash clear +git branch -d ``` - -__Alternatives:__ +### Get list of all local and remote branches ```sh -git stash drop +git branch -a ``` -## Grab a single file from a stash +### Get only remote branches ```sh -git checkout -- +git branch -r ``` - -__Alternatives:__ +### Find out branches containing commit-hash ```sh -git checkout stash@{0} -- +git branch -a --contains ``` - -## Show all tracked files +**Alternatives:** ```sh -git ls-files -t +git branch --contains ``` -## Show all untracked files +### Rename a branch ```sh -git ls-files --others +git branch -m ``` - -## Show all ignored files +**Alternatives:** ```sh -git ls-files --others -i --exclude-standard +git branch -m [] ``` -## Create new working tree from a repository (git 2.5) +### Archive the `master` branch ```sh -git worktree add -b +git archive master --format=zip --output=master.zip ``` -## Create new working tree from HEAD state +### Delete local branches that has been squash and merged in the remote. ```sh -git worktree add --detach HEAD +git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D ``` -## Untrack files without deleting +### Export a branch with history to a file. ```sh -git rm --cached +git bundle create ``` - -__Alternatives:__ +### Get the name of current branch. ```sh -git rm --cached -r +git rev-parse --abbrev-ref HEAD ``` -## Before deleting untracked files/directory, do a dry run to get the list of these files/directories +### Show the most recent tag on the current branch. ```sh -git clean -n +git describe --tags --abbrev=0 ``` -## Forcefully remove untracked files +### List all branch is WIP ```sh -git clean -f +git checkout master && git branch --no-merged ``` -## Forcefully remove untracked directory +### Preformatted patch file. ```sh -git clean -f -d +git format-patch -M upstream..topic ``` -## Update all the submodules +### Switch to a branch (modern alternative to checkout) ```sh -git submodule foreach git pull +git switch ``` - - -__Alternatives:__ +**Alternatives:** ```sh -git submodule update --init --recursive +git switch -c ``` +## Log and History +### Show helpful guides that come with Git ```sh -git submodule update --remote +git help -g ``` -## Show all commits in the current branch yet to be merged to master +### Search change by content ```sh -git cherry -v master +git log -S'' ``` - -__Alternatives:__ +### Show changes over time for specific file ```sh -git cherry -v master +git log -p ``` -## Rename a branch +### List all the conflicted files ```sh -git branch -m +git diff --name-only --diff-filter=U ``` - -__Alternatives:__ +### List of all files changed in a commit ```sh -git branch -m [] +git diff-tree --no-commit-id --name-only -r ``` -## Rebases 'feature' to 'master' and merges it in to master +### Unstaged changes since last commit ```sh -git rebase master feature && git checkout master && git merge - +git diff ``` -## Archive the `master` branch +### Changes staged for commit ```sh -git archive master --format=zip --output=master.zip +git diff --cached ``` - -## Modify previous commit without modifying the commit message +**Alternatives:** ```sh -git add --all && git commit --amend --no-edit +git diff --staged ``` -## Prunes references to remote branches that have been deleted in the remote. +### Show both staged and unstaged changes ```sh -git fetch -p +git diff HEAD ``` - -__Alternatives:__ +### What changed since two weeks? ```sh -git remote prune origin +git log --no-merges --raw --since='2 weeks ago' ``` - -## Retrieve the commit hash of the initial revision. +**Alternatives:** ```sh - git rev-list --reverse HEAD | head -1 +git whatchanged --since='2 weeks ago' ``` - -__Alternatives:__ +### See all commits made since forking from master ```sh -git rev-list --max-parents=0 HEAD +git log --no-merges --stat --reverse master.. ``` - +### Show all tracked files ```sh -git log --pretty=oneline | tail -1 | cut -c 1-40 +git ls-files -t ``` +### Show all untracked files +```sh +git ls-files --others +``` +### Show all ignored files ```sh -git log --pretty=oneline --reverse | head -1 | cut -c 1-40 +git ls-files --others -i --exclude-standard ``` -## Visualize the version tree. +### Visualize the version tree. ```sh git log --pretty=oneline --graph --decorate --all ``` - - -__Alternatives:__ +**Alternatives:** ```sh gitk --all ``` - - ```sh git log --graph --pretty=format:'%C(auto) %h | %s | %an | %ar%d' ``` -## Visualize the tree including commits that are only referenced from reflogs +### Visualize the tree including commits that are only referenced from reflogs ```sh git log --graph --decorate --oneline $(git rev-list --walk-reflogs --all) ``` -## Deploying git tracked subfolder to gh-pages +### Show inline word diff. ```sh -git subtree push --prefix subfolder_name origin gh-pages +git diff --word-diff ``` -## Adding a project to repo using subtree +### Show changes using common diff tools. ```sh -git subtree add --prefix=/ --squash git@github.com:/.git master +git difftool [-t ] ``` -## Get latest changes in your repo for a linked project using subtree +### Commits in Branch1 that are not in Branch2 ```sh -git subtree pull --prefix=/ --squash git@github.com:/.git master +git log Branch1 ^Branch2 ``` -## Export a branch with history to a file. +### List n last commits ```sh -git bundle create +git log - ``` - -## Import from a bundle +**Alternatives:** ```sh -git clone repo.bundle -b +git log -n ``` -## Get the name of current branch. +### Open all conflicted files in an editor. ```sh -git rev-parse --abbrev-ref HEAD +git diff --name-only | uniq | xargs $EDITOR ``` -## Ignore one file on commit (e.g. Changelog). +### View the GPG signatures in the commit log ```sh -git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog +git log --show-signature ``` -## Stash changes before rebasing +### Extract file from another branch. ```sh -git rebase --autostash +git show : ``` -## Fetch pull request by ID to a local branch +### List only the root and merge commits. ```sh -git fetch origin pull//head: +git log --first-parent ``` - -__Alternatives:__ +### List commits and changes to a specific file (even through renaming) ```sh -git pull origin pull//head: +git log --follow -p -- ``` -## Show the most recent tag on the current branch. +### Search Commit log across all branches for given text ```sh -git describe --tags --abbrev=0 +git log --all --grep='' ``` -## Show inline word diff. +### Get first commit in a branch (from master) ```sh -git diff --word-diff +git log --oneline master.. | tail -1 ``` - -## Show changes using common diff tools. +**Alternatives:** ```sh -git difftool [-t ] +git log --reverse master.. | head -6 ``` -## Don’t consider changes for tracked file. +### Show the author, time and last revision made to each line of a given file ```sh -git update-index --assume-unchanged +git blame ``` -## Undo assume-unchanged. +### Show how many lines does an author contribute ```sh -git update-index --no-assume-unchanged +git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s +", add, subs, loc }' - ``` - -## Clean the files from `.gitignore`. +**Alternatives:** ```sh -git clean -X -f +git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s +", add, subs, loc }' - # on Mac OSX ``` -## Restore deleted file. +### Show all the git-notes ```sh -git checkout ^ -- +git log --show-notes='*' ``` -## Restore file to a specific commit-hash +### List unpushed git commits ```sh -git checkout -- +git log --branches --not --remotes +``` +**Alternatives:** +```sh +git log @{u}.. +``` +```sh +git cherry -v ``` -## Always rebase instead of merge on pull. +### Add everything, but whitespace changes ```sh -git config --global pull.rebase true +git diff --ignore-all-space | git apply --cached ``` +### blame on certain range +```sh +git blame -L , +``` -__Alternatives:__ +### Show a Git logical variable. ```sh -#git < 1.7.9 -git config --global branch.autosetuprebase always +git var -l | ``` -## List all the alias and configs. +### Get the repo name. ```sh -git config --list +git rev-parse --show-toplevel ``` -## Make git case sensitive. +### logs between date range ```sh -git config --global core.ignorecase false +git log --since='FEB 1 2017' --until='FEB 14 2017' ``` -## Add custom editors. +### Exclude author from logs ```sh -git config --global core.editor '$EDITOR' +git log --perl-regexp --author='^((?!excluded-author-regex).*)$' ``` -## Auto correct typos. +### View expanded details of changes in last commit ```sh -git config --global help.autocorrect 1 +git show ``` -## Check if the change was a part of a release. +### Visualize each position of HEAD in the last 30 days ```sh -git name-rev --name-only +git reflog ``` -## Dry run. (any command that supports dry-run flag should do.) +## Merging and Rebasing + +### Rebases 'feature' to 'master' and merges it in to master ```sh -git clean -fd --dry-run +git rebase master feature && git checkout master && git merge - ``` -## Marks your commit as a fix of a previous commit. +### Stash changes before rebasing ```sh -git commit --fixup +git rebase --autostash ``` -## Squash fixup commits normal commits. +### Squash fixup commits normal commits. ```sh git rebase -i --autosquash ``` -## Skip staging area during commit. +### Change previous two commits with an interactive rebase. ```sh -git commit --only +git rebase --interactive HEAD~2 ``` -## Interactive staging. +### Find common ancestor of two branches ```sh -git add -i +git merge-base ``` -## List ignored files. +### Change a branch base ```sh -git check-ignore * +git rebase --onto ``` -## Status of ignored files. +## Miscellaneous + +### Everyday Git in twenty commands or so ```sh -git status --ignored +git help everyday ``` -## Commits in Branch1 that are not in Branch2 +### Untrack files without deleting ```sh -git log Branch1 ^Branch2 +git rm --cached ``` - -## List n last commits +**Alternatives:** ```sh -git log - +git rm --cached -r ``` - -__Alternatives:__ +### Don’t consider changes for tracked file. ```sh -git log -n +git update-index --assume-unchanged ``` -## Reuse recorded resolution, record and reuse previous conflicts resolutions. +### Check if the change was a part of a release. ```sh -git config --global rerere.enabled 1 +git name-rev --name-only ``` -## Open all conflicted files in an editor. +### List ignored files. ```sh -git diff --name-only | uniq | xargs $EDITOR +git check-ignore * ``` -## Count unpacked number of objects and their disk consumption. +### Count unpacked number of objects and their disk consumption. ```sh git count-objects --human-readable ``` -## Prune all unreachable objects from the object database. +### Prune all unreachable objects from the object database. ```sh git gc --prune=now --aggressive ``` -## Instantly browse your working repository in gitweb. +### Instantly browse your working repository in gitweb. ```sh git instaweb [--local] [--httpd=] [--port=] [--browser=] ``` -## View the GPG signatures in the commit log +### Find lines matching the pattern (regex or string) in tracked files ```sh -git log --show-signature +git grep --heading --line-number 'foo bar' ``` -## Remove entry in the global config. +### Backup untracked files. ```sh -git config --global --unset +git ls-files --others -i --exclude-standard | xargs zip untracked.zip ``` -## Checkout a new branch without any history +### Send a collection of patches as emails ```sh -git checkout --orphan +git send-email [] … + +git send-email [] ``` -## Extract file from another branch. +## Remotes + +### Changing a remote's URL ```sh -git show : +git remote set-url origin ``` -## List only the root and merge commits. +### Get list of all remote references ```sh -git log --first-parent +git remote ``` - -## Change previous two commits with an interactive rebase. +**Alternatives:** ```sh -git rebase --interactive HEAD~2 +git remote show ``` -## List all branch is WIP +### Adding Remote name ```sh -git checkout master && git branch --no-merged +git remote add ``` -## Find guilty with binary search +### List all currently configured remotes ```sh -git bisect start # Search start -git bisect bad # Set point to bad commit -git bisect good v2.6.13-rc2 # Set point to good commit|tag -git bisect bad # Say current state is bad -git bisect good # Say current state is good -git bisect reset # Finish search - +git remote -v ``` -## Bypass pre-commit and commit-msg githooks +### List references in a remote repository ```sh -git commit --no-verify +git ls-remote git://git.kernel.org/pub/scm/git/git.git ``` -## List commits and changes to a specific file (even through renaming) +### Refresh the list of remote branches ```sh -git log --follow -p -- +git remote update origin --prune ``` -## Clone a single branch +## Setup and Config + +### Remove sensitive data from history, after a push ```sh -git clone -b --single-branch https://github.com/user/repo.git +git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ' --prune-empty --tag-name-filter cat -- --all && git push origin --force --all ``` -## Create and switch new branch +### Reset author, after author has been changed in the global config. ```sh -git checkout -b +git commit --amend --reset-author --no-edit ``` - -__Alternatives:__ +### Get git bash completion ```sh -git branch && git checkout +curl -L http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc ``` -## Ignore file mode changes on commits +### Git Aliases ```sh -git config core.fileMode false +git config --global alias. +git config --global alias.st status ``` -## Turn off git colored terminal output +### Always rebase instead of merge on pull. ```sh -git config --global color.ui false +git config --global pull.rebase true +``` +**Alternatives:** +```sh +#git < 1.7.9 +git config --global branch.autosetuprebase always ``` -## Specific color settings +### List all the alias and configs. ```sh -git config --global +git config --list ``` -## Show all local branches ordered by recent commits +### Make git case sensitive. ```sh -git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/ +git config --global core.ignorecase false ``` -## Find lines matching the pattern (regex or string) in tracked files +### Add custom editors. ```sh -git grep --heading --line-number 'foo bar' +git config --global core.editor '$EDITOR' ``` -## Clone a shallow copy of a repository +### Auto correct typos. ```sh -git clone https://github.com/user/repo.git --depth 1 +git config --global help.autocorrect 1 ``` -## Search Commit log across all branches for given text +### Reuse recorded resolution, record and reuse previous conflicts resolutions. ```sh -git log --all --grep='' +git config --global rerere.enabled 1 ``` -## Get first commit in a branch (from master) +### Remove entry in the global config. ```sh -git log --oneline master.. | tail -1 +git config --global --unset ``` +### Ignore file mode changes on commits +```sh +git config core.fileMode false +``` -__Alternatives:__ +### Turn off git colored terminal output ```sh -git log --reverse master.. | head -6 +git config --global color.ui false ``` -## Unstaging Staged file +### Specific color settings ```sh -git reset HEAD +git config --global ``` -## Force push to Remote Repository +### Alias: git undo ```sh -git push -f +git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f' ``` -## Adding Remote name +### Edit [local/global] git config ```sh -git remote add +git config [--global] --edit ``` -## Show the author, time and last revision made to each line of a given file +### List all git aliases ```sh -git blame +git config -l | grep alias | sed 's/^alias\.//g' +``` +**Alternatives:** +```sh +git config -l | grep alias | cut -d '.' -f 2 ``` -## Group commits by authors and title +### Use SSH instead of HTTPs for remotes ```sh -git shortlog +git config --global url.'git@github.com:'.insteadOf 'https://github.com/' ``` -## Forced push but still ensure you don't overwrite other's work +### Prevent auto replacing LF with CRLF ```sh -git push --force-with-lease +git config --global core.autocrlf false ``` -## Show how many lines does an author contribute +### Edit config for each level ```sh -git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += ; subs += ; loc += - } END { printf "added lines: %s removed lines: %s total lines: %s -", add, subs, loc }' - +git config --edit --system + +git config --edit --global + +git config --edit --local ``` +## Stashing -__Alternatives:__ +### Saving current state of tracked files without committing ```sh -git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += ; subs += ; loc += - } END { printf "added lines: %s, removed lines: %s, total lines: %s -", add, subs, loc }' - # on Mac OSX +git stash ``` - -## Revert: Reverting an entire merge +**Alternatives:** ```sh -git revert -m 1 +git stash push ``` -## Number of commits in a branch +### Saving current state of unstaged changes to tracked files ```sh -git rev-list --count +git stash -k ``` - -## Alias: git undo +**Alternatives:** ```sh -git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f' +git stash --keep-index +``` +```sh +git stash push --keep-index ``` -## Add object notes +### Saving current state including untracked files ```sh -git notes add -m 'Note on the previous commit....' +git stash -u +``` +**Alternatives:** +```sh +git stash push -u +``` +```sh +git stash push --include-untracked ``` -## Show all the git-notes +### Saving current state with message ```sh -git log --show-notes='*' +git stash push -m +``` +**Alternatives:** +```sh +git stash push --message ``` -## Apply commit from another repository +### Saving current state of all files (ignored, untracked, and tracked) ```sh -git --git-dir=/.git format-patch -k -1 --stdout | git am -3 -k +git stash -a +``` +**Alternatives:** +```sh +git stash --all +``` +```sh +git stash push --all ``` -## Specific fetch reference +### Show list of all saved stashes ```sh -git fetch origin master:refs/remotes/origin/mymaster +git stash list ``` -## Find common ancestor of two branches +### Show the contents of any stash in patch form ```sh -git merge-base +git stash show -p ``` -## List unpushed git commits +### Apply any stash without deleting from the stashed list ```sh -git log --branches --not --remotes +git stash apply ``` +### Apply last stashed state and delete it from stashed list +```sh +git stash pop +``` +**Alternatives:** +```sh +git stash apply stash@{0} && git stash drop stash@{0} +``` -__Alternatives:__ +### Delete all stored stashes ```sh -git log @{u}.. +git stash clear +``` +**Alternatives:** +```sh +git stash drop ``` +## Submodules and Subtrees +### Update all the submodules ```sh -git cherry -v +git submodule foreach git pull ``` - -## Add everything, but whitespace changes +**Alternatives:** ```sh -git diff --ignore-all-space | git apply --cached +git submodule update --init --recursive ``` - -## Edit [local/global] git config ```sh -git config [--global] --edit +git submodule update --remote ``` -## blame on certain range +### Deploying git tracked subfolder to gh-pages ```sh -git blame -L , +git subtree push --prefix subfolder_name origin gh-pages +``` +**Alternatives:** +```sh +git subtree push --prefix subfolder_name origin branch_name ``` -## Show a Git logical variable. +### Adding a project to repo using subtree ```sh -git var -l | +git subtree add --prefix=/ --squash git@github.com:/.git master ``` -## Preformatted patch file. +### Get latest changes in your repo for a linked project using subtree ```sh -git format-patch -M upstream..topic +git subtree pull --prefix=/ --squash git@github.com:/.git master ``` -## Get the repo name. +## Tagging + +### Create local tag ```sh -git rev-parse --show-toplevel +git tag ``` -## logs between date range +### Delete local tag ```sh -git log --since='FEB 1 2017' --until='FEB 14 2017' +git tag -d ``` -## Exclude author from logs +## Undoing Changes + +### Sync with remote, overwrite local changes ```sh -git log --perl-regexp --author='^((?!excluded-author-regex).*) +git fetch origin && git reset --hard origin/master && git clean -f -d +``` +### Git reset first commit +```sh +git update-ref -d HEAD ``` -## Generates a summary of pending changes +### Reset: preserve uncommitted local changes ```sh -git request-pull v1.0 https://git.ko.xz/project master:for-linus +git reset --keep ``` -## List references in a remote repository +### Revert: Undo a commit by creating a new commit ```sh -git ls-remote git://git.kernel.org/pub/scm/git/git.git +git revert ``` -## Backup untracked files. +### Reset: Discard commits, advised for private branch ```sh -git ls-files --others -i --exclude-standard | xargs zip untracked.zip +git reset ``` -## List all git aliases +### Before deleting untracked files/directory, do a dry run to get the list of these files/directories ```sh -git config -l | grep alias | sed 's/^alias\.//g' +git clean -n ``` +### Forcefully remove untracked files +```sh +git clean -f +``` -__Alternatives:__ +### Forcefully remove untracked directory ```sh -git config -l | grep alias | cut -d '.' -f 2 +git clean -f -d ``` -## Show git status short +### Undo assume-unchanged. ```sh -git status --short --branch +git update-index --no-assume-unchanged ``` -## Checkout a commit prior to a day ago +### Clean the files from `.gitignore`. ```sh -git checkout master@{yesterday} +git clean -X -f ``` -## Push a new local branch to remote repository and track +### Dry run. (any command that supports dry-run flag should do.) ```sh -git push -u origin +git clean -fd --dry-run ``` -## Change a branch base +### Unstaging Staged file ```sh -git rebase --onto +git reset HEAD ``` -## Use SSH instead of HTTPs for remotes +### Revert: Reverting an entire merge ```sh -git config --global url.'git@github.com:'.insteadOf 'https://github.com/' +git revert -m 1 ``` - - +### Restore file (modern alternative to reset/checkout --) +```sh +git restore +``` +**Alternatives:** +```sh +git restore --staged +``` diff --git a/book.json b/book.json new file mode 100644 index 0000000..aba26bb --- /dev/null +++ b/book.json @@ -0,0 +1,6 @@ +{ + "title": "Git Tips", + "author": "hemanth", + "description": "Collection of most commonly used git tips and tricks.", + "root": "./docs" +} diff --git a/build-readme.js b/build-readme.js new file mode 100644 index 0000000..12006c6 --- /dev/null +++ b/build-readme.js @@ -0,0 +1,50 @@ +const fs = require('fs'); +const tips = require('./tips.json'); + +const header = `## git-tips +> Collection of \`git-tips\`, want to add your tips? Checkout [contributing.md](./contributing.md) + +[English](http://git.io/git-tips) | [中文](https://github.com/521xueweihan/git-tips) | [Русский](https://github.com/Imangazaliev/git-tips) | [한국어](https://github.com/mingrammer/git-tips) | [Tiếng Việt](https://github.com/hprobotic/git-tips) | [日本語](https://github.com/isotai/git-tips) | [नेपाली](https://github.com/amarduwal/git-tips) | [Polski](https://github.com/mbiesiad/tips) | [فارسی](https://github.com/javadnikbakht/git-tips) + +### __Tools:__ + +* [git-tip](https://www.npmjs.com/package/git-tip) - A handy CLI to make optimum use of these tips. ([Here in Docker container](https://github.com/djoudi5/docker-git-tip)) + +📖 **[Read the interactive GitBook documentation here!](https://git-tips.github.io/tips/)** + +P.S: All these commands are tested on \`git version 2.7.4 (Apple Git-66)\`. + +`; + +let toc = "## Table of Contents\n\n"; +let content = ""; + +const categories = {}; +tips.forEach(tip => { + const cat = tip.category || 'Miscellaneous'; + if (!categories[cat]) categories[cat] = []; + categories[cat].push(tip); +}); + +// Generate TOC and Content +Object.keys(categories).sort().forEach(cat => { + toc += `* [${cat}](#${cat.toLowerCase().replace(/ /g, '-')})\n`; + content += `\n## ${cat}\n`; + categories[cat].forEach(tip => { + let slug = tip.title.toLowerCase().replace(/[^\w\- ]+/g, '').replace(/\s+/g, '-'); + toc += ` * [${tip.title}](#${slug})\n`; + + content += `\n### ${tip.title}\n`; + content += `\`\`\`sh\n${tip.tip}\n\`\`\`\n`; + if (tip.alternatives) { + content += `**Alternatives:**\n`; + let alts = Array.isArray(tip.alternatives) ? tip.alternatives : [tip.alternatives]; + alts.forEach(alt => { + content += `\`\`\`sh\n${alt}\n\`\`\`\n`; + }); + } + }); +}); + +fs.writeFileSync('README.md', header + toc + content); +console.log("README.md generated successfully!"); diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..6a64d11 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,3 @@ +# Git Tips + +Welcome to the Git Tips documentation! Browse through the categories in the sidebar to find useful Git commands and tricks. diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 0000000..37021f9 --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,14 @@ +# Summary + +* [Introduction](README.md) +* [Basic Operations](basic-operations.md) +* [Branching](branching.md) +* [Log and History](log-and-history.md) +* [Merging and Rebasing](merging-and-rebasing.md) +* [Miscellaneous](miscellaneous.md) +* [Remotes](remotes.md) +* [Setup and Config](setup-and-config.md) +* [Stashing](stashing.md) +* [Submodules and Subtrees](submodules-and-subtrees.md) +* [Tagging](tagging.md) +* [Undoing Changes](undoing-changes.md) diff --git a/docs/basic-operations.md b/docs/basic-operations.md new file mode 100644 index 0000000..e1ec04c --- /dev/null +++ b/docs/basic-operations.md @@ -0,0 +1,387 @@ +# Basic Operations + +## List of all files till a commit +```sh +git ls-tree --name-only -r +``` + +--- + +## Quickly switch to the previous branch +```sh +git checkout - +``` +**Alternatives:** +```sh +git checkout @{-1} +``` + +--- + +## Delete remote branch +```sh +git push origin --delete +``` +**Alternatives:** +```sh +git push origin : +``` +```sh +git branch -dr +``` + +--- + +## Delete remote tag +```sh +git push origin :refs/tags/ +``` + +--- + +## Undo local changes with the content in index(staging) +```sh +git checkout -- +``` + +--- + +## Reword the previous commit message +```sh +git commit -v --amend +``` + +--- + +## See commit history for just the current branch +```sh +git cherry -v master +``` + +--- + +## Amend author. +```sh +git commit --amend --author='Author Name ' +``` + +--- + +## Stage parts of a changed file, instead of the entire file +```sh +git add -p +``` + +--- + +## Pick commits across branches using cherry-pick +```sh +git checkout && git cherry-pick +``` + +--- + +## Grab a single file from a stash +```sh +git checkout -- +``` +**Alternatives:** +```sh +git checkout stash@{0} -- +``` + +--- + +## Create new working tree from a repository (git 2.5) +```sh +git worktree add -b +``` + +--- + +## Create new working tree from HEAD state +```sh +git worktree add --detach HEAD +``` + +--- + +## Show all commits in the current branch yet to be merged to master +```sh +git cherry -v master +``` +**Alternatives:** +```sh +git cherry -v master +``` + +--- + +## Modify previous commit without modifying the commit message +```sh +git add --all && git commit --amend --no-edit +``` + +--- + +## Prunes references to remove branches that have been deleted in the remote. +```sh +git fetch -p +``` +**Alternatives:** +```sh +git remote prune origin +``` + +--- + +## Retrieve the commit hash of the initial revision. +```sh + git rev-list --reverse HEAD | head -1 +``` +**Alternatives:** +```sh +git rev-list --max-parents=0 HEAD +``` +```sh +git log --pretty=oneline | tail -1 | cut -c 1-40 +``` +```sh +git log --pretty=oneline --reverse | head -1 | cut -c 1-40 +``` + +--- + +## Import from a bundle +```sh +git clone repo.bundle -b +``` + +--- + +## Ignore one file on commit (e.g. Changelog). +```sh +git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog +``` + +--- + +## Fetch pull request by ID to a local branch +```sh +git fetch origin pull//head: +``` +**Alternatives:** +```sh +git pull origin pull//head: +``` + +--- + +## Restore deleted file. +```sh +git checkout -- +``` + +--- + +## Restore file to a specific commit-hash +```sh +git checkout -- +``` + +--- + +## Marks your commit as a fix of a previous commit. +```sh +git commit --fixup +``` + +--- + +## Skip staging area during commit. +```sh +git commit --only +``` + +--- + +## Interactive staging. +```sh +git add -i +``` + +--- + +## Status of ignored files. +```sh +git status --ignored +``` + +--- + +## Checkout a new branch without any history +```sh +git checkout --orphan +``` + +--- + +## Find guilty with binary search +```sh +git bisect start # Search start +git bisect bad # Set point to bad commit +git bisect good v2.6.13-rc2 # Set point to good commit|tag +git bisect bad # Say current state is bad +git bisect good # Say current state is good +git bisect reset # Finish search + +``` + +--- + +## Bypass pre-commit and commit-msg githooks +```sh +git commit --no-verify +``` + +--- + +## Clone a single branch +```sh +git clone -b --single-branch https://github.com/user/repo.git +``` + +--- + +## Create and switch new branch +```sh +git checkout -b +``` +**Alternatives:** +```sh +git branch && git checkout +``` +```sh +git switch -c +``` + +--- + +## Show all local branches ordered by recent commits +```sh +git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/ +``` + +--- + +## Clone a shallow copy of a repository +```sh +git clone https://github.com/user/repo.git --depth 1 +``` + +--- + +## Force push to Remote Repository +```sh +git push -f +``` + +--- + +## Group commits by authors and title +```sh +git shortlog +``` + +--- + +## Forced push but still ensure you don't overwrite other's work +```sh +git push --force-with-lease +``` + +--- + +## Number of commits in a branch +```sh +git rev-list --count +``` + +--- + +## Add object notes +```sh +git notes add -m 'Note on the previous commit....' +``` + +--- + +## Apply commit from another repository +```sh +git --git-dir=/.git format-patch -k -1 --stdout | git am -3 -k +``` + +--- + +## Specific fetch reference +```sh +git fetch origin master:refs/remotes/origin/mymaster +``` + +--- + +## Generates a summary of pending changes +```sh +git request-pull v1.0 https://git.ko.xz/project master:for-linus +``` + +--- + +## Show git status short +```sh +git status --short --branch +``` + +--- + +## Checkout a commit prior to a day ago +```sh +git checkout master@{yesterday} +``` + +--- + +## Push the current branch to the same name on the remote repository +```sh +git push origin HEAD +``` + +--- + +## Push a new local branch to remote repository and track +```sh +git push -u origin +``` + +--- + +## Update a submodule to the latest commit +```sh +cd +git pull origin +cd +git add +git commit -m "submodule updated" +``` + +--- + +## Duplicating a repository +```sh +git clone --bare https://github.com/exampleuser/old-repository.git + +git push --mirror https://github.com/exampleuser/new-repository.git +``` + +--- + diff --git a/docs/branching.md b/docs/branching.md new file mode 100644 index 0000000..1a799d9 --- /dev/null +++ b/docs/branching.md @@ -0,0 +1,137 @@ +# Branching + +## List all branches that are already merged into master +```sh +git branch --merged master +``` + +--- + +## Remove branches that have already been merged with master +```sh +git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d +``` +**Alternatives:** +```sh +git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked out +``` + +--- + +## List all branches and their upstreams, as well as last commit on branch +```sh +git branch -vv +``` + +--- + +## Track upstream branch +```sh +git branch -u origin/mybranch +``` + +--- + +## Delete local branch +```sh +git branch -d +``` + +--- + +## Get list of all local and remote branches +```sh +git branch -a +``` + +--- + +## Get only remote branches +```sh +git branch -r +``` + +--- + +## Find out branches containing commit-hash +```sh +git branch -a --contains +``` +**Alternatives:** +```sh +git branch --contains +``` + +--- + +## Rename a branch +```sh +git branch -m +``` +**Alternatives:** +```sh +git branch -m [] +``` + +--- + +## Archive the `master` branch +```sh +git archive master --format=zip --output=master.zip +``` + +--- + +## Delete local branches that has been squash and merged in the remote. +```sh +git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D +``` + +--- + +## Export a branch with history to a file. +```sh +git bundle create +``` + +--- + +## Get the name of current branch. +```sh +git rev-parse --abbrev-ref HEAD +``` + +--- + +## Show the most recent tag on the current branch. +```sh +git describe --tags --abbrev=0 +``` + +--- + +## List all branch is WIP +```sh +git checkout master && git branch --no-merged +``` + +--- + +## Preformatted patch file. +```sh +git format-patch -M upstream..topic +``` + +--- + +## Switch to a branch (modern alternative to checkout) +```sh +git switch +``` +**Alternatives:** +```sh +git switch -c +``` + +--- + diff --git a/docs/log-and-history.md b/docs/log-and-history.md new file mode 100644 index 0000000..07705f2 --- /dev/null +++ b/docs/log-and-history.md @@ -0,0 +1,304 @@ +# Log and History + +## Show helpful guides that come with Git +```sh +git help -g +``` + +--- + +## Search change by content +```sh +git log -S'' +``` + +--- + +## Show changes over time for specific file +```sh +git log -p +``` + +--- + +## List all the conflicted files +```sh +git diff --name-only --diff-filter=U +``` + +--- + +## List of all files changed in a commit +```sh +git diff-tree --no-commit-id --name-only -r +``` + +--- + +## Unstaged changes since last commit +```sh +git diff +``` + +--- + +## Changes staged for commit +```sh +git diff --cached +``` +**Alternatives:** +```sh +git diff --staged +``` + +--- + +## Show both staged and unstaged changes +```sh +git diff HEAD +``` + +--- + +## What changed since two weeks? +```sh +git log --no-merges --raw --since='2 weeks ago' +``` +**Alternatives:** +```sh +git whatchanged --since='2 weeks ago' +``` + +--- + +## See all commits made since forking from master +```sh +git log --no-merges --stat --reverse master.. +``` + +--- + +## Show all tracked files +```sh +git ls-files -t +``` + +--- + +## Show all untracked files +```sh +git ls-files --others +``` + +--- + +## Show all ignored files +```sh +git ls-files --others -i --exclude-standard +``` + +--- + +## Visualize the version tree. +```sh +git log --pretty=oneline --graph --decorate --all +``` +**Alternatives:** +```sh +gitk --all +``` +```sh +git log --graph --pretty=format:'%C(auto) %h | %s | %an | %ar%d' +``` + +--- + +## Visualize the tree including commits that are only referenced from reflogs +```sh +git log --graph --decorate --oneline $(git rev-list --walk-reflogs --all) +``` + +--- + +## Show inline word diff. +```sh +git diff --word-diff +``` + +--- + +## Show changes using common diff tools. +```sh +git difftool [-t ] +``` + +--- + +## Commits in Branch1 that are not in Branch2 +```sh +git log Branch1 ^Branch2 +``` + +--- + +## List n last commits +```sh +git log - +``` +**Alternatives:** +```sh +git log -n +``` + +--- + +## Open all conflicted files in an editor. +```sh +git diff --name-only | uniq | xargs $EDITOR +``` + +--- + +## View the GPG signatures in the commit log +```sh +git log --show-signature +``` + +--- + +## Extract file from another branch. +```sh +git show : +``` + +--- + +## List only the root and merge commits. +```sh +git log --first-parent +``` + +--- + +## List commits and changes to a specific file (even through renaming) +```sh +git log --follow -p -- +``` + +--- + +## Search Commit log across all branches for given text +```sh +git log --all --grep='' +``` + +--- + +## Get first commit in a branch (from master) +```sh +git log --oneline master.. | tail -1 +``` +**Alternatives:** +```sh +git log --reverse master.. | head -6 +``` + +--- + +## Show the author, time and last revision made to each line of a given file +```sh +git blame +``` + +--- + +## Show how many lines does an author contribute +```sh +git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s +", add, subs, loc }' - +``` +**Alternatives:** +```sh +git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s +", add, subs, loc }' - # on Mac OSX +``` + +--- + +## Show all the git-notes +```sh +git log --show-notes='*' +``` + +--- + +## List unpushed git commits +```sh +git log --branches --not --remotes +``` +**Alternatives:** +```sh +git log @{u}.. +``` +```sh +git cherry -v +``` + +--- + +## Add everything, but whitespace changes +```sh +git diff --ignore-all-space | git apply --cached +``` + +--- + +## blame on certain range +```sh +git blame -L , +``` + +--- + +## Show a Git logical variable. +```sh +git var -l | +``` + +--- + +## Get the repo name. +```sh +git rev-parse --show-toplevel +``` + +--- + +## logs between date range +```sh +git log --since='FEB 1 2017' --until='FEB 14 2017' +``` + +--- + +## Exclude author from logs +```sh +git log --perl-regexp --author='^((?!excluded-author-regex).*)$' +``` + +--- + +## View expanded details of changes in last commit +```sh +git show +``` + +--- + +## Visualize each position of HEAD in the last 30 days +```sh +git reflog +``` + +--- + diff --git a/docs/merging-and-rebasing.md b/docs/merging-and-rebasing.md new file mode 100644 index 0000000..27e9ceb --- /dev/null +++ b/docs/merging-and-rebasing.md @@ -0,0 +1,44 @@ +# Merging and Rebasing + +## Rebases 'feature' to 'master' and merges it in to master +```sh +git rebase master feature && git checkout master && git merge - +``` + +--- + +## Stash changes before rebasing +```sh +git rebase --autostash +``` + +--- + +## Squash fixup commits normal commits. +```sh +git rebase -i --autosquash +``` + +--- + +## Change previous two commits with an interactive rebase. +```sh +git rebase --interactive HEAD~2 +``` + +--- + +## Find common ancestor of two branches +```sh +git merge-base +``` + +--- + +## Change a branch base +```sh +git rebase --onto +``` + +--- + diff --git a/docs/miscellaneous.md b/docs/miscellaneous.md new file mode 100644 index 0000000..b773ba9 --- /dev/null +++ b/docs/miscellaneous.md @@ -0,0 +1,85 @@ +# Miscellaneous + +## Everyday Git in twenty commands or so +```sh +git help everyday +``` + +--- + +## Untrack files without deleting +```sh +git rm --cached +``` +**Alternatives:** +```sh +git rm --cached -r +``` + +--- + +## Don’t consider changes for tracked file. +```sh +git update-index --assume-unchanged +``` + +--- + +## Check if the change was a part of a release. +```sh +git name-rev --name-only +``` + +--- + +## List ignored files. +```sh +git check-ignore * +``` + +--- + +## Count unpacked number of objects and their disk consumption. +```sh +git count-objects --human-readable +``` + +--- + +## Prune all unreachable objects from the object database. +```sh +git gc --prune=now --aggressive +``` + +--- + +## Instantly browse your working repository in gitweb. +```sh +git instaweb [--local] [--httpd=] [--port=] [--browser=] +``` + +--- + +## Find lines matching the pattern (regex or string) in tracked files +```sh +git grep --heading --line-number 'foo bar' +``` + +--- + +## Backup untracked files. +```sh +git ls-files --others -i --exclude-standard | xargs zip untracked.zip +``` + +--- + +## Send a collection of patches as emails +```sh +git send-email [] … + +git send-email [] +``` + +--- + diff --git a/docs/remotes.md b/docs/remotes.md new file mode 100644 index 0000000..9ef03b2 --- /dev/null +++ b/docs/remotes.md @@ -0,0 +1,48 @@ +# Remotes + +## Changing a remote's URL +```sh +git remote set-url origin +``` + +--- + +## Get list of all remote references +```sh +git remote +``` +**Alternatives:** +```sh +git remote show +``` + +--- + +## Adding Remote name +```sh +git remote add +``` + +--- + +## List all currently configured remotes +```sh +git remote -v +``` + +--- + +## List references in a remote repository +```sh +git ls-remote git://git.kernel.org/pub/scm/git/git.git +``` + +--- + +## Refresh the list of remote branches +```sh +git remote update origin --prune +``` + +--- + diff --git a/docs/setup-and-config.md b/docs/setup-and-config.md new file mode 100644 index 0000000..37072de --- /dev/null +++ b/docs/setup-and-config.md @@ -0,0 +1,156 @@ +# Setup and Config + +## Remove sensitive data from history, after a push +```sh +git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ' --prune-empty --tag-name-filter cat -- --all && git push origin --force --all +``` + +--- + +## Reset author, after author has been changed in the global config. +```sh +git commit --amend --reset-author --no-edit +``` + +--- + +## Get git bash completion +```sh +curl -L http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc +``` + +--- + +## Git Aliases +```sh +git config --global alias. +git config --global alias.st status +``` + +--- + +## Always rebase instead of merge on pull. +```sh +git config --global pull.rebase true +``` +**Alternatives:** +```sh +#git < 1.7.9 +git config --global branch.autosetuprebase always +``` + +--- + +## List all the alias and configs. +```sh +git config --list +``` + +--- + +## Make git case sensitive. +```sh +git config --global core.ignorecase false +``` + +--- + +## Add custom editors. +```sh +git config --global core.editor '$EDITOR' +``` + +--- + +## Auto correct typos. +```sh +git config --global help.autocorrect 1 +``` + +--- + +## Reuse recorded resolution, record and reuse previous conflicts resolutions. +```sh +git config --global rerere.enabled 1 +``` + +--- + +## Remove entry in the global config. +```sh +git config --global --unset +``` + +--- + +## Ignore file mode changes on commits +```sh +git config core.fileMode false +``` + +--- + +## Turn off git colored terminal output +```sh +git config --global color.ui false +``` + +--- + +## Specific color settings +```sh +git config --global +``` + +--- + +## Alias: git undo +```sh +git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f' +``` + +--- + +## Edit [local/global] git config +```sh +git config [--global] --edit +``` + +--- + +## List all git aliases +```sh +git config -l | grep alias | sed 's/^alias\.//g' +``` +**Alternatives:** +```sh +git config -l | grep alias | cut -d '.' -f 2 +``` + +--- + +## Use SSH instead of HTTPs for remotes +```sh +git config --global url.'git@github.com:'.insteadOf 'https://github.com/' +``` + +--- + +## Prevent auto replacing LF with CRLF +```sh +git config --global core.autocrlf false +``` + +--- + +## Edit config for each level +```sh +git config --edit --system + +git config --edit --global + +git config --edit --local +``` + +--- + diff --git a/docs/stashing.md b/docs/stashing.md new file mode 100644 index 0000000..cc247b9 --- /dev/null +++ b/docs/stashing.md @@ -0,0 +1,109 @@ +# Stashing + +## Saving current state of tracked files without committing +```sh +git stash +``` +**Alternatives:** +```sh +git stash push +``` + +--- + +## Saving current state of unstaged changes to tracked files +```sh +git stash -k +``` +**Alternatives:** +```sh +git stash --keep-index +``` +```sh +git stash push --keep-index +``` + +--- + +## Saving current state including untracked files +```sh +git stash -u +``` +**Alternatives:** +```sh +git stash push -u +``` +```sh +git stash push --include-untracked +``` + +--- + +## Saving current state with message +```sh +git stash push -m +``` +**Alternatives:** +```sh +git stash push --message +``` + +--- + +## Saving current state of all files (ignored, untracked, and tracked) +```sh +git stash -a +``` +**Alternatives:** +```sh +git stash --all +``` +```sh +git stash push --all +``` + +--- + +## Show list of all saved stashes +```sh +git stash list +``` + +--- + +## Show the contents of any stash in patch form +```sh +git stash show -p +``` + +--- + +## Apply any stash without deleting from the stashed list +```sh +git stash apply +``` + +--- + +## Apply last stashed state and delete it from stashed list +```sh +git stash pop +``` +**Alternatives:** +```sh +git stash apply stash@{0} && git stash drop stash@{0} +``` + +--- + +## Delete all stored stashes +```sh +git stash clear +``` +**Alternatives:** +```sh +git stash drop +``` + +--- + diff --git a/docs/submodules-and-subtrees.md b/docs/submodules-and-subtrees.md new file mode 100644 index 0000000..d86f4f2 --- /dev/null +++ b/docs/submodules-and-subtrees.md @@ -0,0 +1,41 @@ +# Submodules and Subtrees + +## Update all the submodules +```sh +git submodule foreach git pull +``` +**Alternatives:** +```sh +git submodule update --init --recursive +``` +```sh +git submodule update --remote +``` + +--- + +## Deploying git tracked subfolder to gh-pages +```sh +git subtree push --prefix subfolder_name origin gh-pages +``` +**Alternatives:** +```sh +git subtree push --prefix subfolder_name origin branch_name +``` + +--- + +## Adding a project to repo using subtree +```sh +git subtree add --prefix=/ --squash git@github.com:/.git master +``` + +--- + +## Get latest changes in your repo for a linked project using subtree +```sh +git subtree pull --prefix=/ --squash git@github.com:/.git master +``` + +--- + diff --git a/docs/tagging.md b/docs/tagging.md new file mode 100644 index 0000000..8d386ec --- /dev/null +++ b/docs/tagging.md @@ -0,0 +1,16 @@ +# Tagging + +## Create local tag +```sh +git tag +``` + +--- + +## Delete local tag +```sh +git tag -d +``` + +--- + diff --git a/docs/undoing-changes.md b/docs/undoing-changes.md new file mode 100644 index 0000000..627e286 --- /dev/null +++ b/docs/undoing-changes.md @@ -0,0 +1,104 @@ +# Undoing Changes + +## Sync with remote, overwrite local changes +```sh +git fetch origin && git reset --hard origin/master && git clean -f -d +``` + +--- + +## Git reset first commit +```sh +git update-ref -d HEAD +``` + +--- + +## Reset: preserve uncommitted local changes +```sh +git reset --keep +``` + +--- + +## Revert: Undo a commit by creating a new commit +```sh +git revert +``` + +--- + +## Reset: Discard commits, advised for private branch +```sh +git reset +``` + +--- + +## Before deleting untracked files/directory, do a dry run to get the list of these files/directories +```sh +git clean -n +``` + +--- + +## Forcefully remove untracked files +```sh +git clean -f +``` + +--- + +## Forcefully remove untracked directory +```sh +git clean -f -d +``` + +--- + +## Undo assume-unchanged. +```sh +git update-index --no-assume-unchanged +``` + +--- + +## Clean the files from `.gitignore`. +```sh +git clean -X -f +``` + +--- + +## Dry run. (any command that supports dry-run flag should do.) +```sh +git clean -fd --dry-run +``` + +--- + +## Unstaging Staged file +```sh +git reset HEAD +``` + +--- + +## Revert: Reverting an entire merge +```sh +git revert -m 1 +``` + +--- + +## Restore file (modern alternative to reset/checkout --) +```sh +git restore +``` +**Alternatives:** +```sh +git restore --staged +``` + +--- + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..09e18d2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2973 @@ +{ + "name": "tips", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "tips", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "honkit": "^6.1.6", + "husky": "^5.0.9" + } + }, + "node_modules/@asciidoctor/cli": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@asciidoctor/cli/-/cli-3.5.0.tgz", + "integrity": "sha512-/VMHXcZBnZ9vgWfmqk9Hu0x0gMjPLup0YGq/xA8qCQuk11kUIZNMVQwgSsIUzOEwJqIUD7CgncJdtfwv1Ndxuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "yargs": "16.2.0" + }, + "bin": { + "asciidoctor": "bin/asciidoctor", + "asciidoctorjs": "bin/asciidoctor" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0" + }, + "peerDependencies": { + "@asciidoctor/core": "^2.0.0-rc.1" + } + }, + "node_modules/@asciidoctor/core": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-2.2.8.tgz", + "integrity": "sha512-oozXk7ZO1RAd/KLFLkKOhqTcG4GO3CV44WwOFg2gMcCsqCUTarvMT7xERIoWW2WurKbB0/ce+98r01p8xPOlBw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asciidoctor-opal-runtime": "0.3.3", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0", + "yarn": ">=1.1.0" + } + }, + "node_modules/@honkit/asciidoc": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@honkit/asciidoc/-/asciidoc-6.1.6.tgz", + "integrity": "sha512-/Oy+noEYyL+yLBLia/vAu7+6XYa00M5ZoE9oqRYVsZOWDd6RLcuBhLC4EfKFZk5HqJ/f4Om09lvJgXbIXY23mg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@honkit/html": "6.1.6", + "asciidoctor": "^2.2.8" + } + }, + "node_modules/@honkit/honkit-plugin-fontsettings": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@honkit/honkit-plugin-fontsettings/-/honkit-plugin-fontsettings-6.1.6.tgz", + "integrity": "sha512-NExKrTqleTffMDqrdcb268hgQkScVjK9N+bDIxQ63dYmNhtuJ7EcLjijfkOtcS7DEnrR8S5lSjJoVC5oxPzxaQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "gitbook": ">=2.4.0" + } + }, + "node_modules/@honkit/honkit-plugin-highlight": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@honkit/honkit-plugin-highlight/-/honkit-plugin-highlight-6.1.6.tgz", + "integrity": "sha512-i6JlFWaMNKBAfU7WH+kA0gNa5c2gJABPO4UOd0vlOupEqwT4cvRLWcDBp+oAge6aCiTpsyrt8sGnavcpg0kubA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "highlight.js": "^11.10.0" + }, + "engines": { + "gitbook": ">=2.4.0" + } + }, + "node_modules/@honkit/honkit-plugin-theme-default": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@honkit/honkit-plugin-theme-default/-/honkit-plugin-theme-default-6.1.6.tgz", + "integrity": "sha512-AhLEEY0aBTgo4MlGcrW/Rlh/lkdsJdI8oqFV5pU+mSAuHi0Yf49EcU+OkzW8ImWvjIZxjjYN3TJD4Agmpqos+Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "gitbook": ">=3.0.0" + } + }, + "node_modules/@honkit/html": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@honkit/html/-/html-6.1.6.tgz", + "integrity": "sha512-WtWroTzNdx25S3C3zqyWXh0wLCtkFK+uACHUCGrJxijOns0ivlrOk/QcoF+59EfFMCD9N64VQMs18IduDuF+/Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "cheerio": "^1.0.0", + "lodash": "^4.17.23" + } + }, + "node_modules/@honkit/markdown-legacy": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@honkit/markdown-legacy/-/markdown-legacy-6.1.6.tgz", + "integrity": "sha512-AgMlVqkwLgbOf7B6mRc0vLRSklYxWovX2GPcKYMcPjkGlB5pMTd76Arb1JEifRdhmRLs5SmZ0Te+TME+Xpb/jw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@honkit/html": "6.1.6", + "kramed": "0.5.6", + "lodash": "^4.17.23" + } + }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-difference": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-difference/-/array-difference-0.0.1.tgz", + "integrity": "sha512-LMXXDKmRSsO+d7N73LyTBWlT+GiLfNUCWeeWmZivzJ1NxSPOobS+w8bIAAfGEV35oVBsk9u9cXii8dDceU5NPw==", + "dev": true, + "license": "MIT Expat" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/asciidoctor": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/asciidoctor/-/asciidoctor-2.2.8.tgz", + "integrity": "sha512-G+sDYWnNo+QHRkIvN5k7ASbvrd2bHuNXHlZ83+PjVFYtl0//as5iebq+Bdf3aSwXrkM7akcEJPUpdTjjP0MgYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asciidoctor/cli": "3.5.0", + "@asciidoctor/core": "2.2.8" + }, + "bin": { + "asciidoctor": "bin/asciidoctor", + "asciidoctorjs": "bin/asciidoctor" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0", + "yarn": ">=1.1.0" + } + }, + "node_modules/asciidoctor-opal-runtime": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/asciidoctor-opal-runtime/-/asciidoctor-opal-runtime-0.3.3.tgz", + "integrity": "sha512-/CEVNiOia8E5BMO9FLooo+Kv18K4+4JBFRJp8vUy/N5dMRAg+fRNV4HA+o6aoSC79jVU/aT5XvUpxSxSsTS8FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "7.1.3", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bash-color": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/bash-color/-/bash-color-0.0.4.tgz", + "integrity": "sha512-ZNB4525U7BxT6v9C8LEtywyCgB4Pjnm7/bh+ru/Z9Ecxvg3fDjaJ6z305z9a61orQdbB1zqYHh5JbUqx4s4K0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ==", + "dev": true, + "dependencies": { + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==", + "dev": true + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA==", + "dev": true + }, + "node_modules/cp": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/cp/-/cp-0.2.0.tgz", + "integrity": "sha512-4ftCvShHjIZG/zzomHyunNpBof3sOFTTmU6s6q9DdqAL/ANqrKV3pr6Z6kVfBI4hjn59DFLImrBqn7GuuMqSZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cpr": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cpr/-/cpr-3.0.1.tgz", + "integrity": "sha512-Xch4PXQ/KC8lJ+KfJ9JI6eG/nmppLrPPWg5Q+vh65Qr9EjuJEubxh/H/Le1TmCZ7+Xv7iJuNRqapyOFZB+wsxA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "graceful-fs": "^4.1.5", + "minimist": "^1.2.0", + "mkdirp": "~0.5.1", + "rimraf": "^2.5.4" + }, + "bin": { + "cpr": "bin/cpr" + } + }, + "node_modules/cpr/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/direction": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/direction/-/direction-0.1.5.tgz", + "integrity": "sha512-HceXsAluGbXKCz2qCVbXFUH4Vn4eNMWxY5gzydMFMnS1zKSwvDASqLwcrYLIFDpwuZ63FUAqjDLEP1eicHt8DQ==", + "dev": true, + "license": "MIT", + "bin": { + "direction": "cli.js" + } + }, + "node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/domutils/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domutils/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha512-UtVv4l5MhijsYUxPJo4390gzfZvAnTHreNnDjnTZaKIiZ/SemXxAhBkYSKtWa5RtBXbLP8tMgn/n0RUa/H7jXw==", + "dev": true, + "dependencies": { + "string-template": "~0.2.1", + "xtend": "~4.0.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", + "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/front-matter": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-2.3.0.tgz", + "integrity": "sha512-+gOIDsGWHVAiWSDfg3vpiHwkOrwO4XNS3YQH5DMmneLEPWzdCAnbSQCtxReF4yPK1nszLvAmLeR2SprnDQDnyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-yaml": "^3.10.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gitbook-plugin-livereload": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/gitbook-plugin-livereload/-/gitbook-plugin-livereload-0.0.1.tgz", + "integrity": "sha512-+5xinicId2ZcbP6jBTFfQBnjz8nhoBgcOuQfKTEM6Yg9fBsmo2mxY6ubrx1b5ozuIMyfDLkSihx97A7+X+EtQQ==", + "dev": true, + "license": "Apache 2", + "engines": { + "gitbook": "*" + } + }, + "node_modules/gitbook-plugin-lunr": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gitbook-plugin-lunr/-/gitbook-plugin-lunr-1.2.0.tgz", + "integrity": "sha512-QBfFLMZmoyOfLzc5aZrlRCkmzb9YcSjzdnyJFiRI/nX+Nd6kK1XyN4DLGnNSMHkRcJchcpWiQ6XGqSqo7e+d+g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "gitbook-plugin-search": "*", + "html-entities": "1.2.0", + "lunr": "0.5.12" + }, + "engines": { + "gitbook": ">=3.0.0-pre.0" + } + }, + "node_modules/gitbook-plugin-search": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gitbook-plugin-search/-/gitbook-plugin-search-2.2.1.tgz", + "integrity": "sha512-oP9jhaKFUVPo756G9ywuuI43YdkZClSjfpFzNKe/a/Rcn3oVsrAM/PjdQ+dt65KfZVo3iW1LY4WdiZnNqzRP8g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "gitbook": ">=3.0.0-pre.0" + } + }, + "node_modules/github-slugid": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/github-slugid/-/github-slugid-1.0.1.tgz", + "integrity": "sha512-L5uVRzSM8jyWTgHUtaHwmymZW8S234JrIaOGotPK+0emNz9XsO6qqgw1KiI5YfP1SyBjG0ApNYU0vpb01teM9Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/honkit": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/honkit/-/honkit-6.1.6.tgz", + "integrity": "sha512-Id0sy5fXYlYcUDk8paze0OazsRZhdsdo8HsuhkAxiNvxsG+8iL9qK5gfnYqNr7PGsfqW7g79EEPt9+/BDCMFow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@honkit/asciidoc": "6.1.6", + "@honkit/honkit-plugin-fontsettings": "6.1.6", + "@honkit/honkit-plugin-highlight": "6.1.6", + "@honkit/honkit-plugin-theme-default": "6.1.6", + "@honkit/html": "6.1.6", + "@honkit/markdown-legacy": "6.1.6", + "bash-color": "^0.0.4", + "cheerio": "^1.0.0", + "chokidar": "^3.6.0", + "commander": "^5.1.0", + "cp": "^0.2.0", + "cpr": "^3.0.1", + "crc": "^3.8.0", + "destroy": "^1.2.0", + "direction": "^0.1.5", + "dom-serializer": "^0.1.1", + "error": "7.0.2", + "escape-html": "^1.0.3", + "escape-string-regexp": "^4.0.0", + "extend": "^3.0.2", + "flat-cache": "^2.0.1", + "front-matter": "^2.3.0", + "gitbook-plugin-livereload": "^0.0.1", + "gitbook-plugin-lunr": "^1.2.0", + "gitbook-plugin-search": "^2.2.1", + "github-slugid": "^1.0.1", + "i18n-t": "^1.0.1", + "ignore": "^5.3.2", + "immutable": "^3.8.2", + "is": "^3.3.0", + "js-yaml": "^3.14.1", + "json-schema-defaults": "^0.1.1", + "jsonschema": "1.1.0", + "juice": "^8.1.0", + "lru_map": "^0.4.1", + "memoize-one": "^5.2.1", + "mkdirp": "^1.0.4", + "moment": "^2.30.1", + "nunjucks": "^3.2.4", + "nunjucks-do": "^1.0.0", + "object-path": "^0.11.8", + "omit-keys": "^0.1.0", + "open": "^7.4.2", + "q": "^1.5.1", + "resolve": "^1.22.8", + "semver": "^7.6.3", + "send": "^0.17.2", + "tiny-lr": "^1.1.1", + "tmp": "0.2.4", + "urijs": "^1.19.11" + }, + "bin": { + "honkit": "bin/honkit.js" + } + }, + "node_modules/honkit/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-entities": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.0.tgz", + "integrity": "sha512-0md7tlUUyb0BEQGsZzbqty1CgV6RESOoxdivt94AScqhBhYsPCCQCOaGvur/RospMjYpPJ7iFe3zw4Bu4SVA8g==", + "dev": true, + "engines": [ + "node >= 0.4.0" + ], + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/husky": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-5.2.0.tgz", + "integrity": "sha512-AM8T/auHXRBxlrfPVLKP6jt49GCM2Zz47m8G3FOMsLmTv8Dj/fKVWE0Rh2d4Qrvmy131xEsdQnb3OXRib67PGg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/typicode" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/husky" + } + ], + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/i18n-t": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/i18n-t/-/i18n-t-1.0.1.tgz", + "integrity": "sha512-2NmZwpsnRTzpZfIP6Rcic16m5QBNVaIwVyU182+iatd6RNbWmGi74LTA/R/oDa58RZ87bHChLgWpmulEAoEruQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash": "^4.13.1" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.3.tgz", + "integrity": "sha512-AUY/VyX0E5XlibOmWt10uabJzam1zlYjwiEgQSDc5+UIkFNaF9WM0JxXKaNMGf+F/ffUF+7kRKXM9A7C0xXqMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/is/-/is-3.3.2.tgz", + "integrity": "sha512-a2xr4E3s1PjDS8ORcGgXpWx6V+liNs+O3JRD2mb9aeugD7rtkkZ0zgLdYgw0tWsKhsdiezGYptSiMlVazCBTuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isobject": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-0.2.0.tgz", + "integrity": "sha512-VaWq6XYAsbvM0wf4dyBO7WH9D7GosB7ZZlqrawI9BBiTMINBeCyqSKBa35m870MY3O4aM31pYyZi9DfGrYMJrQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-defaults": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/json-schema-defaults/-/json-schema-defaults-0.1.1.tgz", + "integrity": "sha512-6Q5YS7pSDCXUbtS9uAFE+uUgvE45dBHCMyhqe6liJmL+oIa4zbACSS6nr6Lh+73mN+MnWBCExtN3C14S7Jrm7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonschema": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.1.0.tgz", + "integrity": "sha512-nQhT+ioA1XM8CpxJYlBfcUj6HF3f3f2KbLgV3tcxOt85RKpk2b0Do/C5BnCCCfdAarAjWRSFlln0Uanl4tBCHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/juice": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/juice/-/juice-8.1.0.tgz", + "integrity": "sha512-FLzurJrx5Iv1e7CfBSZH68dC04EEvXvvVvPYB7Vx1WAuhCp1ZPIMtqxc+WTWxVkpTIC2Ach/GAv0rQbtGf6YMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cheerio": "1.0.0-rc.10", + "commander": "^6.1.0", + "mensch": "^0.3.4", + "slick": "^1.12.2", + "web-resource-inliner": "^6.0.1" + }, + "bin": { + "juice": "bin/juice" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/juice/node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/juice/node_modules/cheerio-select": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", + "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "css-select": "^4.3.0", + "css-what": "^6.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.3.1", + "domutils": "^2.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/juice/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/juice/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/juice/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/juice/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/juice/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/juice/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/juice/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/juice/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/juice/node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/kramed": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/kramed/-/kramed-0.5.6.tgz", + "integrity": "sha512-V4qwQAp8HPQPU6Ph9Q4bc+P+nKQWEGlWYLRDkK7n+CPaMi8/VRm9/R710tRmag4whLsnKR91CO9Ras/Rnff9bw==", + "dev": true, + "license": "MIT", + "bin": { + "kramed": "bin/kramed" + } + }, + "node_modules/livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru_map": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.4.1.tgz", + "integrity": "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lunr": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-0.5.12.tgz", + "integrity": "sha512-/EtfOyuNP7BLVKhDvLyKJkFvCup2vwcIwQXCuasZEFk7XUJ4/blztVuefeLapUb1I5uMGsosN9A8J9Mu9A6yBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/mensch": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", + "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nunjucks": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/nunjucks-do": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nunjucks-do/-/nunjucks-do-1.0.0.tgz", + "integrity": "sha512-GQwENqZdcSbni0iYfEiNi3hs634JBSQdxnbnd9CetGkMYPnpjG1Jn5DT/qgAaC/STwMc7C4MSIJvLSNertclSg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-path": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", + "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/omit-keys": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/omit-keys/-/omit-keys-0.1.0.tgz", + "integrity": "sha512-JfTw3lVL54592o0Vb1frMN6DpS/wT8Uz/IWg1e0w2ZkjF4yyPYHGJAtdcBcUbp/RMf/LbdMzIz6QZ6ycaRCFUA==", + "dev": true, + "dependencies": { + "array-difference": "0.0.1", + "isobject": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha512-WmJJU2e9Y6M5UzTOkHaM7xJGAPQD8PNzx3bAd2+uhZAim6wDk6dAZxPVYLF67XhbR4hmKGh33Lpmh4XWrCH5Mg==", + "deprecated": "No longer maintained. Please upgrade to a stable version.", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "1", + "string_decoder": "0.10" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slick": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", + "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==", + "dev": true, + "license": "MIT (http://mootools.net/license.txt)", + "engines": { + "node": "*" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tiny-lr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" + } + }, + "node_modules/tiny-lr/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/tmp": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", + "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/undici": { + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.22.0.tgz", + "integrity": "sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/unxhr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.0.1.tgz", + "integrity": "sha512-MAhukhVHyaLGDjyDYhy8gVjWJyhTECCdNsLwlMoGFoNJ3o79fpQhtQuzmAE4IxCMDwraF4cW8ZjpAV0m9CRQbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.11" + } + }, + "node_modules/urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/valid-data-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz", + "integrity": "sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/web-resource-inliner": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz", + "integrity": "sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "escape-goat": "^3.0.0", + "htmlparser2": "^5.0.0", + "mime": "^2.4.6", + "node-fetch": "^2.6.0", + "valid-data-url": "^3.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web-resource-inliner/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/dom-serializer/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/domutils/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/htmlparser2": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", + "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.3.0", + "domutils": "^2.4.2", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/fb55/htmlparser2?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + } + } +} diff --git a/package.json b/package.json index 6d1b215..d98e107 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,8 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "precommit": "npm run generate && git add README.md", - "update-readme": "echo 'Updating the readme…'; doxie --render < ./tips.json --inject into README.md && echo '…done!'", - "update-toc": "echo 'Updating the table of contents…'; doxie --render .doxie.render.toc.js < ./tips.json --append '\n' --inject into README.md as toc && echo '…done!'", - "generate": "npm run update-readme; npm run update-toc" + "generate": "node build-readme.js", + "docs:build": "honkit build ./docs" }, "repository": { "type": "git", @@ -28,11 +27,7 @@ }, "homepage": "https://github.com/git-tips/tips#readme", "devDependencies": { - "doxie": "^0.2.2", - "doxie.append": "^0.1.0", - "doxie.inject": "^0.1.1", - "doxie.output": "^0.3.0", - "doxie.render": "^0.3.0", - "husky": "^0.8.1" + "honkit": "^6.1.6", + "husky": "^5.0.9" } } diff --git a/tips.json b/tips.json index 4ecadbe..5b46f75 100644 --- a/tips.json +++ b/tips.json @@ -1,507 +1,986 @@ -[{ - "title": "Everyday Git in twenty commands or so", - "tip": "git help everyday" - }, { - "title": "Show helpful guides that come with Git", - "tip": "git help -g" - }, { - "title": "Search change by content", - "tip": "git log -S''" - }, { - "title": "Remove sensitive data from history, after a push", - "tip": "git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ' --prune-empty --tag-name-filter cat -- --all && git push origin --force --all" - }, { - "title": "Sync with remote, overwrite local changes", - "tip": "git fetch origin && git reset --hard origin/master && git clean -f -d" - }, { - "title": "List of all files till a commit", - "tip": "git ls-tree --name-only -r " - }, { - "title": "Git reset first commit", - "tip": "git update-ref -d HEAD" - }, { - "title": "List all the conflicted files", - "tip": "git diff --name-only --diff-filter=U" - }, { - "title": "List of all files changed in a commit", - "tip": "git diff-tree --no-commit-id --name-only -r " - }, { - "title": "Unstaged changes since last commit", - "tip": "git diff" - }, { - "title": "Changes staged for commit", - "tip": "git diff --cached", - "alternatives": ["git diff --staged"] - }, { - "title": "Show both staged and unstaged changes", - "tip": "git diff HEAD" - }, { - "title": "List all branches that are already merged into master", - "tip": "git branch --merged master" - }, { - "title": "Quickly switch to the previous branch", - "tip": "git checkout -", - "alternatives": ["git checkout @{-1}"] - }, { - "title": "Remove branches that have already been merged with master", - "tip": "git branch --merged master | grep -v '^\\*' | xargs -n 1 git branch -d", - "alternatives": ["git branch --merged master | grep -v '^\\*\\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked out"] - }, { - "title": "List all branches and their upstreams, as well as last commit on branch", - "tip": "git branch -vv" - }, { - "title": "Track upstream branch", - "tip": "git branch -u origin/mybranch" - }, { - "title": "Delete local branch", - "tip": "git branch -d " - }, { - "title": "Delete remote branch", - "tip": "git push origin --delete ", - "alternatives": ["git push origin :"] - }, { - "title": "Delete local tag", - "tip": "git tag -d " - }, { - "title": "Delete remote tag", - "tip": "git push origin :refs/tags/" - }, { - "title": "Undo local changes with the last content in head", - "tip": "git checkout -- " - }, { - "title": "Revert: Undo a commit by creating a new commit", - "tip": "git revert " - }, { - "title": "Reset: Discard commits, advised for private branch", - "tip": "git reset " - }, { - "title": "Reword the previous commit message", - "tip": "git commit -v --amend" - }, { - "title": "See commit history for just the current branch", - "tip": "git cherry -v master" - }, { - "title": "Amend author.", - "tip": "git commit --amend --author='Author Name '" - }, { - "title": "Reset author, after author has been changed in the global config.", - "tip": "git commit --amend --reset-author --no-edit" - }, { - "title": "Changing a remote's URL", - "tip": "git remote set-url origin " - }, { - "title": "Get list of all remote references", - "tip": "git remote", - "alternatives": ["git remote show"] - }, { - "title": "Get list of all local and remote branches", - "tip": "git branch -a" - }, { - "title": "Get only remote branches", - "tip": "git branch -r" - }, { - "title": "Stage parts of a changed file, instead of the entire file", - "tip": "git add -p" - }, { - "title": "Get git bash completion", - "tip": "curl -L http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc" - }, { - "title": "What changed since two weeks?", - "tip": "git log --no-merges --raw --since='2 weeks ago'", - "alternatives": ["git whatchanged --since='2 weeks ago'"] - }, { - "title": "See all commits made since forking from master", - "tip": "git log --no-merges --stat --reverse master.." - }, { - "title": "Pick commits across branches using cherry-pick", - "tip": "git checkout && git cherry-pick " - }, { - "title": "Find out branches containing commit-hash", - "tip": "git branch -a --contains ", - "alternatives": ["git branch --contains "] - }, { - "title": "Git Aliases", - "tip": "git config --global alias. \ngit config --global alias.st status" - }, { - "title": "Saving current state of tracked files without commiting", - "tip": "git stash", - "alternatives": ["git stash save"] - }, { - "title": "Saving current state of unstaged changes to tracked files", - "tip": "git stash -k", - "alternatives": ["git stash --keep-index", "git stash save --keep-index"] - }, { - "title": "Saving current state including untracked files", - "tip": "git stash -u", - "alternatives": ["git stash save -u", "git stash save --include-untracked"] - }, { - "title": "Saving current state with message", - "tip": "git stash save " - }, { - "title": "Saving current state of all files (ignored, untracked, and tracked)", - "tip": "git stash -a", - "alternatives": ["git stash --all", "git stash save --all"] - }, { - "title": "Show list of all saved stashes", - "tip": "git stash list" - }, { - "title": "Apply any stash without deleting from the stashed list", - "tip": "git stash apply " - }, { - "title": "Apply last stashed state and delete it from stashed list", - "tip": "git stash pop", - "alternatives": ["git stash apply stash@{0} && git stash drop stash@{0}"] - }, { - "title": "Delete all stored stashes", - "tip": "git stash clear", - "alternatives": ["git stash drop "] - }, { - "title": "Grab a single file from a stash", - "tip": "git checkout -- ", - "alternatives": ["git checkout stash@{0} -- "] - }, { - "title": "Show all tracked files", - "tip": "git ls-files -t" - }, { - "title": "Show all untracked files", - "tip": "git ls-files --others" - }, { - "title": "Show all ignored files", - "tip": "git ls-files --others -i --exclude-standard" - }, { - "title": "Create new working tree from a repository (git 2.5)", - "tip": "git worktree add -b " - }, { - "title": "Create new working tree from HEAD state", - "tip": "git worktree add --detach HEAD" - }, { - "title": "Untrack files without deleting", - "tip": "git rm --cached ", - "alternatives": ["git rm --cached -r "] - }, { - "title": "Before deleting untracked files/directory, do a dry run to get the list of these files/directories", - "tip": "git clean -n" - }, { - "title": "Forcefully remove untracked files", - "tip": "git clean -f" - }, { - "title": "Forcefully remove untracked directory", - "tip": "git clean -f -d" - }, { - "title": "Update all the submodules", - "tip": "git submodule foreach git pull", - "alternatives": ["git submodule update --init --recursive", "git submodule update --remote"] - }, { - "title": "Show all commits in the current branch yet to be merged to master", - "tip": "git cherry -v master", - "alternatives": ["git cherry -v master "] - }, { - "title": "Rename a branch", - "tip": "git branch -m ", - "alternatives": ["git branch -m [] "] - }, { - "title": "Rebases 'feature' to 'master' and merges it in to master ", - "tip": "git rebase master feature && git checkout master && git merge -" - }, { - "title": "Archive the `master` branch", - "tip": "git archive master --format=zip --output=master.zip" - }, { - "title": "Modify previous commit without modifying the commit message", - "tip": "git add --all && git commit --amend --no-edit" - }, { - "title": "Prunes references to remote branches that have been deleted in the remote.", - "tip": "git fetch -p", - "alternatives": ["git remote prune origin"] - }, { - "title": "Retrieve the commit hash of the initial revision.", - "tip": " git rev-list --reverse HEAD | head -1", - "alternatives": ["git rev-list --max-parents=0 HEAD", "git log --pretty=oneline | tail -1 | cut -c 1-40", "git log --pretty=oneline --reverse | head -1 | cut -c 1-40"] - }, { - "title": "Visualize the version tree.", - "tip": "git log --pretty=oneline --graph --decorate --all", - "alternatives": ["gitk --all", "git log --graph --pretty=format:'%C(auto) %h | %s | %an | %ar%d'"] - }, { - "title": "Visualize the tree including commits that are only referenced from reflogs", - "tip": "git log --graph --decorate --oneline $(git rev-list --walk-reflogs --all)" - }, { - "title": "Deploying git tracked subfolder to gh-pages", - "tip": "git subtree push --prefix subfolder_name origin gh-pages", - "alternatives": "git subtree push --prefix subfolder_name origin branch_name" - }, { - "title": "Adding a project to repo using subtree", - "tip": "git subtree add --prefix=/ --squash git@github.com:/.git master" - }, { - "title": "Get latest changes in your repo for a linked project using subtree", - "tip": "git subtree pull --prefix=/ --squash git@github.com:/.git master" - }, { - "title": "Export a branch with history to a file.", - "tip": "git bundle create " - }, { - "title": "Import from a bundle", - "tip": "git clone repo.bundle -b " - }, { - "title": "Get the name of current branch.", - "tip": "git rev-parse --abbrev-ref HEAD" - }, { - "title": "Ignore one file on commit (e.g. Changelog).", - "tip": "git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog" - }, { - "title": "Stash changes before rebasing", - "tip": "git rebase --autostash" - }, { - "title": "Fetch pull request by ID to a local branch", - "tip": "git fetch origin pull//head:", - "alternatives": ["git pull origin pull//head:"] - }, { - "title": "Show the most recent tag on the current branch.", - "tip": "git describe --tags --abbrev=0" - }, { - "title": "Show inline word diff.", - "tip": "git diff --word-diff" - }, { - "title": "Show changes using common diff tools.", - "tip": "git difftool [-t ] " - }, { - "title": "Don’t consider changes for tracked file.", - "tip": "git update-index --assume-unchanged " - }, { - "title": "Undo assume-unchanged.", - "tip": "git update-index --no-assume-unchanged " - }, { - "title": "Clean the files from `.gitignore`.", - "tip": "git clean -X -f" - }, { - "title": "Restore deleted file.", - "tip": "git checkout ^ -- " - }, { - "title": "Restore file to a specific commit-hash", - "tip": "git checkout -- " - }, { - "title": "Always rebase instead of merge on pull.", - "tip": "git config --global pull.rebase true", - "alternatives": ["#git < 1.7.9\ngit config --global branch.autosetuprebase always"] - }, { - "title": "List all the alias and configs.", - "tip": "git config --list" - }, { - "title": "Make git case sensitive.", - "tip": "git config --global core.ignorecase false" - }, { - "title": "Add custom editors.", - "tip": "git config --global core.editor '$EDITOR'" - }, { - "title": "Auto correct typos.", - "tip": "git config --global help.autocorrect 1" - }, { - "title": "Check if the change was a part of a release.", - "tip": "git name-rev --name-only " - }, { - "title": "Dry run. (any command that supports dry-run flag should do.)", - "tip": "git clean -fd --dry-run" - }, { - "title": "Marks your commit as a fix of a previous commit.", - "tip": "git commit --fixup " - }, { - "title": "Squash fixup commits normal commits.", - "tip": "git rebase -i --autosquash" - }, { - "title": "Skip staging area during commit.", - "tip": "git commit --only " - }, { - "title": "Interactive staging.", - "tip": "git add -i" - }, { - "title": "List ignored files.", - "tip": "git check-ignore *" - }, { - "title": "Status of ignored files.", - "tip": "git status --ignored" - }, { - "title": "Commits in Branch1 that are not in Branch2", - "tip": "git log Branch1 ^Branch2" - }, { - "title": "List n last commits", - "tip": "git log -", - "alternatives": ["git log -n "] - }, { - "title": "Reuse recorded resolution, record and reuse previous conflicts resolutions.", - "tip": "git config --global rerere.enabled 1" - }, { - "title": "Open all conflicted files in an editor.", - "tip": "git diff --name-only | uniq | xargs $EDITOR" - }, { - "title": "Count unpacked number of objects and their disk consumption.", - "tip": "git count-objects --human-readable" - }, { - "title": "Prune all unreachable objects from the object database.", - "tip": "git gc --prune=now --aggressive" - }, { - "title": "Instantly browse your working repository in gitweb.", - "tip": "git instaweb [--local] [--httpd=] [--port=] [--browser=]" - }, { - "title": "View the GPG signatures in the commit log", - "tip": "git log --show-signature" - }, { - "title": "Remove entry in the global config.", - "tip": "git config --global --unset " - }, { - "title": "Checkout a new branch without any history", - "tip": "git checkout --orphan " - }, { - "title": "Extract file from another branch.", - "tip": "git show :" - }, { - "title": "List only the root and merge commits.", - "tip": "git log --first-parent" - }, { - "title": "Change previous two commits with an interactive rebase.", - "tip": "git rebase --interactive HEAD~2" - }, { - "title": "List all branch is WIP", - "tip": "git checkout master && git branch --no-merged" - }, { - "title": "Find guilty with binary search", - "tip": "git bisect start # Search start \ngit bisect bad # Set point to bad commit \ngit bisect good v2.6.13-rc2 # Set point to good commit|tag \ngit bisect bad # Say current state is bad \ngit bisect good # Say current state is good \ngit bisect reset # Finish search \n" - }, { - "title": "Bypass pre-commit and commit-msg githooks", - "tip": "git commit --no-verify" - }, { - "title": "List commits and changes to a specific file (even through renaming)", - "tip": "git log --follow -p -- " - }, { - "title": "Clone a single branch", - "tip": "git clone -b --single-branch https://github.com/user/repo.git" - }, { - "title": "Create and switch new branch", - "tip": "git checkout -b ", - "alternatives": ["git branch && git checkout "] - }, { - "title": "Ignore file mode changes on commits", - "tip": "git config core.fileMode false" - }, { - "title": "Turn off git colored terminal output", - "tip": "git config --global color.ui false" - }, { - "title": "Specific color settings", - "tip": "git config --global " - }, { - "title": "Show all local branches ordered by recent commits", - "tip": "git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/" - }, { - "title": "Find lines matching the pattern (regex or string) in tracked files", - "tip": "git grep --heading --line-number 'foo bar'" - }, { - "title": "Clone a shallow copy of a repository", - "tip": "git clone https://github.com/user/repo.git --depth 1" - }, { - "title": "Search Commit log across all branches for given text", - "tip": "git log --all --grep=''" - }, { - "title": "Get first commit in a branch (from master)", - "tip": "git log --oneline master.. | tail -1", - "alternatives": ["git log --reverse master.. | head -6"] - }, { - "title": "Unstaging Staged file", - "tip": "git reset HEAD " - }, { - "title": "Force push to Remote Repository", - "tip": "git push -f " - }, { - "title": "Adding Remote name", - "tip": "git remote add " - }, { - "title": "Show the author, time and last revision made to each line of a given file", - "tip": "git blame " - }, { - "title": "Group commits by authors and title", - "tip": "git shortlog" - }, { - "title": "Forced push but still ensure you don't overwrite other's work", - "tip": "git push --force-with-lease " - }, { - "title": "Show how many lines does an author contribute", - "tip": "git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"added lines: %s removed lines: %s total lines: %s\n\", add, subs, loc }' -", - "alternatives": ["git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"added lines: %s, removed lines: %s, total lines: %s\n\", add, subs, loc }' - # on Mac OSX"] - }, { - "title": "Revert: Reverting an entire merge", - "tip": "git revert -m 1 " - }, { - "title": "Number of commits in a branch", - "tip": "git rev-list --count " - }, { - "title": "Alias: git undo", - "tip": "git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f'" - }, { - "title": "Add object notes", - "tip": "git notes add -m 'Note on the previous commit....'" - }, { - "title": "Show all the git-notes", - "tip": "git log --show-notes='*'" - }, { - "title": "Apply commit from another repository", - "tip": "git --git-dir=/.git format-patch -k -1 --stdout | git am -3 -k" - }, { - "title": "Specific fetch reference", - "tip": "git fetch origin master:refs/remotes/origin/mymaster" - }, { - "title": "Find common ancestor of two branches", - "tip": "git merge-base " - }, { - "title": "List unpushed git commits", - "tip": "git log --branches --not --remotes", - "alternatives": ["git log @{u}..", "git cherry -v"] - }, { - "title": "Add everything, but whitespace changes", - "tip": "git diff --ignore-all-space | git apply --cached" - }, { - "title": "Edit [local/global] git config", - "tip": "git config [--global] --edit" - }, { - "title": "blame on certain range", - "tip": "git blame -L ," - }, { - "title": "Show a Git logical variable.", - "tip": "git var -l | " - }, { - "title": "Preformatted patch file.", - "tip": "git format-patch -M upstream..topic" - }, { - "title": "Get the repo name.", - "tip": "git rev-parse --show-toplevel" - }, { - "title": "logs between date range", - "tip": "git log --since='FEB 1 2017' --until='FEB 14 2017'" - }, { - "title": "Exclude author from logs", - "tip": "git log --perl-regexp --author='^((?!excluded-author-regex).*)$'" - }, { - "title": "Generates a summary of pending changes", - "tip": "git request-pull v1.0 https://git.ko.xz/project master:for-linus" - }, { - "title": "List references in a remote repository", - "tip": "git ls-remote git://git.kernel.org/pub/scm/git/git.git" - }, { - "title": "Backup untracked files.", - "tip": "git ls-files --others -i --exclude-standard | xargs zip untracked.zip" - }, { - "title": "List all git aliases", - "tip": "git config -l | grep alias | sed 's/^alias\\.//g'", - "alternatives": ["git config -l | grep alias | cut -d '.' -f 2"] - }, { - "title": "Show git status short", - "tip": "git status --short --branch" - }, - { - "title": "Checkout a commit prior to a day ago", - "tip": "git checkout master@{yesterday}" - }, { - "title": "Push a new local branch to remote repository and track", - "tip": "git push -u origin " - }, { - "title": "Change a branch base", - "tip": "git rebase --onto " - }, { - "title": "Use SSH instead of HTTPs for remotes", - "tip": "git config --global url.'git@github.com:'.insteadOf 'https://github.com/'" - } -] +[ + { + "title": "Everyday Git in twenty commands or so", + "tip": "git help everyday", + "category": "Miscellaneous" + }, + { + "title": "Show helpful guides that come with Git", + "tip": "git help -g", + "category": "Log and History" + }, + { + "title": "Search change by content", + "tip": "git log -S''", + "category": "Log and History" + }, + { + "title": "Show changes over time for specific file", + "tip": "git log -p ", + "category": "Log and History" + }, + { + "title": "Remove sensitive data from history, after a push", + "tip": "git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ' --prune-empty --tag-name-filter cat -- --all && git push origin --force --all", + "category": "Setup and Config" + }, + { + "title": "Sync with remote, overwrite local changes", + "tip": "git fetch origin && git reset --hard origin/master && git clean -f -d", + "category": "Undoing Changes" + }, + { + "title": "List of all files till a commit", + "tip": "git ls-tree --name-only -r ", + "category": "Basic Operations" + }, + { + "title": "Git reset first commit", + "tip": "git update-ref -d HEAD", + "category": "Undoing Changes" + }, + { + "title": "Reset: preserve uncommitted local changes", + "tip": "git reset --keep ", + "category": "Undoing Changes" + }, + { + "title": "List all the conflicted files", + "tip": "git diff --name-only --diff-filter=U", + "category": "Log and History" + }, + { + "title": "List of all files changed in a commit", + "tip": "git diff-tree --no-commit-id --name-only -r ", + "category": "Log and History" + }, + { + "title": "Unstaged changes since last commit", + "tip": "git diff", + "category": "Log and History" + }, + { + "title": "Changes staged for commit", + "tip": "git diff --cached", + "alternatives": [ + "git diff --staged" + ], + "category": "Log and History" + }, + { + "title": "Show both staged and unstaged changes", + "tip": "git diff HEAD", + "category": "Log and History" + }, + { + "title": "List all branches that are already merged into master", + "tip": "git branch --merged master", + "category": "Branching" + }, + { + "title": "Quickly switch to the previous branch", + "tip": "git checkout -", + "alternatives": [ + "git checkout @{-1}" + ], + "category": "Basic Operations" + }, + { + "title": "Remove branches that have already been merged with master", + "tip": "git branch --merged master | grep -v '^\\*' | xargs -n 1 git branch -d", + "alternatives": [ + "git branch --merged master | grep -v '^\\*\\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked out" + ], + "category": "Branching" + }, + { + "title": "List all branches and their upstreams, as well as last commit on branch", + "tip": "git branch -vv", + "category": "Branching" + }, + { + "title": "Track upstream branch", + "tip": "git branch -u origin/mybranch", + "category": "Branching" + }, + { + "title": "Delete local branch", + "tip": "git branch -d ", + "category": "Branching" + }, + { + "title": "Delete remote branch", + "tip": "git push origin --delete ", + "alternatives": [ + "git push origin :", + "git branch -dr " + ], + "category": "Basic Operations" + }, + { + "title": "Create local tag", + "tip": "git tag ", + "category": "Tagging" + }, + { + "title": "Delete local tag", + "tip": "git tag -d ", + "category": "Tagging" + }, + { + "title": "Delete remote tag", + "tip": "git push origin :refs/tags/", + "category": "Basic Operations" + }, + { + "title": "Undo local changes with the content in index(staging)", + "tip": "git checkout -- ", + "category": "Basic Operations" + }, + { + "title": "Revert: Undo a commit by creating a new commit", + "tip": "git revert ", + "category": "Undoing Changes" + }, + { + "title": "Reset: Discard commits, advised for private branch", + "tip": "git reset ", + "category": "Undoing Changes" + }, + { + "title": "Reword the previous commit message", + "tip": "git commit -v --amend", + "category": "Basic Operations" + }, + { + "title": "See commit history for just the current branch", + "tip": "git cherry -v master", + "category": "Basic Operations" + }, + { + "title": "Amend author.", + "tip": "git commit --amend --author='Author Name '", + "category": "Basic Operations" + }, + { + "title": "Reset author, after author has been changed in the global config.", + "tip": "git commit --amend --reset-author --no-edit", + "category": "Setup and Config" + }, + { + "title": "Changing a remote's URL", + "tip": "git remote set-url origin ", + "category": "Remotes" + }, + { + "title": "Get list of all remote references", + "tip": "git remote", + "alternatives": [ + "git remote show" + ], + "category": "Remotes" + }, + { + "title": "Get list of all local and remote branches", + "tip": "git branch -a", + "category": "Branching" + }, + { + "title": "Get only remote branches", + "tip": "git branch -r", + "category": "Branching" + }, + { + "title": "Stage parts of a changed file, instead of the entire file", + "tip": "git add -p", + "category": "Basic Operations" + }, + { + "title": "Get git bash completion", + "tip": "curl -L http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc", + "category": "Setup and Config" + }, + { + "title": "What changed since two weeks?", + "tip": "git log --no-merges --raw --since='2 weeks ago'", + "alternatives": [ + "git whatchanged --since='2 weeks ago'" + ], + "category": "Log and History" + }, + { + "title": "See all commits made since forking from master", + "tip": "git log --no-merges --stat --reverse master..", + "category": "Log and History" + }, + { + "title": "Pick commits across branches using cherry-pick", + "tip": "git checkout && git cherry-pick ", + "category": "Basic Operations" + }, + { + "title": "Find out branches containing commit-hash", + "tip": "git branch -a --contains ", + "alternatives": [ + "git branch --contains " + ], + "category": "Branching" + }, + { + "title": "Git Aliases", + "tip": "git config --global alias. \ngit config --global alias.st status", + "category": "Setup and Config" + }, + { + "title": "Saving current state of tracked files without committing", + "tip": "git stash", + "alternatives": [ + "git stash push" + ], + "category": "Stashing" + }, + { + "title": "Saving current state of unstaged changes to tracked files", + "tip": "git stash -k", + "alternatives": [ + "git stash --keep-index", + "git stash push --keep-index" + ], + "category": "Stashing" + }, + { + "title": "Saving current state including untracked files", + "tip": "git stash -u", + "alternatives": [ + "git stash push -u", + "git stash push --include-untracked" + ], + "category": "Stashing" + }, + { + "title": "Saving current state with message", + "tip": "git stash push -m ", + "alternatives": [ + "git stash push --message " + ], + "category": "Stashing" + }, + { + "title": "Saving current state of all files (ignored, untracked, and tracked)", + "tip": "git stash -a", + "alternatives": [ + "git stash --all", + "git stash push --all" + ], + "category": "Stashing" + }, + { + "title": "Show list of all saved stashes", + "tip": "git stash list", + "category": "Stashing" + }, + { + "title": "Show the contents of any stash in patch form", + "tip": "git stash show -p ", + "category": "Stashing" + }, + { + "title": "Apply any stash without deleting from the stashed list", + "tip": "git stash apply ", + "category": "Stashing" + }, + { + "title": "Apply last stashed state and delete it from stashed list", + "tip": "git stash pop", + "alternatives": [ + "git stash apply stash@{0} && git stash drop stash@{0}" + ], + "category": "Stashing" + }, + { + "title": "Delete all stored stashes", + "tip": "git stash clear", + "alternatives": [ + "git stash drop " + ], + "category": "Stashing" + }, + { + "title": "Grab a single file from a stash", + "tip": "git checkout -- ", + "alternatives": [ + "git checkout stash@{0} -- " + ], + "category": "Basic Operations" + }, + { + "title": "Show all tracked files", + "tip": "git ls-files -t", + "category": "Log and History" + }, + { + "title": "Show all untracked files", + "tip": "git ls-files --others", + "category": "Log and History" + }, + { + "title": "Show all ignored files", + "tip": "git ls-files --others -i --exclude-standard", + "category": "Log and History" + }, + { + "title": "Create new working tree from a repository (git 2.5)", + "tip": "git worktree add -b ", + "category": "Basic Operations" + }, + { + "title": "Create new working tree from HEAD state", + "tip": "git worktree add --detach HEAD", + "category": "Basic Operations" + }, + { + "title": "Untrack files without deleting", + "tip": "git rm --cached ", + "alternatives": [ + "git rm --cached -r " + ], + "category": "Miscellaneous" + }, + { + "title": "Before deleting untracked files/directory, do a dry run to get the list of these files/directories", + "tip": "git clean -n", + "category": "Undoing Changes" + }, + { + "title": "Forcefully remove untracked files", + "tip": "git clean -f", + "category": "Undoing Changes" + }, + { + "title": "Forcefully remove untracked directory", + "tip": "git clean -f -d", + "category": "Undoing Changes" + }, + { + "title": "Update all the submodules", + "tip": "git submodule foreach git pull", + "alternatives": [ + "git submodule update --init --recursive", + "git submodule update --remote" + ], + "category": "Submodules and Subtrees" + }, + { + "title": "Show all commits in the current branch yet to be merged to master", + "tip": "git cherry -v master", + "alternatives": [ + "git cherry -v master " + ], + "category": "Basic Operations" + }, + { + "title": "Rename a branch", + "tip": "git branch -m ", + "alternatives": [ + "git branch -m [] " + ], + "category": "Branching" + }, + { + "title": "Rebases 'feature' to 'master' and merges it in to master ", + "tip": "git rebase master feature && git checkout master && git merge -", + "category": "Merging and Rebasing" + }, + { + "title": "Archive the `master` branch", + "tip": "git archive master --format=zip --output=master.zip", + "category": "Branching" + }, + { + "title": "Modify previous commit without modifying the commit message", + "tip": "git add --all && git commit --amend --no-edit", + "category": "Basic Operations" + }, + { + "title": "Prunes references to remove branches that have been deleted in the remote.", + "tip": "git fetch -p", + "alternatives": [ + "git remote prune origin" + ], + "category": "Basic Operations" + }, + { + "title": "Delete local branches that has been squash and merged in the remote.", + "tip": "git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D", + "category": "Branching" + }, + { + "title": "Retrieve the commit hash of the initial revision.", + "tip": " git rev-list --reverse HEAD | head -1", + "alternatives": [ + "git rev-list --max-parents=0 HEAD", + "git log --pretty=oneline | tail -1 | cut -c 1-40", + "git log --pretty=oneline --reverse | head -1 | cut -c 1-40" + ], + "category": "Basic Operations" + }, + { + "title": "Visualize the version tree.", + "tip": "git log --pretty=oneline --graph --decorate --all", + "alternatives": [ + "gitk --all", + "git log --graph --pretty=format:'%C(auto) %h | %s | %an | %ar%d'" + ], + "category": "Log and History" + }, + { + "title": "Visualize the tree including commits that are only referenced from reflogs", + "tip": "git log --graph --decorate --oneline $(git rev-list --walk-reflogs --all)", + "category": "Log and History" + }, + { + "title": "Deploying git tracked subfolder to gh-pages", + "tip": "git subtree push --prefix subfolder_name origin gh-pages", + "alternatives": [ + "git subtree push --prefix subfolder_name origin branch_name" + ], + "category": "Submodules and Subtrees" + }, + { + "title": "Adding a project to repo using subtree", + "tip": "git subtree add --prefix=/ --squash git@github.com:/.git master", + "category": "Submodules and Subtrees" + }, + { + "title": "Get latest changes in your repo for a linked project using subtree", + "tip": "git subtree pull --prefix=/ --squash git@github.com:/.git master", + "category": "Submodules and Subtrees" + }, + { + "title": "Export a branch with history to a file.", + "tip": "git bundle create ", + "category": "Branching" + }, + { + "title": "Import from a bundle", + "tip": "git clone repo.bundle -b ", + "category": "Basic Operations" + }, + { + "title": "Get the name of current branch.", + "tip": "git rev-parse --abbrev-ref HEAD", + "category": "Branching" + }, + { + "title": "Ignore one file on commit (e.g. Changelog).", + "tip": "git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog", + "category": "Basic Operations" + }, + { + "title": "Stash changes before rebasing", + "tip": "git rebase --autostash", + "category": "Merging and Rebasing" + }, + { + "title": "Fetch pull request by ID to a local branch", + "tip": "git fetch origin pull//head:", + "alternatives": [ + "git pull origin pull//head:" + ], + "category": "Basic Operations" + }, + { + "title": "Show the most recent tag on the current branch.", + "tip": "git describe --tags --abbrev=0", + "category": "Branching" + }, + { + "title": "Show inline word diff.", + "tip": "git diff --word-diff", + "category": "Log and History" + }, + { + "title": "Show changes using common diff tools.", + "tip": "git difftool [-t ] ", + "category": "Log and History" + }, + { + "title": "Don\u2019t consider changes for tracked file.", + "tip": "git update-index --assume-unchanged ", + "category": "Miscellaneous" + }, + { + "title": "Undo assume-unchanged.", + "tip": "git update-index --no-assume-unchanged ", + "category": "Undoing Changes" + }, + { + "title": "Clean the files from `.gitignore`.", + "tip": "git clean -X -f", + "category": "Undoing Changes" + }, + { + "title": "Restore deleted file.", + "tip": "git checkout -- ", + "category": "Basic Operations" + }, + { + "title": "Restore file to a specific commit-hash", + "tip": "git checkout -- ", + "category": "Basic Operations" + }, + { + "title": "Always rebase instead of merge on pull.", + "tip": "git config --global pull.rebase true", + "alternatives": [ + "#git < 1.7.9\ngit config --global branch.autosetuprebase always" + ], + "category": "Setup and Config" + }, + { + "title": "List all the alias and configs.", + "tip": "git config --list", + "category": "Setup and Config" + }, + { + "title": "Make git case sensitive.", + "tip": "git config --global core.ignorecase false", + "category": "Setup and Config" + }, + { + "title": "Add custom editors.", + "tip": "git config --global core.editor '$EDITOR'", + "category": "Setup and Config" + }, + { + "title": "Auto correct typos.", + "tip": "git config --global help.autocorrect 1", + "category": "Setup and Config" + }, + { + "title": "Check if the change was a part of a release.", + "tip": "git name-rev --name-only ", + "category": "Miscellaneous" + }, + { + "title": "Dry run. (any command that supports dry-run flag should do.)", + "tip": "git clean -fd --dry-run", + "category": "Undoing Changes" + }, + { + "title": "Marks your commit as a fix of a previous commit.", + "tip": "git commit --fixup ", + "category": "Basic Operations" + }, + { + "title": "Squash fixup commits normal commits.", + "tip": "git rebase -i --autosquash", + "category": "Merging and Rebasing" + }, + { + "title": "Skip staging area during commit.", + "tip": "git commit --only ", + "category": "Basic Operations" + }, + { + "title": "Interactive staging.", + "tip": "git add -i", + "category": "Basic Operations" + }, + { + "title": "List ignored files.", + "tip": "git check-ignore *", + "category": "Miscellaneous" + }, + { + "title": "Status of ignored files.", + "tip": "git status --ignored", + "category": "Basic Operations" + }, + { + "title": "Commits in Branch1 that are not in Branch2", + "tip": "git log Branch1 ^Branch2", + "category": "Log and History" + }, + { + "title": "List n last commits", + "tip": "git log -", + "alternatives": [ + "git log -n " + ], + "category": "Log and History" + }, + { + "title": "Reuse recorded resolution, record and reuse previous conflicts resolutions.", + "tip": "git config --global rerere.enabled 1", + "category": "Setup and Config" + }, + { + "title": "Open all conflicted files in an editor.", + "tip": "git diff --name-only | uniq | xargs $EDITOR", + "category": "Log and History" + }, + { + "title": "Count unpacked number of objects and their disk consumption.", + "tip": "git count-objects --human-readable", + "category": "Miscellaneous" + }, + { + "title": "Prune all unreachable objects from the object database.", + "tip": "git gc --prune=now --aggressive", + "category": "Miscellaneous" + }, + { + "title": "Instantly browse your working repository in gitweb.", + "tip": "git instaweb [--local] [--httpd=] [--port=] [--browser=]", + "category": "Miscellaneous" + }, + { + "title": "View the GPG signatures in the commit log", + "tip": "git log --show-signature", + "category": "Log and History" + }, + { + "title": "Remove entry in the global config.", + "tip": "git config --global --unset ", + "category": "Setup and Config" + }, + { + "title": "Checkout a new branch without any history", + "tip": "git checkout --orphan ", + "category": "Basic Operations" + }, + { + "title": "Extract file from another branch.", + "tip": "git show :", + "category": "Log and History" + }, + { + "title": "List only the root and merge commits.", + "tip": "git log --first-parent", + "category": "Log and History" + }, + { + "title": "Change previous two commits with an interactive rebase.", + "tip": "git rebase --interactive HEAD~2", + "category": "Merging and Rebasing" + }, + { + "title": "List all branch is WIP", + "tip": "git checkout master && git branch --no-merged", + "category": "Branching" + }, + { + "title": "Find guilty with binary search", + "tip": "git bisect start # Search start \ngit bisect bad # Set point to bad commit \ngit bisect good v2.6.13-rc2 # Set point to good commit|tag \ngit bisect bad # Say current state is bad \ngit bisect good # Say current state is good \ngit bisect reset # Finish search \n", + "category": "Basic Operations" + }, + { + "title": "Bypass pre-commit and commit-msg githooks", + "tip": "git commit --no-verify", + "category": "Basic Operations" + }, + { + "title": "List commits and changes to a specific file (even through renaming)", + "tip": "git log --follow -p -- ", + "category": "Log and History" + }, + { + "title": "Clone a single branch", + "tip": "git clone -b --single-branch https://github.com/user/repo.git", + "category": "Basic Operations" + }, + { + "title": "Create and switch new branch", + "tip": "git checkout -b ", + "alternatives": [ + "git branch && git checkout ", + "git switch -c " + ], + "category": "Basic Operations" + }, + { + "title": "Ignore file mode changes on commits", + "tip": "git config core.fileMode false", + "category": "Setup and Config" + }, + { + "title": "Turn off git colored terminal output", + "tip": "git config --global color.ui false", + "category": "Setup and Config" + }, + { + "title": "Specific color settings", + "tip": "git config --global ", + "category": "Setup and Config" + }, + { + "title": "Show all local branches ordered by recent commits", + "tip": "git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/", + "category": "Basic Operations" + }, + { + "title": "Find lines matching the pattern (regex or string) in tracked files", + "tip": "git grep --heading --line-number 'foo bar'", + "category": "Miscellaneous" + }, + { + "title": "Clone a shallow copy of a repository", + "tip": "git clone https://github.com/user/repo.git --depth 1", + "category": "Basic Operations" + }, + { + "title": "Search Commit log across all branches for given text", + "tip": "git log --all --grep=''", + "category": "Log and History" + }, + { + "title": "Get first commit in a branch (from master)", + "tip": "git log --oneline master.. | tail -1", + "alternatives": [ + "git log --reverse master.. | head -6" + ], + "category": "Log and History" + }, + { + "title": "Unstaging Staged file", + "tip": "git reset HEAD ", + "category": "Undoing Changes" + }, + { + "title": "Force push to Remote Repository", + "tip": "git push -f ", + "category": "Basic Operations" + }, + { + "title": "Adding Remote name", + "tip": "git remote add ", + "category": "Remotes" + }, + { + "title": "List all currently configured remotes", + "tip": "git remote -v", + "category": "Remotes" + }, + { + "title": "Show the author, time and last revision made to each line of a given file", + "tip": "git blame ", + "category": "Log and History" + }, + { + "title": "Group commits by authors and title", + "tip": "git shortlog", + "category": "Basic Operations" + }, + { + "title": "Forced push but still ensure you don't overwrite other's work", + "tip": "git push --force-with-lease ", + "category": "Basic Operations" + }, + { + "title": "Show how many lines does an author contribute", + "tip": "git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"added lines: %s removed lines: %s total lines: %s\n\", add, subs, loc }' -", + "alternatives": [ + "git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"added lines: %s, removed lines: %s, total lines: %s\n\", add, subs, loc }' - # on Mac OSX" + ], + "category": "Log and History" + }, + { + "title": "Revert: Reverting an entire merge", + "tip": "git revert -m 1 ", + "category": "Undoing Changes" + }, + { + "title": "Number of commits in a branch", + "tip": "git rev-list --count ", + "category": "Basic Operations" + }, + { + "title": "Alias: git undo", + "tip": "git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f'", + "category": "Setup and Config" + }, + { + "title": "Add object notes", + "tip": "git notes add -m 'Note on the previous commit....'", + "category": "Basic Operations" + }, + { + "title": "Show all the git-notes", + "tip": "git log --show-notes='*'", + "category": "Log and History" + }, + { + "title": "Apply commit from another repository", + "tip": "git --git-dir=/.git format-patch -k -1 --stdout | git am -3 -k", + "category": "Basic Operations" + }, + { + "title": "Specific fetch reference", + "tip": "git fetch origin master:refs/remotes/origin/mymaster", + "category": "Basic Operations" + }, + { + "title": "Find common ancestor of two branches", + "tip": "git merge-base ", + "category": "Merging and Rebasing" + }, + { + "title": "List unpushed git commits", + "tip": "git log --branches --not --remotes", + "alternatives": [ + "git log @{u}..", + "git cherry -v" + ], + "category": "Log and History" + }, + { + "title": "Add everything, but whitespace changes", + "tip": "git diff --ignore-all-space | git apply --cached", + "category": "Log and History" + }, + { + "title": "Edit [local/global] git config", + "tip": "git config [--global] --edit", + "category": "Setup and Config" + }, + { + "title": "blame on certain range", + "tip": "git blame -L ,", + "category": "Log and History" + }, + { + "title": "Show a Git logical variable.", + "tip": "git var -l | ", + "category": "Log and History" + }, + { + "title": "Preformatted patch file.", + "tip": "git format-patch -M upstream..topic", + "category": "Branching" + }, + { + "title": "Get the repo name.", + "tip": "git rev-parse --show-toplevel", + "category": "Log and History" + }, + { + "title": "logs between date range", + "tip": "git log --since='FEB 1 2017' --until='FEB 14 2017'", + "category": "Log and History" + }, + { + "title": "Exclude author from logs", + "tip": "git log --perl-regexp --author='^((?!excluded-author-regex).*)$'", + "category": "Log and History" + }, + { + "title": "Generates a summary of pending changes", + "tip": "git request-pull v1.0 https://git.ko.xz/project master:for-linus", + "category": "Basic Operations" + }, + { + "title": "List references in a remote repository", + "tip": "git ls-remote git://git.kernel.org/pub/scm/git/git.git", + "category": "Remotes" + }, + { + "title": "Backup untracked files.", + "tip": "git ls-files --others -i --exclude-standard | xargs zip untracked.zip", + "category": "Miscellaneous" + }, + { + "title": "List all git aliases", + "tip": "git config -l | grep alias | sed 's/^alias\\.//g'", + "alternatives": [ + "git config -l | grep alias | cut -d '.' -f 2" + ], + "category": "Setup and Config" + }, + { + "title": "Show git status short", + "tip": "git status --short --branch", + "category": "Basic Operations" + }, + { + "title": "Checkout a commit prior to a day ago", + "tip": "git checkout master@{yesterday}", + "category": "Basic Operations" + }, + { + "title": "Push the current branch to the same name on the remote repository", + "tip": "git push origin HEAD", + "category": "Basic Operations" + }, + { + "title": "Push a new local branch to remote repository and track", + "tip": "git push -u origin ", + "category": "Basic Operations" + }, + { + "title": "Change a branch base", + "tip": "git rebase --onto ", + "category": "Merging and Rebasing" + }, + { + "title": "Use SSH instead of HTTPs for remotes", + "tip": "git config --global url.'git@github.com:'.insteadOf 'https://github.com/'", + "category": "Setup and Config" + }, + { + "title": "Update a submodule to the latest commit", + "tip": "cd \ngit pull origin \ncd \ngit add \ngit commit -m \"submodule updated\"", + "category": "Basic Operations" + }, + { + "title": "Prevent auto replacing LF with CRLF", + "tip": "git config --global core.autocrlf false", + "category": "Setup and Config" + }, + { + "title": "Refresh the list of remote branches", + "tip": "git remote update origin --prune", + "category": "Remotes" + }, + { + "title": "View expanded details of changes in last commit", + "tip": "git show", + "category": "Log and History" + }, + { + "title": "Send a collection of patches as emails", + "tip": "git send-email [] \u2026\n\ngit send-email [] ", + "category": "Miscellaneous" + }, + { + "title": "Edit config for each level", + "tip": "git config --edit --system\n\ngit config --edit --global\n\ngit config --edit --local", + "category": "Setup and Config" + }, + { + "title": "Visualize each position of HEAD in the last 30 days", + "tip": "git reflog", + "category": "Log and History" + }, + { + "title": "Duplicating a repository", + "tip": "git clone --bare https://github.com/exampleuser/old-repository.git\n\ngit push --mirror https://github.com/exampleuser/new-repository.git", + "category": "Basic Operations" + }, + { + "title": "Switch to a branch (modern alternative to checkout)", + "tip": "git switch ", + "alternatives": [ + "git switch -c " + ], + "category": "Branching" + }, + { + "title": "Restore file (modern alternative to reset/checkout --)", + "tip": "git restore ", + "alternatives": [ + "git restore --staged " + ], + "category": "Undoing Changes" + } +] \ No newline at end of file