Compare commits

..

No commits in common. "main" and "7.3.0" have entirely different histories.
main ... 7.3.0

165 changed files with 2381 additions and 4654 deletions

View file

@ -20,11 +20,3 @@ trim_trailing_whitespace = false
[*.py] [*.py]
indent_size = 4 indent_size = 4
[*.bats]
indent_style = tab
indent_size = 4
[tests/*.sh]
indent_style = tab
indent_size = 4

View file

@ -1,2 +1 @@
gool gool
Cant

View file

@ -6,90 +6,53 @@ on:
branches: [main] branches: [main]
jobs: jobs:
lint: lint:
runs-on: ubuntu-latest runs-on: 'ubuntu-latest'
steps: steps:
- name: Check out code.
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: 'Get Changed Files' - name: 'Get Changed Files'
id: 'files' id: 'files'
run: | uses: 'masesgroup/retrieve-changed-files@v3'
CHANGED_FILES=$(git diff --name-only "${BASE_SHA:-$BEFORE_SHA}...${HEAD_SHA:-$GITHUB_REF}") with:
echo "::notice::Changed files: $CHANGED_FILES" format: 'json'
{ # a force push will cause the action above to fail. Don't do force push when people are
echo "added_modified<<EOF" # reviewing!
echo "$CHANGED_FILES" - name: Check out code.
echo "EOF" uses: actions/checkout@v4
} >> "$GITHUB_OUTPUT" - uses: 'actions/setup-go@v5'
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
BEFORE_SHA: "${{ github.event.before }}"
- name: 'Check Generated Manuals'
run: |
failed=0
while IFS= read -r source; do
case "$source" in
man/git-*.md)
stem=${source%.md}
for generated in "$stem.1" "$stem.html"; do
if ! grep -Fqx -- "$generated" <<< "$CHANGED_FILES"; then
echo "::error file=$source::$generated must be updated with $source"
failed=1
fi
done
;;
esac
done <<< "$CHANGED_FILES"
exit "$failed"
env:
CHANGED_FILES: "${{ steps.files.outputs.added_modified }}"
- uses: 'actions/setup-go@v7'
with: with:
go-version: '1.20' go-version: '1.20'
- name: 'Install EditorConfig Lint'
run: go install 'github.com/editorconfig-checker/editorconfig-checker/cmd/editorconfig-checker@latest'
- name: 'Check EditorConfig Lint' - name: 'Check EditorConfig Lint'
run: echo "$FILES" | xargs ~/go/bin/editorconfig-checker run: |
env: sudo apt install -y jq
# NOTE: use env to pass the output in order to avoid possible injection attacks go install 'github.com/editorconfig-checker/editorconfig-checker/cmd/editorconfig-checker@latest'
FILES: "${{ steps.files.outputs.added_modified }}"
- name: checkstyle readarray -t changed_files <<<"$(jq -r '.[]' <<<'${{ steps.files.outputs.added_modified }}')"
run: ./scripts/checkstyle.py ~/go/bin/editorconfig-checker ${changed_files[@]}
- name: Shellcheck
run: shellcheck --severity=error bin/* ./*.sh
typo: typo:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Check out code. - name: Check out code.
uses: actions/checkout@v7 uses: actions/checkout@v4
- name: Install codespell
run: python3 -m pip install codespell==2.4
- name: spell check - name: spell check
run: | run: |
git grep --cached -l '' . | \ pip install codespell==2.2
grep -v -e 'History\.md' -e 'AUTHORS' -e 'man/.*\.1' -e 'man/.*\.html' | \ git grep --cached -l '' | grep -v -e 'History\.md' -e 'AUTHORS' -e 'man/.*\.1' -e 'man/.*\.html' | xargs codespell --ignore-words=.github/.ignore_words
xargs codespell --ignore-words=.github/.ignore_words
test-bats: test:
name: 'Test with Bats'
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v7 - uses: actions/checkout@v4
- name: Set up Python 3.12
uses: actions/setup-python@v5
with: with:
submodules: recursive python-version: '3.12'
- name: Setup Bats - name: Install dependencies
id: setup-bats run: |
uses: bats-core/bats-action@4.0.0 python -m pip install --upgrade pip
with: pip install pytest==8.1.2 GitPython==3.1.43 testpath==0.6.0
bats-version: 'v1.8.1' - name: Unit test
- name: Test with Bats run: make test
env:
BATS_LIB_PATH: ${{ steps.setup-bats.outputs.lib-path }}
TERM: xterm
run: bats ./tests
build: build:
strategy: strategy:
@ -101,12 +64,14 @@ jobs:
runs-on: ${{ matrix.platform }} runs-on: ${{ matrix.platform }}
steps: steps:
- name: Check out code. - name: Check out code.
uses: actions/checkout@v7 uses: actions/checkout@v4
- name: Linux Install - name: Linux Install
if: matrix.platform == 'ubuntu-latest' if: matrix.platform == 'ubuntu-latest'
run: sudo apt-get install -y bsdmainutils run: |
sudo apt-get install -y bsdmainutils
- name: Script - name: Script
run: ./check_integrity.sh run: |
./check_integrity.sh
- name: Brew release - name: Brew release
if: matrix.platform == 'macos-latest' if: matrix.platform == 'macos-latest'
run: | run: |

View file

@ -1,18 +0,0 @@
name: "Maintenance: Close Stale PRs"
on:
schedule:
- cron: "30 1 * * *"
permissions:
pull-requests: "write"
jobs:
stale:
runs-on: "ubuntu-latest"
if: github.repository_owner == 'tj'
steps:
- uses: "actions/stale@v11"
with:
close-pr-message: "This PR was closed because it has been stalled for 365 days with no activity. Feel free to make a new PR if you wish to continue"
days-before-pr-stale: 350
days-before-pr-close: 15

1
.gitignore vendored
View file

@ -1,3 +1,2 @@
.venv/ .venv/
__pycache__/ __pycache__/
coverage/

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "vendor/bats-all"]
path = vendor/bats-all
url = https://github.com/hyperupcall/bats-all

14
AUTHORS
View file

@ -33,16 +33,15 @@ Patches and Suggestions
- David Baumgold - David Baumgold
- Jan Schulz - Jan Schulz
- Kenneth Reitz - Kenneth Reitz
- Leroy
- Mark Pitman - Mark Pitman
- Peter Benjamin - Peter Benjamin
- Günther Grill - Günther Grill
- Luke Childs - Luke Childs
- Sasha Khamkov - Sasha Khamkov
- equt - equt
- oikarinen
- vyas - vyas
- Don Harper - Don Harper
- Pierre Ayoub
- Robin Winslow - Robin Winslow
- Ross Smith II - Ross Smith II
- Yi EungJun - Yi EungJun
@ -64,7 +63,6 @@ Patches and Suggestions
- Dominik Gedon - Dominik Gedon
- Hogan Long - Hogan Long
- Ivan Malopinsky - Ivan Malopinsky
- John Bachir
- Jonathan "Duke" Leto - Jonathan "Duke" Leto
- Julio Napurí - Julio Napurí
- Justin Dugger - Justin Dugger
@ -86,7 +84,6 @@ Patches and Suggestions
- Beth Skurrie - Beth Skurrie
- Brice Dutheil - Brice Dutheil
- Curtis McEnroe - Curtis McEnroe
- Daniele Paolella
- David Rogers - David Rogers
- Devin Withers - Devin Withers
- Domenico Rotiroti - Domenico Rotiroti
@ -112,6 +109,7 @@ Patches and Suggestions
- Wil Moore III - Wil Moore III
- William Montgomery - William Montgomery
- Ye Lin Aung - Ye Lin Aung
- dependabot[bot]
- luozexuan - luozexuan
- roxchgt - roxchgt
- soffolk - soffolk
@ -131,7 +129,6 @@ Patches and Suggestions
- Andrew Griffiths - Andrew Griffiths
- Andrew Marcinkevičius - Andrew Marcinkevičius
- Andrew Starr-Bochicchio - Andrew Starr-Bochicchio
- Andrew Sullivan Cant
- Andrey Elizarov - Andrey Elizarov
- Angel Aguilera - Angel Aguilera
- Antoine Beaupré - Antoine Beaupré
@ -164,17 +161,14 @@ Patches and Suggestions
- Edward Betts - Edward Betts
- Eli Schwartz - Eli Schwartz
- Emil Kjelsrud - Emil Kjelsrud
- Erik Skultety
- François M - François M
- George Crabtree - George Crabtree
- Gerrit-K - Gerrit-K
- Greg Allen - Greg Allen
- Guilhem Saurel
- Guillermo Rauch - Guillermo Rauch
- Gunnlaugur Thor Briem - Gunnlaugur Thor Briem
- Hasse Ramlev Hansen - Hasse Ramlev Hansen
- Heiko Becker - Heiko Becker
- Hugo Ruiz-Mireles
- Isaac Mungai - Isaac Mungai
- J.C. Yamokoski - J.C. Yamokoski
- Jack O. Wasey - Jack O. Wasey
@ -235,11 +229,9 @@ Patches and Suggestions
- Rasmus Wriedt Larsen - Rasmus Wriedt Larsen
- René - René
- Revisor - Revisor
- Ricardo Fernández Serrata
- Riceball LEE - Riceball LEE
- Rob Kennedy - Rob Kennedy
- Robin von Bülow - Robin von Bülow
- Russ
- Ryan Bohn - Ryan Bohn
- Sachin Gupta - Sachin Gupta
- Sam Thursfield - Sam Thursfield
@ -277,13 +269,11 @@ Patches and Suggestions
- dead-horse - dead-horse
- eszabpt - eszabpt
- fengkx - fengkx
- johnpyp
- jykntr - jykntr
- kang - kang
- meza - meza
- neydroid - neydroid
- nulltask - nulltask
- phanium
- sgleizes - sgleizes
- tfendin - tfendin
- tiemonl - tiemonl

View file

@ -12,13 +12,11 @@
- [`git clear-soft`](#git-clear-soft) - [`git clear-soft`](#git-clear-soft)
- [`git coauthor`](#git-coauthor) - [`git coauthor`](#git-coauthor)
- [`git commits-since`](#git-commits-since) - [`git commits-since`](#git-commits-since)
- [`git continue`](#git-continue)
- [`git contrib`](#git-contrib) - [`git contrib`](#git-contrib)
- [`git count`](#git-count) - [`git count`](#git-count)
- [`git cp`](#git-cp) - [`git cp`](#git-cp)
- [`git create-branch`](#git-create-branch) - [`git create-branch`](#git-create-branch)
- [`git delete-branch`](#git-delete-branch) - [`git delete-branch`](#git-delete-branch)
- [`git delete-gone-branches`](#git-delete-gone-branches)
- [`git delete-merged-branches`](#git-delete-merged-branches) - [`git delete-merged-branches`](#git-delete-merged-branches)
- [`git delete-squashed-branches`](#git-delete-squashed-branches) - [`git delete-squashed-branches`](#git-delete-squashed-branches)
- [`git delete-submodule`](#git-delete-submodule) - [`git delete-submodule`](#git-delete-submodule)
@ -76,8 +74,6 @@
- [`git undo`](#git-undo) - [`git undo`](#git-undo)
- [`git unlock`](#git-unlock) - [`git unlock`](#git-unlock)
- [`git utimes`](#git-utimes) - [`git utimes`](#git-utimes)
- [`git unwip`](#git-unwip)
- [`git wip`](#git-wip)
## git extras ## git extras
@ -283,20 +279,11 @@ usage: git bulk [-g] ([-a]|[-w <ws-name>]) <git command>
git bulk --listall git bulk --listall
``` ```
Register a workspace so that `git bulk` knows about it (it will be registered in your `.gitconfig`): Register a workspace so that `git bulk` knows about it (notice that <ws-root-directory> must be absolute path):
```bash ```bash
$ git bulk --addworkspace personal ~/workspaces/personal $ git bulk --addworkspace personal ~/workspaces/personal
``` ```
Notice that `<ws-root-directory>` must be an absolute path (or an environment variable pointing to an absolute path).
In the case of a **single quoted environment variable**, it will be dereferenced at `git-bulk` runtime, suitable for dynamic workspaces (*e.g.*, defined in your `.bashrc`).
As an illustration:
```bash
$ git bulk --addworkspace personal '$PERSONAL_WORKSPACE'
```
With option `--from` the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace. Suitable for the initial setup of a multi-repo project. With option `--from` the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace. Suitable for the initial setup of a multi-repo project.
```bash ```bash
@ -393,43 +380,6 @@ Type `exit`, `quit`, or `q` to end the repl session.
Any arguments to git repl will be taken as the first command to execute in Any arguments to git repl will be taken as the first command to execute in
the repl. the repl.
### CONFIGURATION
Commands entered in a repl session will be saved to a history file and be available in
future sessions, similar to a shell or programming language repl. By default,
there is one global history file, ~/.git_repl_history. You can specify that your projects
each have their own independent history file. This file will be saved in .git_repl_history
at the top level of the repo, and will need to be added to the repo or global .gitignore.
```bash
# remove the --global flag to configure only an individual project to have its own history file
git config --global git-extras.repl.use-local-history "true"
```
You can specify a default command to run when hitting enter:
```bash
git config --global git-extras.repl.on-enter-command "git status -sb"
```
You can configure which character is used at the end of the prompt: (default `>`):
```bash
git config --global git-extras.repl.prompt-character "±"
```
You can specify the prefix for the prompt, or remove it (default `git`):
```bash
git config --global git-extras.repl.prefix ""
```
You can have the name of the current git repo shown in the prompt (default `false`):
```bash
git config --global git-extras.repl.show-project-name "true"
```
```bash ```bash
$ git repl $ git repl
git version 2.34.1 git version 2.34.1
@ -465,9 +415,9 @@ $ git coauthor user user@email.com
2 files changed, 145 insertions(+), 0 deletions(-) 2 files changed, 145 insertions(+), 0 deletions(-)
create mode 100644 README.md create mode 100644 README.md
create mode 100644 CONTRIBUTING.md create mode 100644 CONTRIBUTING.md
$ git log -1 $ git log -1
commit b62ceae2685e6ece071f3c3754e9b77fd0a35c88 (HEAD -> master) commit b62ceae2685e6ece071f3c3754e9b77fd0a35c88 (HEAD -> master)
Author: user person <userperson@email.com> Author: user person <userperson@email.com>
Date: Sat Aug 17 17:33:53 2019 -0500 Date: Sat Aug 17 17:33:53 2019 -0500
@ -933,21 +883,6 @@ Delete local and remote tag `name`:
$ git delete-tag 0.0.1 $ git delete-tag 0.0.1
``` ```
## git delete-gone-branches
Deletes all local branches whose remote-tracking branch has been deleted (i.e. branches shown as `[gone]` in `git branch -vv`). Use `--dry-run` to preview what would be deleted.
```bash
$ git delete-gone-branches
Deleted branch feature-123 (was abc1234).
Deleted branch feature-456 (was def5678).
$ git delete-gone-branches --dry-run
Would delete the following branches:
feature-123
feature-456
```
## git delete-merged-branches ## git delete-merged-branches
Deletes branches that are listed in `git branch --merged`. Deletes branches that are listed in `git branch --merged`.
@ -1203,14 +1138,6 @@ Internally this script uses `rsync` and not `scp` as the name suggests.
`git-rscp` - The reverse of `git-scp`. Copies specific files from the working directory of a remote repository to the current working directory. `git-rscp` - The reverse of `git-scp`. Copies specific files from the working directory of a remote repository to the current working directory.
The following options are available (must precede `<remote>`):
```bash
-v, --verbose Print what will be synced before syncing
-i, --interactive Prompt for confirmation before syncing (implies --verbose)
-n, --dry-run Show what would be synced, change nothing (implies --verbose)
```
### Examples ### Examples
Copy unstaged files to remote. Useful when you want to make quick test without making any commits Copy unstaged files to remote. Useful when you want to make quick test without making any commits
@ -1428,8 +1355,8 @@ $ git reset-file .htaccess dc82b19
## git mr ## git mr
Checks out a merge request from GitLab, or a pull request from Forgejo/Codeberg. Checks out a merge request from GitLab. Usage: `git mr <ID|URL> [REMOTE]`.
Usage: `git mr <ID|URL> [REMOTE]`. Default remote is `origin`. Default remote is `origin`.
``` bash ``` bash
$ git mr 51 $ git mr 51
@ -1441,21 +1368,12 @@ Switched to branch 'mr/51'
With full URL, the head is fetched from a temporary remote pointing to the base URL. With full URL, the head is fetched from a temporary remote pointing to the base URL.
``` bash ``` bash
$ git mr https://gitlab.com/owner/repository/merge_requests/51 $ git mr https://gitlab.com/owner/repository/merge_requests/51
From gitlab.com:owner/repository From gitlab.com:owner/repository
* [new ref] refs/merge-requests/51/head -> mr/51 * [new ref] refs/merge-requests/51/head -> mr/51
Switched to branch 'mr/51' Switched to branch 'mr/51'
``` ```
A Forgejo/Codeberg pull request URL is also supported:
``` bash
$ git mr https://codeberg.org/owner/repository/pulls/51
From codeberg.org:owner/repository
* [new ref] refs/pull/51/head -> mr/51
Switched to branch 'mr/51'
```
Just like [git pr](#git-pr), `git mr` accepts a `clean` argument to trash all Just like [git pr](#git-pr), `git mr` accepts a `clean` argument to trash all
`mr/` branches. Ensure current branch is not one. `mr/` branches. Ensure current branch is not one.
@ -1705,25 +1623,3 @@ Abort current revert, rebase, merge or cherry-pick, without the need to find exa
## git magic ## git magic
Commits changes with a generated message. Commits changes with a generated message.
## git continue
Continue current revert, rebase, merge or cherry-pick, without the need to find exact command in history.
## git wip
Create a Work In Progress(WIP) commit, which will include all changes in the
working directory. (i.e., changes to existing files, new files, removed files)
```bash
$ git wip
```
## git unwip
Undo a Work In Progress(WIP) commit and put all of those changes back into the
working directory.
```bash
$ git unwip
```

View file

@ -1,59 +1,4 @@
7.5.0 / 2026-05-09
==================
* Use standard prefix for home dir installs (#1248)
* refactor(abort): common `gitdir` (#1244)
* Fix man page usage docs (#1241)
* Fix `git-changelog` to handle whitespace in command arguments (#1232)
* chore(deps): bump bats-core/bats-action from 3.0.1 to 4.0.0 (#1230)
* add details when multiple active operations found (#1229)
* Add persistent history to `git-repl` (#1226)
* Support passing ref to `git-commits-since` (#1228)
* ability to specify command when hitting enter (#1223)
* Improve `git-repl` prompt (#1224)
* feat: `delete-branch` multiple unique branch names completions (#1221)
* chore(deps): bump actions/checkout from 5 to 6 (#1219)
* Made Git Magic use `--force-with-lease` (#1218)
* chore(deps): bump actions/stale from 9 to 10 (#1214)
* chore(deps): bump actions/setup-go from 5 to 6 (#1215)
* chore(deps): bump actions/setup-python from 5 to 6 (#1216)
* Fix minor typo in `git rename-branch` man page (#1211)
* Improvements to Bash completion (#1210)
* Fix use of `git-whatchanged` to `git-log` (#1212)
* chore(deps): bump actions/checkout from 4 to 5 (#1209)
* Bump version to 7.5.0-dev (#1207)
7.4.0 / 2025-06-19
==================
* Format comparisons, functions, and redirections to be consistent (#1201)
* add git-wip and git-unwip (#669)
* chore(deps): bump bats-core/bats-action from 3.0.0 to 3.0.1
* Mostly finish pytest to Bats conversion (#1200)
* Implement half of tests in Bats (#1187)
* Add stale bot for old PRs (#1186)
* feat(git-bulk): add new option to not follow hidden directories (#1195)
* Feat: allow git-summary showing full path of repository (#1193)
* feat(git-bulk): add new option to no follow symlinks (#1194)
* docs(git-bulk): Add zsh completion (#1190)
* fix(git-bulk): fix workspace selection when cd fails (#1197)
* fix(git-bulk): quiet find errors by default (#1196)
* fix(git-bulk): fix a bad integer expression (#1198)
* chore(deps): bump astral-sh/ruff-action from 2 to 3 (#1189)
* Fix all ShellCheck errors and add to CI (#1179)
* chore(deps): bump astral-sh/ruff-action from 1 to 2 (#1188)
* fix(ci): use poetry (#1183)
* Delete etc/test.fish (#1185)
* feat: add git-continue (#1176)
* feat: add ruff linter with ci check (#1182)
* fix(ci): missing dollar sign (#1184)
* fix(github-actions): changed files output for editorcondig-checker (#1180)
* Revert "feat: add ruff linter with ci check (#1178)" (#1181)
* feat: add ruff linter with ci check (#1178)
* Support `GITHUB_TOKEN` var for `git-fork` and `git-pull-request` (#1177)
* Bump version to 7.4.0-dev (#1175)
7.3.0 / 2024-10-20 7.3.0 / 2024-10-20
================== ==================

View file

@ -144,7 +144,7 @@ alternate location, specify a `PREFIX` when calling `make`.
```bash ```bash
# Non-root users can install under their home directory # Non-root users can install under their home directory
make install PREFIX=$HOME/.local make install PREFIX=$HOME/software
# For third-party software kept under /opt # For third-party software kept under /opt
make install PREFIX=/opt make install PREFIX=/opt

View file

@ -141,6 +141,6 @@ docclean:
rm -f man/*.html rm -f man/*.html
test: test:
bats ./tests pytest
.PHONY: default docs check install uninstall clean docclean test .PHONY: default docs check install uninstall clean docclean test

View file

@ -1,45 +1,17 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail
# git rev-parse emits an error if not in a git repo so only need to bail out
gitdir="$(git rev-parse --git-dir)" || exit gitdir="$(git rev-parse --git-dir)" || exit
opfound=
fcnt=
for i in cherry-pick merge rebase revert; do
f=${i^^}
f=${f/-/_}
test -f "${gitdir}/${f}_HEAD" && fcnt=1$fcnt && opfound=$i
done
discover_op() { if [ "${fcnt}" != 1 ]; then
local op echo "I don't know what to abort" >&2
for op in cherry_pick merge rebase revert ; do exit 1
if [ -f "${gitdir}/${op^^}_HEAD" ]; then fi
echo "${op/_/-}"
fi
done
}
validate_op() { git "${opfound}" --abort
local op="$1"
if [ -z "$op" ]; then
echo "No active operation found" >&2
exit 1
fi
if [[ "$(echo "$op" | wc -l)" -gt 1 ]]; then
echo "Multiple active operations found:" >&2
for o in $op; do
echo " - $o: HEAD: $(cat "${gitdir}/${o}_HEAD")" >&2
done
exit 1
fi
}
discover_action() {
local action=${1/git-/}
if [ "$action" != "abort" ] && [ "$action" != "continue" ]; then
echo "Invalid action: $1" >&2
exit 1
fi
echo "$action"
}
action=$(discover_action "$(basename "$0")")
op=$(discover_op)
validate_op "$op"
git "$op" "--$action"

View file

@ -9,14 +9,12 @@ guardedmode=false
singlemode=false singlemode=false
allwsmode=false allwsmode=false
quiet=false quiet=false
no_follow_symlinks=false
no_follow_hidden=false
# #
# print usage message # print usage message
# #
usage() { usage() {
echo 1>&2 "usage: git bulk [--no-follow-symlinks] [--no-follow-hidden] [-q|--quiet] [-g] ([-a]|[-w <ws-name>]) <git command>" echo 1>&2 "usage: git bulk [-q|--quiet] [-g] ([-a]|[-w <ws-name>]) <git command>"
echo 1>&2 " git bulk --addworkspace <ws-name> <ws-root-directory> (--from <URL or file>)" echo 1>&2 " git bulk --addworkspace <ws-name> <ws-root-directory> (--from <URL or file>)"
echo 1>&2 " git bulk --removeworkspace <ws-name>" echo 1>&2 " git bulk --removeworkspace <ws-name>"
echo 1>&2 " git bulk --addcurrent <ws-name>" echo 1>&2 " git bulk --addcurrent <ws-name>"
@ -30,7 +28,7 @@ cdfail() {
} }
# add another workspace to global git config # add another workspace to global git config
addworkspace() { function addworkspace {
git config --global bulkworkspaces."$wsname" "$wsdir"; git config --global bulkworkspaces."$wsname" "$wsdir";
if [ -n "$source" ]; then if [ -n "$source" ]; then
if [ ! -d "$wsdir" ]; then echo 1>&2 "Path of workspace doesn't exist, make it first."; exit 1; fi if [ ! -d "$wsdir" ]; then echo 1>&2 "Path of workspace doesn't exist, make it first."; exit 1; fi
@ -59,19 +57,19 @@ addworkspace() {
} }
# add current directory # add current directory
addcurrent() { git config --global bulkworkspaces."$wsname" "$PWD"; } function addcurrent { git config --global bulkworkspaces."$wsname" "$PWD"; }
# remove workspace from global git config # remove workspace from global git config
removeworkspace() { checkWSName && git config --global --unset bulkworkspaces."$wsname"; } function removeworkspace { checkWSName && git config --global --unset bulkworkspaces."$wsname"; }
# remove workspace from global git config # remove workspace from global git config
purge() { git config --global --remove-section bulkworkspaces; } function purge { git config --global --remove-section bulkworkspaces; }
# list all current workspace locations defined # list all current workspace locations defined
listall() { git config --global --get-regexp bulkworkspaces; } function listall { git config --global --get-regexp bulkworkspaces; }
# guarded execution of a git command in one specific repository # guarded execution of a git command in one specific repository
guardedExecution () { function guardedExecution () {
if [ "${quiet?}" != "true" ] || $guardedmode; then if [ "${quiet?}" != "true" ] || $guardedmode; then
echo 1>&2 "${bldred}->${reset} executing ${inverse}git $gitcommand${reset} in repository ${leadingpath%/*}/${bldred}${curdir##*/}${reset}" echo 1>&2 "${bldred}->${reset} executing ${inverse}git $gitcommand${reset} in repository ${leadingpath%/*}/${bldred}${curdir##*/}${reset}"
fi fi
@ -88,7 +86,7 @@ guardedExecution () {
} }
# check if the passed command is known as a core git command # check if the passed command is known as a core git command
checkGitCommand () { function checkGitCommand () {
if git help -a | grep -o -q "\b${corecommand}\b"; then if git help -a | grep -o -q "\b${corecommand}\b"; then
echo 1>&2 "Core command \"$corecommand\" accepted." echo 1>&2 "Core command \"$corecommand\" accepted."
else else
@ -101,7 +99,7 @@ checkGitCommand () {
} }
# check if workspace name is registered # check if workspace name is registered
checkWSName () { function checkWSName () {
while read -r workspace; do while read -r workspace; do
parseWsName "$workspace" parseWsName "$workspace"
if [[ $rwsname == "$wsname" ]]; then return; fi if [[ $rwsname == "$wsname" ]]; then return; fi
@ -111,24 +109,14 @@ checkWSName () {
} }
# parse out wsname from workspacespec # parse out wsname from workspacespec
parseWsName () { function parseWsName () {
local wsspec="$1" local wsspec="$1"
# Get the workspace value from its specification in the `.gitconfig`.
# May be an absolute path or a variable name of the form: `$VARNAME`
rwsdir=${wsspec#* } rwsdir=${wsspec#* }
if [[ ${rwsdir:0:1} == '$' ]]; then
# Dereference the `rwsdir` value which is a variable name.
rwsdir_varname=${rwsdir:1}
rwsdir=${!rwsdir_varname}
if [[ -z "${rwsdir}" ]]; then
echo 1>&2 "error: bad environment variable: $rwsdir_varname" && exit 1
fi
fi
rwsname=${wsspec#*.} && rwsname=${rwsname%% *} rwsname=${wsspec#*.} && rwsname=${rwsname%% *}
} }
# detects the wsname of the current directory # detects the wsname of the current directory
wsnameToCurrent () { function wsnameToCurrent () {
while read -r workspace; do while read -r workspace; do
if [ -z "$workspace" ]; then continue; fi if [ -z "$workspace" ]; then continue; fi
parseWsName "$workspace" parseWsName "$workspace"
@ -140,44 +128,33 @@ wsnameToCurrent () {
} }
# helper to check number of arguments. # helper to check number of arguments.
allowedargcount () { function allowedargcount () {
if [ "$paramcount" -ne "${1:-0}" ] && [ "$paramcount" -ne "${2:-0}" ]; then if [ "$paramcount" -ne "$1" ] && [ "$paramcount" -ne "$2" ]; then
echo 1>&2 "error: wrong number of arguments" && usage; echo 1>&2 "error: wrong number of arguments" && usage;
exit 1; exit 1;
fi fi
} }
# execute the bulk operation # execute the bulk operation
executBulkOp () { function executBulkOp () {
checkGitCommand checkGitCommand
if ! $allwsmode && ! $singlemode; then wsnameToCurrent; fi # by default git bulk works within the 'current' workspace if ! $allwsmode && ! $singlemode; then wsnameToCurrent; fi # by default git bulk works within the 'current' workspace
listall | while read -r workspacespec; do listall | while read -r workspacespec; do
parseWsName "$workspacespec" parseWsName "$workspacespec"
if [[ -n $wsname ]] && [[ $rwsname != "$wsname" ]]; then continue; fi if [[ -n $wsname ]] && [[ $rwsname != "$wsname" ]]; then continue; fi
cd "$rwsdir" || exit 1 eval cd "\"$rwsdir\""
local actual=$PWD local actual=$PWD
[ "${quiet?}" != "true" ] && echo 1>&2 "Executing bulk operation in workspace ${inverse}$actual${reset}" [ "${quiet?}" != "true" ] && echo 1>&2 "Executing bulk operation in workspace ${inverse}$actual${reset}"
# build `find` flags depending on command-line options allGitFolders=( $(eval find -L . -name ".git") )
local find_flags=()
if [[ "$no_follow_symlinks" == true ]]; then
find_flags+=(-P)
else
find_flags+=(-L)
fi
# find all git repositories under the workspace on which we want to operate
readarray allGitFolders < <(find "${find_flags[@]}" . -name ".git" 2>/dev/null)
for line in "${allGitFolders[@]}"; do for line in "${allGitFolders[@]}"; do
local gitrepodir=${line::${#line}-5} # cut the .git part of find results to have the root git directory of that repository local gitrepodir=${line::${#line}-5} # cut the .git part of find results to have the root git directory of that repository
cd "$gitrepodir" || exit 1 # into git repo location eval cd "\"$gitrepodir\"" # into git repo location
local curdir=$PWD local curdir=$PWD
local leadingpath=${curdir#"${actual}"} local leadingpath=${curdir#"${actual}"}
# do not execute if we do not want to consider a ".git" directory under a hidden directory guardedExecution "$@"
if [ $no_follow_hidden = false ] || ! [[ "$leadingpath" =~ "/." ]]; then eval cd "\"$rwsdir\"" # back to origin location of last find command
guardedExecution "$@"
fi
cd "$rwsdir" || exit 1 # back to origin location of last find command
done done
done done
} }
@ -194,11 +171,7 @@ while [ "${#}" -ge 1 ] ; do
--listall|--purge) --listall|--purge)
butilcommand="${1:2}" && break ;; butilcommand="${1:2}" && break ;;
--removeworkspace|--addcurrent|--addworkspace) --removeworkspace|--addcurrent|--addworkspace)
butilcommand="${1:2}" && wsname="$2" && wsdir="$3" && if [ "$4" = "--from" ]; then source="$5"; fi && break ;; butilcommand="${1:2}" && wsname="$2" && wsdir="$3" && if [ "$4" == "--from" ]; then source="$5"; fi && break ;;
--no-follow-symlinks)
no_follow_symlinks=true ;;
--no-follow-hidden)
no_follow_hidden=true ;;
-a) -a)
allwsmode=true ;; allwsmode=true ;;
-g) -g)

View file

@ -9,15 +9,6 @@ GIT_MERGELOG_FORMAT="$(git config changelog.mergeformat)"
GIT_EDITOR="$(git var GIT_EDITOR)" GIT_EDITOR="$(git var GIT_EDITOR)"
PROGNAME="git-changelog" PROGNAME="git-changelog"
git_editor() {
if test -z "${GIT_EDITOR:+set}"
then
GIT_EDITOR="$(git var GIT_EDITOR)" || return $?
fi
eval "$GIT_EDITOR" '"$@"'
}
_usage() { _usage() {
cat << EOF cat << EOF
usage: $PROGNAME options [file] usage: $PROGNAME options [file]
@ -583,7 +574,7 @@ main() {
rm -f "$tmpfile" rm -f "$tmpfile"
if [[ -n "$GIT_EDITOR" ]]; then if [[ -n "$GIT_EDITOR" ]]; then
git_editor "$changelog" || _exit $GIT_EDITOR "$changelog" || _exit
else else
less "$changelog" || _exit less "$changelog" || _exit
fi fi

View file

@ -2,7 +2,7 @@
PROGNAME="git-clear" PROGNAME="git-clear"
FORCE=0 FORCE=0
_usage() { function _usage() {
cat << EOF cat << EOF
usage: $PROGNAME options usage: $PROGNAME options
usage: $PROGNAME -h|help|? usage: $PROGNAME -h|help|?
@ -38,6 +38,6 @@ else
clean=y clean=y
fi fi
if [ "$clean" = "y" ]; then if [ "$clean" == "y" ]; then
git clean -d -f -x && git reset --hard git clean -d -f -x && git reset --hard
fi fi

View file

@ -2,6 +2,6 @@
echo -n "Sure? - This command may delete files that cannot be recovered. Files and directories in .gitignore will be preserved [y/N]: " echo -n "Sure? - This command may delete files that cannot be recovered. Files and directories in .gitignore will be preserved [y/N]: "
read -r answer read -r answer
if [ "$answer" = "y" ] if [ "$answer" == "y" ]
then git clean -d -f && git reset --hard then git clean -d -f && git reset --hard
fi fi

View file

@ -1,36 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
REF="" SINCE="last week"
SINCE="" test $# -ne 0 && SINCE=$*
echo "... commits since $SINCE" >&2
while [[ $# -gt 0 ]]; do git log --pretty='%an - %s' --after="@{$SINCE}"
case "$1" in
-r|--ref)
if [[ -z "$2" ]]; then
echo "error: option $1 requires an argument" >&2
exit 1
fi
REF="$2"
shift
shift
;;
*)
# non-flag args accumulation, e.g. "last " + "week" -> "last week"
SINCE="${SINCE:+$SINCE }$1"
shift
;;
esac
done
if [[ -n "$REF" && -n "$SINCE" ]]; then
echo "error: '--ref <ref>' and '<date>' are mutually exclusive" >&2
exit 1
fi
SINCE="${SINCE:-last week}"
if [[ -n "$REF" ]]; then
git log --pretty='%h %an - %s' "$REF..HEAD"
else
git log --pretty='%h %an - %s' --after="@{$SINCE}"
fi

View file

@ -1 +0,0 @@
git-abort

View file

@ -39,7 +39,7 @@ then
REMOTE=origin REMOTE=origin
fi fi
test -z "$BRANCH" && echo "branch argument required." 1>&2 && exit 1 test -z $BRANCH && echo "branch argument required." 1>&2 && exit 1
if [[ -n $REMOTE ]] if [[ -n $REMOTE ]]
then then

View file

@ -1,60 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
dry_run=false
force=false
prune=false
while [[ $# -gt 0 ]]; do
case "$1" in
-n|--dry-run)
dry_run=true
shift
;;
-f|--force)
force=true
shift
;;
-p|--prune)
prune=true
shift
;;
*)
echo "Unknown option: $1"
echo "Usage: git delete-gone-branches [-n|--dry-run] [-f|--force] [-p|--prune]"
exit 1
;;
esac
done
if [ "$prune" = true ]; then
git fetch --prune
fi
gone_branches=$(git for-each-ref --format \
'%(if:equals=gone)%(upstream:track,nobracket)%(then)%(refname:short)%(end)' refs/heads/ | sed '/^$/d')
if [ -z "$gone_branches" ]; then
echo "No branches with a gone remote found."
exit 0
fi
if [ "$dry_run" = true ]; then
echo "Would delete the following branches:"
echo "$gone_branches"
exit 0
fi
echo "The following branches will be deleted:"
echo "$gone_branches"
if [ "$force" = false ]; then
read -r -p "Delete these branches? [y/N] " confirm
if [[ ! "$confirm" =~ ^[yY]$ ]]; then
echo "Aborted."
exit 0
fi
fi
echo "$gone_branches" | xargs git branch -D

View file

@ -3,5 +3,5 @@
branches=$(git branch --no-color --merged | grep -vE "^(\*|\+)" | grep -v "$(git_extra_default_branch)" | grep -v svn) branches=$(git branch --no-color --merged | grep -vE "^(\*|\+)" | grep -v "$(git_extra_default_branch)" | grep -v svn)
if [ -n "$branches" ] if [ -n "$branches" ]
then then
echo "$branches" | xargs git branch -d echo "$branches" | xargs -n 1 git branch -d
fi fi

View file

@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
VERSION="7.6.0-dev" VERSION="7.3.0"
INSTALL_SCRIPT="https://raw.githubusercontent.com/tj/git-extras/main/install.sh" INSTALL_SCRIPT="https://raw.githubusercontent.com/tj/git-extras/main/install.sh"
update() { update() {

View file

@ -17,9 +17,9 @@ read -r user
# personal access token # personal access token
# config name is github-personal-access-token '_' is not allowed in git config # config name is github-personal-access-token '_' is not allowed in git config
github_personal_access_token=$(git config --default "$GITHUB_TOKEN" git-extras.github-personal-access-token) github_personal_access_token=$(git config git-extras.github-personal-access-token)
test -z "$github_personal_access_token" && abort "GITHUB_TOKEN, or git config git-extras.github-personal-access-token required" test -z "$github_personal_access_token" && abort "git config git-extras.github-personal-access-token required"
# extract owner + project from repo url # extract owner + project from repo url
project=${url##*/} project=${url##*/}
@ -61,7 +61,7 @@ else
# clone forked repo into current dir # clone forked repo into current dir
git clone "${remote_prefix}${user}/${project}.git" "$project" git clone "${remote_prefix}${user}/${project}.git" "$project"
# add reference to origin fork so can merge in upstream changes # add reference to origin fork so can merge in upstream changes
cd "$project" || exit cd "$project"
git remote add upstream "${remote_prefix}${owner}/${project}.git" git remote add upstream "${remote_prefix}${owner}/${project}.git"
git fetch upstream git fetch upstream
fi fi

View file

@ -31,7 +31,7 @@ do
esac esac
done done
cd "$(git-root)" || exit # cd for git blame cd "$(git-root)" # cd for git blame
MERGED_LOG=$(git_extra_mktemp) MERGED_LOG=$(git_extra_mktemp)
if [[ $EMAIL == '-e' ]] if [[ $EMAIL == '-e' ]]
then then
@ -44,11 +44,9 @@ for file in $(git diff --name-only "$@")
do do
test -n "$DEBUG" && echo "git blame $file" test -n "$DEBUG" && echo "git blame $file"
# $1 - since $2 - until # $1 - since $2 - until
# shellcheck disable=SC2086
git blame $NOT_WHITESPACE --line-porcelain "$1" -- "$file" 2> /dev/null | git blame $NOT_WHITESPACE --line-porcelain "$1" -- "$file" 2> /dev/null |
LC_ALL=C sed -n "$PATTERN" | sort | uniq -c | LC_ALL=C sed 's/^\(.\)/- \1/' >> "$MERGED_LOG" LC_ALL=C sed -n "$PATTERN" | sort | uniq -c | LC_ALL=C sed 's/^\(.\)/- \1/' >> "$MERGED_LOG"
# if $2 not given, use current commit as "until" # if $2 not given, use current commit as "until"
# shellcheck disable=SC2086
git blame $NOT_WHITESPACE --line-porcelain "${2-@}" -- "$file" 2> /dev/null | git blame $NOT_WHITESPACE --line-porcelain "${2-@}" -- "$file" 2> /dev/null |
LC_ALL=C sed -n "$PATTERN" | sort | uniq -c | LC_ALL=C sed 's/^\(.\)/+ \1/' >> "$MERGED_LOG" LC_ALL=C sed -n "$PATTERN" | sort | uniq -c | LC_ALL=C sed 's/^\(.\)/+ \1/' >> "$MERGED_LOG"
done done
@ -73,7 +71,7 @@ END {
printf("%d %s\n", contributors[people], people) printf("%d %s\n", contributors[people], people)
} }
} }
}' "$MERGED_LOG" | sort -nr | # only gawk supports built-in sort function }' $MERGED_LOG | sort -nr | # only gawk supports built-in sort function
while read -r line while read -r line
do do
people=${line#* } people=${line#* }
@ -105,7 +103,7 @@ do
do do
printf "-" printf "-"
done done
printf "(%s)" "$num" printf "(%s)" $num
else else
for (( i = 0; i > num; i-- )) for (( i = 0; i > num; i-- ))
do do

View file

@ -2,27 +2,7 @@
GIT_DIR=$(git rev-parse --git-dir 2>/dev/null) GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
# awk script that takes 2 input files. The first one is newline deilmeted function show_contents {
# string of patterns to look for, second one is the file to remove them from.
# outfile has to be passed with -v upon call and is the file result is
# written to.
read -r -d '' AWK_SCRIPT <<'EOF'
# process the first "file" (newline split argument list)
NR==FNR { a[b++]=$0; next; }
# process file
{
found=0;
for (i=0; i != b; i++) {
if (a[i] == $0) { found=1; }
}
if (found == 1) { print "... removing '"$0"'"; }
else { print $0 > outfile }
}
EOF
show_contents() {
local file="${2/#~/$HOME}" local file="${2/#~/$HOME}"
if [ -f "$file" ]; then if [ -f "$file" ]; then
echo "$1 gitignore: $2" && cat "$file" echo "$1 gitignore: $2" && cat "$file"
@ -31,7 +11,7 @@ show_contents() {
fi fi
} }
cd_to_git_root() { function cd_to_git_root {
local error_level="$1" local error_level="$1"
if ! git rev-parse --git-dir &>/dev/null; then if ! git rev-parse --git-dir &>/dev/null; then
@ -49,7 +29,7 @@ cd_to_git_root() {
fi fi
} }
global_ignore() { function global_ignore() {
if ! git config --global core.excludesFile 2>/dev/null; then if ! git config --global core.excludesFile 2>/dev/null; then
if [ -f "$HOME/.gitignore" ]; then if [ -f "$HOME/.gitignore" ]; then
echo "$HOME/.gitignore" echo "$HOME/.gitignore"
@ -59,11 +39,11 @@ global_ignore() {
fi fi
} }
show_global() { function show_global {
show_contents Global "$(global_ignore)" show_contents Global "$(global_ignore)"
} }
add_global() { function add_global {
local global_gitignore local global_gitignore
global_gitignore="$(global_ignore)" global_gitignore="$(global_ignore)"
if [ -z "$global_gitignore" ]; then if [ -z "$global_gitignore" ]; then
@ -76,28 +56,28 @@ add_global() {
fi fi
} }
show_local() { function show_local {
cd_to_git_root --warn cd_to_git_root --warn
show_contents Local .gitignore show_contents Local .gitignore
} }
add_local() { function add_local {
cd_to_git_root --warn cd_to_git_root --warn
add_patterns .gitignore "$@" add_patterns .gitignore "$@"
} }
show_private() { function show_private {
cd_to_git_root --error cd_to_git_root --error
show_contents Private "${GIT_DIR}/info/exclude" show_contents Private "${GIT_DIR}/info/exclude"
} }
add_private() { function add_private {
cd_to_git_root --error cd_to_git_root --error
test -d "${GIT_DIR}/info" || mkdir -p "${GIT_DIR}/info" test -d "${GIT_DIR}/info" || mkdir -p "${GIT_DIR}/info"
add_patterns "${GIT_DIR}/info/exclude" "$@" add_patterns "${GIT_DIR}/info/exclude" "$@"
} }
add_patterns() { function add_patterns {
echo "Adding pattern(s) to: $1" echo "Adding pattern(s) to: $1"
local file="${1/#~/$HOME}" local file="${1/#~/$HOME}"
dir_name=$(dirname "$file") dir_name=$(dirname "$file")
@ -114,66 +94,6 @@ add_patterns() {
done done
} }
edit_file() {
local file="${2/#~/$HOME}"
if [ -f "$file" ]; then
echo "Editing $1 gitignore: ($2)" && eval "$(git var GIT_EDITOR) $(printf '%q' "$file")"
echo "Done."
else
echo "There is no $1 .gitignore yet." >&2
exit 1
fi
}
_usage() {
cat << EOF
Usage: git ignore [OPTION]... [PATTERN]...
Modify or display local global or private gitignore files.
OPTIONs set context (local, global, private) and action (display, add,
remove, edit). In case of collision, last flag overwrites preceding ones.
Defaults are: local context, action is display (see man git ignore for
more details).
Context examples:
local: .../repo/.gitignore
private: .../repo/.git/info/exclude
global: \$HOME/.gitignore
PATTERNs are the gitignore patterns as specified in git documentation.
Options:
-l, --local Set context to local gitignore
-g, --global Set context to global gitignore
-p, --private Set context to private gitignore
-e, --edit Set action to edit
-r, --remove Set action to remove
-h, --help Print this message
-- End of options delimiter
EOF
}
remove_patterns() {
declare -a args
local tmpfile
args=( "${@:3}" )
local file="${2/#~/$HOME}"
if [ -f "$file" ]; then
tmpfile="$(mktemp -q "${TMPDIR:-/tmp}"/git-extras-ignore.XXXXXX 2>/dev/null)"
echo "Removing patterns from $1 gitignore: $2"
awk -v outfile="$tmpfile" "${AWK_SCRIPT}"\
<(printf '%s\n' "${args[@]}") "$file"
cat "$tmpfile" > "$file"
rm "$tmpfile"
else
echo "There is no $1 .gitignore yet"
exit 1
fi
}
# can have only 1 action and 1 level, if conflicting flags are passed
# latter ones overwrite former
# sanity of args not tested (e.g. there should be no args if -e is supplied)
if test $# -eq 0; then if test $# -eq 0; then
show_global show_global
echo "---------------------------------" echo "---------------------------------"
@ -181,105 +101,22 @@ if test $# -eq 0; then
echo "---------------------------------" echo "---------------------------------"
show_private show_private
else else
# parse flags and args case "$1" in
level="none" -l|--local)
action="none" test $# -gt 1 && add_local "${@:2}" && echo
declare -a args show_local
while [ $# -gt 0 ]; do ;;
case "$1" in -g|--global)
-h|--help) test $# -gt 1 && add_global "${@:2}" && echo
_usage show_global
exit 0 ;;
;; -p|--private)
-l|--local) test $# -gt 1 && add_private "${@:2}" && echo
level="local" show_private
;; ;;
-g|--global) *)
level="global" add_local "$@"
;; ;;
-p|--private) esac
level="private"
;;
-e|--edit)
action="edit"
;;
-r|--remove)
action="remove"
;;
--)
shift
args+=("$@")
break
;;
*)
args+=("$1")
;;
esac
shift
done
# compatible with previous version
if [ "$action" = "none" ]; then
case "$level" in
local)
test ${#args[@]} -ne 0 && add_local "${args[@]}" && echo
show_local
;;
global)
test ${#args[@]} -ne 0 && add_global "${args[@]}" && echo
show_global
;;
private)
test ${#args[@]} -ne 0 && add_private "${args[@]}" && echo
show_private
;;
none)
add_local "${args[@]}"
# maybe show_local here too?
;;
esac
exit 0
# open file in editor
elif [ "$action" = "edit" ]; then
case "$level" in
local|none)
cd_to_git_root --warn
edit_file 'local' .gitignore && echo
;;
global)
global_gitignore="$(global_ignore)"
edit_file global "$global_gitignore" && echo
;;
private)
cd_to_git_root --error
test -d "${GIT_DIR}/info" || mkdir -p "${GIT_DIR}/info"
edit_file private "${GIT_DIR}/info/exclude" && echo
;;
esac
exit 0
# remove entries
else
if [ ${#args[@]} -eq 0 ]; then
echo "Nothing to remove."
exit 0
fi
case "$level" in
local|none)
cd_to_git_root --warn
remove_patterns 'local' .gitignore "${args[@]}" && echo
show_local
;;
global)
global_gitignore="$(global_ignore)"
remove_patterns global "$global_gitignore" "${args[@]}" && echo
show_global
;;
private)
cd_to_git_root --error
remove_patterns private "${GIT_DIR}/info/exclude" "${args[@]}" && echo
show_private
;;
esac
exit 0
fi
fi fi

View file

@ -30,7 +30,7 @@ while getopts "m:eapfh" arg; do
PUSH=true PUSH=true
;; ;;
f) f)
FORCE='--force-with-lease' FORCE='-f'
;; ;;
h) h)
echo "$USAGE" echo "$USAGE"

View file

@ -18,7 +18,7 @@ then
git stash git stash
fi fi
if [ "${!#}" = '--ff-only' ]; then if [ "${!#}" == '--ff-only' ]; then
case $# in case $# in
2 ) # dest --ff 2 ) # dest --ff
git push "$(git rev-parse --show-toplevel)" "$cur_branch":"$1";; git push "$(git rev-parse --show-toplevel)" "$cur_branch":"$1";;

View file

@ -7,8 +7,6 @@ if [ -z "${1-}" ] ; then
exit 1 exit 1
fi fi
remote_ref_kind=merge-requests
if test "$1" = "clean"; then if test "$1" = "clean"; then
git for-each-ref refs/heads/mr/* --format='%(refname)' | while read -r ref; do git for-each-ref refs/heads/mr/* --format='%(refname)' | while read -r ref; do
git branch -D "${ref#refs/heads/}" git branch -D "${ref#refs/heads/}"
@ -17,19 +15,13 @@ if test "$1" = "clean"; then
elif [[ $1 =~ ^(https?://[^/]+/(.+))/merge_requests/([0-9]+).*$ ]]; then elif [[ $1 =~ ^(https?://[^/]+/(.+))/merge_requests/([0-9]+).*$ ]]; then
remote=${BASH_REMATCH[1]}.git remote=${BASH_REMATCH[1]}.git
id=${BASH_REMATCH[3]} id=${BASH_REMATCH[3]}
elif [[ $1 =~ ^(https?://[^/]+/(.+))/pulls/([0-9]+).*$ ]]; then
# Forgejo/Codeberg pull request URL, e.g.
# https://codeberg.org/owner/repository/pulls/453
remote=${BASH_REMATCH[1]}.git
id=${BASH_REMATCH[3]}
remote_ref_kind=pull
else else
id=$1 id=$1
remote=${2:-origin} remote=${2:-origin}
fi fi
branch=mr/$id branch=mr/$id
remote_ref=refs/$remote_ref_kind/$id/head remote_ref=refs/merge-requests/$id/head
git fetch -fu "$remote" "$remote_ref:$branch" git fetch -fu "$remote" "$remote_ref:$branch"
git checkout "$branch" git checkout "$branch"
git config --local --replace "branch.$branch.merge" "$remote_ref" git config --local --replace "branch.$branch.merge" "$remote_ref"

View file

@ -9,15 +9,15 @@ do
file="$file"' '"$i" file="$file"' '"$i"
shift shift
done done
test -n "$*" && range=("$@") test -n "$*" && range="$*"
test -z "$file" && echo "file required." 1>&2 && exit 1 test -z "$file" && echo "file required." 1>&2 && exit 1
if [ -z "${range[*]}" ] if [ -z "$range" ]
then then
git filter-branch -f --index-filter "git rm -r --cached ""$file"" --ignore-unmatch" \ git filter-branch -f --index-filter "git rm -r --cached ""$file"" --ignore-unmatch" \
--prune-empty --tag-name-filter cat -- --all --prune-empty --tag-name-filter cat -- --all
else else
# $range is an array so that we can forward multiple rev-list arguments # don't quote $range so that we can forward multiple rev-list arguments
git filter-branch -f --index-filter "git rm -r --cached ""$file"" --ignore-unmatch" \ git filter-branch -f --index-filter "git rm -r --cached ""$file"" --ignore-unmatch" \
--prune-empty --tag-name-filter cat -- "${range[@]}" --prune-empty --tag-name-filter cat -- $range
fi fi

View file

@ -2,7 +2,7 @@
set -e set -e
set -o pipefail set -o pipefail
if ! command -v pastebinit &>/dev/null; then if ! command -v pastebinit >/dev/null 2>&1; then
echo >&2 "To run 'git paste', you need to install pastebinit in your system" echo >&2 "To run 'git paste', you need to install pastebinit in your system"
exit 1 exit 1
fi fi

View file

@ -5,7 +5,7 @@ SECONDARY_BRANCH=""
FF="--ff" FF="--ff"
CONTINUE="no" CONTINUE="no"
current_branch() { function current_branch() {
git rev-parse --abbrev-ref HEAD git rev-parse --abbrev-ref HEAD
} }

View file

@ -31,9 +31,9 @@ EOF
# personal access token # personal access token
# config name is github-personal-access-token '_' is not allowed in git config # config name is github-personal-access-token '_' is not allowed in git config
github_personal_access_token=$(git config --default "$GITHUB_TOKEN" git-extras.github-personal-access-token) github_personal_access_token=$(git config git-extras.github-personal-access-token)
test -z "$github_personal_access_token" && abort "GITHUB_TOKEN or git config git-extras.github-personal-access-token required" test -z "$github_personal_access_token" && abort "git config git-extras.github-personal-access-token required"
# branch # branch
@ -43,7 +43,7 @@ if [ -z "$remote" ]; then
echo 'no upstream found, push to origin as default' echo 'no upstream found, push to origin as default'
remote="origin" remote="origin"
fi fi
[ "$remote" = "." ] && abort "the upstream should be a remote branch." [ "$remote" == "." ] && abort "the upstream should be a remote branch."
# make sure it's pushed # make sure it's pushed

View file

@ -30,7 +30,7 @@ do
GIT_INDEX_FILE=$index git read-tree "$rev" GIT_INDEX_FILE=$index git read-tree "$rev"
# Try to apply the patch. # Try to apply the patch.
GIT_INDEX_FILE=$index git apply --cached "$1" &>/dev/null GIT_INDEX_FILE=$index git apply --cached "$1" >/dev/null 2>&1
patch_failed=$? patch_failed=$?
# Do it again, but show the error, if the problem is the patch itself. # Do it again, but show the error, if the problem is the patch itself.

View file

@ -119,7 +119,7 @@ if test $# -gt 0; then
fi fi
declare -a sign_args declare -a sign_args
if [ "$sign" = true ]; then if [ "$sign" == true ]; then
sign_args=("-s") sign_args=("-s")
fi fi

View file

@ -1,26 +1,9 @@
#!/usr/bin/env bash #!/usr/bin/env bash
shopt -s extglob
git version git version
echo "git-extras version ""$(git-extras -v)" echo "git-extras version ""$(git-extras -v)"
echo "Type 'ls' to ls files below current directory; '!command' to execute any command or just 'subcommand' to execute any git subcommand; 'quit', 'exit', 'q', ^D, or ^C to exit the git repl." echo "Type 'ls' to ls files below current directory; '!command' to execute any command or just 'subcommand' to execute any git subcommand; 'quit', 'exit', 'q', ^D, or ^C to exit the git repl."
HISTIGNORE=${HISTIGNORE:-+([[:space:]])}
HISTCONTROL=${HISTCONTROL:-ignoredups}
use_local_history=$(git config --get --default 'false' git-extras.repl.use-local-history)
if [[ "$use_local_history" == "true" ]]; then
HISTFILE="$(git rev-parse --show-toplevel)/.git_extras_repl_history"
else
HISTFILE=${XDG_STATE_HOME:-$HOME/.local/state}/git_extras_repl_history
fi
# file doesn't exist, is empty, or contains only whitespace
if [[ ! -f "$HISTFILE" ]] || [[ ! -s "$HISTFILE" ]] || ! grep -q '[^[:space:]]' "$HISTFILE"; then
# `history -r` .... `history -a` are not happy with an empty initial file in bash 3.2.57, which is what MacOS 26 ships with
echo '!echo welcome to git-repl!' >> "$HISTFILE"
fi
history -r
while true; do while true; do
# Current branch # Current branch
cur=$(git symbolic-ref HEAD 2> /dev/null | cut -d/ -f3-) cur=$(git symbolic-ref HEAD 2> /dev/null | cut -d/ -f3-)
@ -36,20 +19,7 @@ while true; do
else else
es_string="" es_string=""
fi fi
prompt_character=$(git config --get --default '>' git-extras.repl.prompt-character) prompt="git$cur_string$es_string> "
prefix=$(git config --get --default 'git' git-extras.repl.prefix)
show_project_name=$(git config --get --default 'false' git-extras.repl.show-project-name)
if [[ "$show_project_name" == "true" ]]; then
project_name=" $(basename "$(git rev-parse --show-toplevel)" .git)"
else
project_name=""
fi
prompt_base="$prefix$project_name$cur_string$es_string$prompt_character"
prompt_base_stripped=$(echo "$prompt_base" | awk '{$1=$1};1')
prompt="$prompt_base_stripped "
# Use arguments as a command if any are provided. # Use arguments as a command if any are provided.
if [ $# -ne 0 ]; then if [ $# -ne 0 ]; then
@ -63,32 +33,19 @@ while true; do
test $? -ne 0 && break test $? -ne 0 && break
fi fi
# Add command to history if it is not all whitespace # History
if [[ ! "$cmd" =~ ^[[:space:]]*$ ]]; then history -s "$cmd"
history -s "$cmd"
fi
# Built-in commands # Built-in commands
case $cmd in case $cmd in
ls) cmd=ls-files;; ls) cmd=ls-files;;
"") "") continue;;
on_enter_cmd=$(git config --get --default '' git-extras.repl.on-enter-command)
if test -n "$on_enter_cmd"; then
cmd="$on_enter_cmd"
else
continue
fi
;;
quit|exit|q) break;; quit|exit|q) break;;
esac esac
history -a
if [[ $cmd == !* ]]; then if [[ $cmd == !* ]]; then
# shellcheck disable=SC2086
eval ${cmd:1} eval ${cmd:1}
elif [[ $cmd == git* ]]; then elif [[ $cmd == git* ]]; then
# shellcheck disable=SC2086
eval $cmd eval $cmd
else else
eval git "$cmd" eval git "$cmd"

View file

@ -59,7 +59,7 @@ function php_lint()
function _dos2unix() function _dos2unix()
{ {
command -v dos2unix > /dev/null && dos2unix "$@" command -v dos2unix > /dev/null && dos2unix $@
return 0 return 0
} }
@ -68,8 +68,8 @@ function _sanitize()
git config --get-all extras.scp.sanitize | while read -r i git config --get-all extras.scp.sanitize | while read -r i
do do
case $i in case $i in
php_lint) php_lint "$@";; # git config --global --add extras.scp.sanitize php_lint php_lint) php_lint $@;; # git config --global --add extras.scp.sanitize php_lint
dos2unix) _dos2unix "$@";; # git config --global --add extras.scp.sanitize dos2unix dos2unix) _dos2unix $@;; # git config --global --add extras.scp.sanitize dos2unix
esac esac
done done
return $? return $?
@ -77,17 +77,6 @@ function _sanitize()
function scp_and_stage function scp_and_stage
{ {
local verbose=0 interactive=0 dry_run=0
while :
do
case "$1" in
-v|--verbose) verbose=1; shift;;
-i|--interactive) verbose=1; interactive=1; shift;;
-n|--dry-run) verbose=1; dry_run=1; shift;;
*) break;;
esac
done
set_remote "$1" set_remote "$1"
shift shift
@ -105,116 +94,45 @@ function scp_and_stage
list=$(git ls-files "$@")" "$(git ls-files -o "$@") list=$(git ls-files "$@")" "$(git ls-files -o "$@")
elif [ -n "$refhead" ] elif [ -n "$refhead" ]
then then
[ "$verbose" -eq 1 ] && git --no-pager diff --stat "$refhead" git diff --stat "$refhead"
list=$(git diff "$refhead" --name-only) list=$(git diff "$refhead" --name-only)
else else
[ "$verbose" -eq 1 ] && git --no-pager diff git diff
list=$(git diff --name-only) list=$(git diff --name-only)
fi fi
deleted=$(for i in $list; do [ -f "$i" ] || echo "$i"; done) deleted=$(for i in $list; do [ -f "$i" ] || echo "$i"; done)
list=$(for i in $list; do [ -f "$i" ] && echo "$i"; done) list=$(for i in $list; do [ -f "$i" ] && echo "$i"; done)
if [ "$interactive" -eq 1 ] && [ "$dry_run" -eq 0 ] && { [ -n "$list" ] || [ -n "$deleted" ]; }
then
local reply
read -r -p "Proceed with sync to $remote? [y/N] " reply
case "$reply" in
y|Y|yes|YES) ;;
*) _info "Aborted, nothing synced."; exit 0;;
esac
fi
local status=0
if [ -n "$list" ] if [ -n "$list" ]
then then
local _TMP=${0///} local _TMP=${0///}
# shellcheck disable=SC2086 echo "$list" > "$_TMP" &&
echo "$list" > "$_TMP" _sanitize $list &&
if [ "$dry_run" -eq 1 ] || _sanitize $list _info "Pushing to $remote ($(git config "remote.$remote.url"))" &&
then rsync -rlDv --files-from="$_TMP" ./ "$(git config "remote.$remote.url")/" &&
_info "Pushing to $remote ($(git config "remote.$remote.url"))" git add --force $list &&
if [ "$dry_run" -eq 1 ]
then
rsync -rlDvn --files-from="$_TMP" ./ "$(git config "remote.$remote.url")/"
else
rsync -rlDv --files-from="$_TMP" ./ "$(git config "remote.$remote.url")/" &&
git add --force $list
fi
status=$?
else
status=1
fi
rm "$_TMP" rm "$_TMP"
fi fi
deleted=$(for i in $deleted; do echo "$(git config "remote.$remote.url" | cut -d: -f2)/$i"; done) deleted=$(for i in $deleted; do echo "$(git config "remote.$remote.url" | cut -d: -f2)/$i"; done)
if [ -n "$deleted" ] [ -n "$deleted" ] &&
then COLOR_RED &&
COLOR_RED echo Deleted remote files &&
echo Deleted remote files ssh "$(git config "remote.$remote.url" | cut -d: -f1)" -t "rm $deleted" &&
if [ "$dry_run" -eq 1 ] echo "$deleted"
then COLOR_RESET
echo "$deleted"
else
if ssh "$(git config "remote.$remote.url" | cut -d: -f1)" -t "rm $deleted"
then
echo "$deleted"
else
status=1
fi
fi
COLOR_RESET
fi
return "$status"
} }
function reverse_scp() function reverse_scp()
{ {
local verbose=0 interactive=0 dry_run=0
while :
do
case "$1" in
-v|--verbose) verbose=1; shift;;
-i|--interactive) verbose=1; interactive=1; shift;;
-n|--dry-run) verbose=1; dry_run=1; shift;;
*) break;;
esac
done
set_remote "$1" set_remote "$1"
shift shift
local _TMP=${0///} local _TMP=${0///}
echo "$@" > "$_TMP" echo $@ > "$_TMP" &&
rsync -rlDv --files-from="$_TMP" "$(git config "remote.$remote.url")/" ./ &&
local status=0
if [ "$verbose" -eq 1 ]
then
rsync -rlDvn --files-from="$_TMP" "$(git config "remote.$remote.url")/" ./
status=$?
fi
if [ "$dry_run" -eq 1 ]
then
rm "$_TMP"
return "$status"
fi
if [ "$interactive" -eq 1 ]
then
local reply
read -r -p "Proceed with copy from $remote? [y/N] " reply
case "$reply" in
y|Y|yes|YES) ;;
*) _info "Aborted, nothing copied."; rm "$_TMP"; exit 0;;
esac
fi
rsync -rlDv --files-from="$_TMP" "$(git config "remote.$remote.url")/" ./ &&
rm "$_TMP" rm "$_TMP"
} }
@ -229,14 +147,9 @@ function _usage()
{ {
echo "Usage: echo "Usage:
git scp -h|help|? git scp -h|help|?
git scp [options] <remote> [ref|file..] # scp and stage your files to specified remote git scp <remote> [ref|file..] # scp and stage your files to specified remote
git scp [options] <remote> [<ref>] # show diff relative to <ref> and upload unstaged files to <remote> git scp <remote> [<ref>] # show diff relative to <ref> and upload unstaged files to <remote>
git rscp [options] <remote> [<file|directory>] # copy <remote> files to current working directory git rscp <remote> [<file|directory>] # copy <remote> files to current working directory
OPTIONS:
-v, --verbose print what will be synced before syncing
-i, --interactive prompt for confirmation before syncing (implies --verbose)
-n, --dry-run show what would be synced, change nothing (implies --verbose; no staging, no remote writes/deletes)
" "
case $1 in case $1 in
@ -260,8 +173,8 @@ case $(basename "$0") in
git-scp) git-scp)
case $1 in case $1 in
''|-h|'?'|help|--help) shift; _test_git_scp; _usage "$@";; ''|-h|'?'|help|--help) shift; _test_git_scp; _usage "$@";;
*) scp_and_stage "$@";; *) scp_and_stage $@;;
esac esac
;; ;;
git-rscp) reverse_scp "$@";; git-rscp) reverse_scp $@;;
esac esac

View file

@ -2,7 +2,7 @@
COMMIT_MESSAGE='Initial commit' COMMIT_MESSAGE='Initial commit'
if [ "$1" = "-m" ]; then if [ "$1" == "-m" ]; then
COMMIT_MESSAGE=$2 COMMIT_MESSAGE=$2
shift; shift shift; shift
fi fi

View file

@ -35,7 +35,7 @@ in_git_repo=$?
# Use colors, but only if connected to a terminal, and that terminal # Use colors, but only if connected to a terminal, and that terminal
# supports them. # supports them.
if command -v tput &>/dev/null; then if command -v tput >/dev/null 2>&1; then
ncolors=$(tput colors) ncolors=$(tput colors)
fi fi
if [[ -t 1 ]] && [[ -n "$ncolors" ]] && [[ "$ncolors" -ge 8 ]] ; then if [[ -t 1 ]] && [[ -n "$ncolors" ]] && [[ "$ncolors" -ge 8 ]] ; then

View file

@ -3,16 +3,12 @@
cd "$(git root)" || { echo "Can't cd to top level directory";exit 1; } cd "$(git root)" || { echo "Can't cd to top level directory";exit 1; }
PROJECT_FULL_PATH=
SUMMARY_BY_LINE= SUMMARY_BY_LINE=
DEDUP_BY_EMAIL= DEDUP_BY_EMAIL=
MERGES_ARG= MERGES_ARG=
OUTPUT_STYLE= OUTPUT_STYLE=
for arg in "$@"; do for arg in "$@"; do
case "$arg" in case "$arg" in
--full-path)
PROJECT_FULL_PATH=1
;;
--line) --line)
SUMMARY_BY_LINE=1 SUMMARY_BY_LINE=1
;; ;;
@ -55,12 +51,7 @@ if [ -n "$SUMMARY_BY_LINE" ]; then
else else
[ $# -ne 0 ] && commit=$* [ $# -ne 0 ] && commit=$*
fi fi
project=${PWD##*/}
if [[ -n "$PROJECT_FULL_PATH" ]]; then
project=${PWD/${HOME}/\~}
else
project=${PWD##*/}
fi
# #
# get date for the given <commit> # get date for the given <commit>
@ -206,10 +197,10 @@ COLUMN_CMD_DELIMTER="¬" # Hopefully, this symbol is not used in branch names...
SP="$COLUMN_CMD_DELIMTER|" SP="$COLUMN_CMD_DELIMTER|"
print_summary_by_line() { print_summary_by_line() {
if [ "$OUTPUT_STYLE" = "tabular" ]; then if [ "$OUTPUT_STYLE" == "tabular" ]; then
tabular_headers="# Repo $SP Lines" tabular_headers="# Repo $SP Lines"
echo -e "$tabular_headers\n$project $SP $(line_count "${paths[@]}")" | column -t -s "$COLUMN_CMD_DELIMTER" echo -e "$tabular_headers\n$project $SP $(line_count "${paths[@]}")" | column -t -s "$COLUMN_CMD_DELIMTER"
elif [ "$OUTPUT_STYLE" = "oneline" ]; then elif [ "$OUTPUT_STYLE" == "oneline" ]; then
echo "$project / lines: $(line_count "${paths[@]}")" echo "$project / lines: $(line_count "${paths[@]}")"
elif [ -n "$SUMMARY_BY_LINE" ]; then elif [ -n "$SUMMARY_BY_LINE" ]; then
echo echo
@ -221,10 +212,10 @@ print_summary_by_line() {
} }
print_summary() { print_summary() {
if [ "$OUTPUT_STYLE" = "tabular" ]; then if [ "$OUTPUT_STYLE" == "tabular" ]; then
tabular_headers="# Repo $SP Age $SP Last active $SP Active on $SP Commits $SP Uncommitted $SP Branch" tabular_headers="# Repo $SP Age $SP Last active $SP Active on $SP Commits $SP Uncommitted $SP Branch"
echo -e "$tabular_headers\n$project $SP $(repository_age) $SP $(last_active) $SP $(active_days "$commit") days $SP $(commit_count "$commit") $SP $(uncommitted_changes_count) $SP $(current_branch_name)" | column -t -s "$COLUMN_CMD_DELIMTER" echo -e "$tabular_headers\n$project $SP $(repository_age) $SP $(last_active) $SP $(active_days "$commit") days $SP $(commit_count "$commit") $SP $(uncommitted_changes_count) $SP $(current_branch_name)" | column -t -s "$COLUMN_CMD_DELIMTER"
elif [ "$OUTPUT_STYLE" = "oneline" ]; then elif [ "$OUTPUT_STYLE" == "oneline" ]; then
echo "$project / age: $(repository_age) / last active: $(last_active) / active on $(active_days "$commit") days / commits: $(commit_count "$commit") / uncommitted: $(uncommitted_changes_count) / branch: $(current_branch_name)" echo "$project / age: $(repository_age) / last active: $(last_active) / active on $(active_days "$commit") days / commits: $(commit_count "$commit") / uncommitted: $(uncommitted_changes_count) / branch: $(current_branch_name)"
else else
echo echo
@ -236,7 +227,7 @@ print_summary() {
echo " commits : $(commit_count "$commit")" echo " commits : $(commit_count "$commit")"
# The file count doesn't support passing a git ref so ignore it if a ref is given # The file count doesn't support passing a git ref so ignore it if a ref is given
if [ "$commit" = "HEAD" ]; then if [ "$commit" == "HEAD" ]; then
echo " files : $(file_count)" echo " files : $(file_count)"
fi fi
echo " uncommitted : $(uncommitted_changes_count)" echo " uncommitted : $(uncommitted_changes_count)"

View file

@ -1,14 +0,0 @@
#!/usr/bin/env bash
# Based on scripts from git-utils:
# * https://github.com/ddollar/git-utils/blob/master/git-unwip
# Check if the last commit is a 'WIP' commit
LAST_COMMIT=`git log -1 --pretty=%B | tr -d '[:space:]'`
if [ 'WIP' != $LAST_COMMIT ]; then
echo 'Last commit is not a WIP commit, so it will not be unWIP-ed.'
exit 1
fi
git undo --soft

View file

@ -34,10 +34,10 @@ fi
status_opts=(--porcelain --short) status_opts=(--porcelain --short)
# %ct: committer date, UNIX timestamp / %at: author date, UNIX timestamp # %ct: committer date, UNIX timestamp / %at: author date, UNIX timestamp
log_opts=(--format='%ct') whatchanged_opts=(--format='%ct')
if git status --help 2>&1 | grep -q -- "--no-renames"; then if git status --help 2>&1 | grep -q -- "--no-renames"; then
status_opts+=(--no-renames) status_opts+=(--no-renames)
log_opts+=(--no-renames) whatchanged_opts+=(--no-renames)
fi fi
if git status --help 2>&1 | grep -q -- "--untracked-files"; then if git status --help 2>&1 | grep -q -- "--untracked-files"; then
status_opts+=(--untracked-files=no) status_opts+=(--untracked-files=no)
@ -126,6 +126,6 @@ git --no-pager status "${status_opts[@]}" . \
| cut -c 4- >"${tmpfile}" | cut -c 4- >"${tmpfile}"
# prefix is not stripped: # prefix is not stripped:
git --no-pager log --raw --no-merges "${log_opts[@]}" . \ git --no-pager whatchanged "${whatchanged_opts[@]}" . \
| awk "${awk_flags[@]}" "${awk_script}" "${tmpfile}" - \ | awk "${awk_flags[@]}" "${awk_script}" "${tmpfile}" - \
| BASH_ENV='' bash "${bash_opts[@]}" - | BASH_ENV='' bash "${bash_opts[@]}" -

View file

@ -1,8 +0,0 @@
#!/usr/bin/env bash
# Based on scripts from git-utils:
# * https://github.com/ddollar/git-utils/blob/master/git-wip
# * https://github.com/ddollar/git-utils/blob/master/git-addremove
git add --all
git commit --all --message="WIP"

View file

@ -1,29 +1,6 @@
# shellcheck shell=bash # shellcheck shell=bash
# bash completion support for git-extras. # bash completion support for git-extras.
__gitex_heads_unique() {
local branch specified=("${COMP_WORDS[@]:2}")
for branch in $(__git_heads); do
[[ " ${specified[*]} " == *" $branch "* ]] || printf '%s\n' "$branch"
done
}
_git_authors(){
__gitcomp "-l --list --no-email"
}
_git_browse(){
__git_complete_remote_or_refspec
}
_git_browse_ci(){
__git_complete_remote_or_refspec
}
_git_brv(){
__gitcomp "-r --reverse"
}
_git_changelog(){ _git_changelog(){
local s_opts=( '-a' '-l' '-t' '-f' '-s' '-n' '-p' '-x' '-h' '?' ) local s_opts=( '-a' '-l' '-t' '-f' '-s' '-n' '-p' '-x' '-h' '?' )
local l_opts=( local l_opts=(
@ -45,6 +22,14 @@ _git_changelog(){
__gitcomp "$merged_opts_str" __gitcomp "$merged_opts_str"
} }
_git_authors(){
__gitcomp "-l --list --no-email"
}
_git_brv(){
__gitcomp "-r --reverse"
}
_git_coauthor(){ _git_coauthor(){
local oldIfs=$IFS local oldIfs=$IFS
IFS=$'\n' IFS=$'\n'
@ -82,10 +67,6 @@ _git_contrib(){
COMPREPLY=($(compgen -W "$all" -- "$cur")) COMPREPLY=($(compgen -W "$all" -- "$cur"))
} }
_git_commits_since(){
__gitcomp "-r --ref"
}
_git_count(){ _git_count(){
__gitcomp "--all" __gitcomp "--all"
} }
@ -95,7 +76,7 @@ __git_cp(){
} }
_git_delete_branch(){ _git_delete_branch(){
__gitcomp "$(__gitex_heads_unique)" __gitcomp "$(__git_heads)"
} }
_git_delete_squashed_branches(){ _git_delete_squashed_branches(){
@ -145,20 +126,16 @@ _git_graft(){
_git_ignore(){ _git_ignore(){
case "$cur" in case "$cur" in
--*) --*)
__gitcomp "--global --local --private --edit --remove" __gitcomp "--global --local --private"
return return
;; ;;
-*) -*)
__gitcomp "--global --local --private --edit --remove -g -l -p -e -r" __gitcomp "--global --local --private -g -l -p"
return return
;; ;;
esac esac
} }
_git_info(){
__gitcomp "--color -c --no-config"
}
_git_missing(){ _git_missing(){
# Suggest all known refs # Suggest all known refs
__gitcomp "$(git for-each-ref --format='%(refname:short)')" __gitcomp "$(git for-each-ref --format='%(refname:short)')"
@ -181,29 +158,15 @@ _git_reauthor(){
__gitcomp "${comp}" __gitcomp "${comp}"
} }
__git_extras_rename(){ _git_scp(){
if ((COMP_CWORD == 2 || COMP_CWORD == 3)); then
__gitcomp "$1"
fi
}
_git_rename_branch(){
__git_extras_rename "$(__git_heads)"
}
_git_rename_remote(){
__git_extras_rename "$(__git_remotes)"
}
_git_rename_tag(){
__git_extras_rename "$(__git_tags)"
}
_git_rscp(){
__git_complete_remote_or_refspec __git_complete_remote_or_refspec
} }
_git_scp(){ _git_stamp(){
__gitcomp '--replace -r'
}
_git_rscp(){
__git_complete_remote_or_refspec __git_complete_remote_or_refspec
} }
@ -211,10 +174,22 @@ _git_squash(){
__gitcomp "$(__git_heads)" __gitcomp "$(__git_heads)"
} }
_git_stamp(){
__gitcomp '--replace -r'
}
_git_undo(){ _git_undo(){
__gitcomp "--hard --soft -h -s" __gitcomp "--hard --soft -h -s"
} }
_git_info(){
__gitcomp "--color -c --no-config"
}
_git_browse(){
__git_complete_remote_or_refspec
}
_git_browse_ci(){
__git_complete_remote_or_refspec
}
_git_rename_file() {
__gitcomp "-h --help"
}

View file

@ -72,15 +72,6 @@ __gitex_branch_names() {
_wanted branch-names expl branch-name compadd $* - $branch_names _wanted branch-names expl branch-name compadd $* - $branch_names
} }
__gitex_branch_names_unique() {
local expl
declare -a branch_names already_specified
branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/})
__gitex_command_successful || return
already_specified=(${words[2,-1]})
_wanted branch-names expl branch-name compadd -F already_specified $* - $branch_names
}
__gitex_specific_branch_names() { __gitex_specific_branch_names() {
local expl local expl
declare -a branch_names declare -a branch_names
@ -101,13 +92,6 @@ __gitex_submodule_names() {
_wanted submodule-names expl submodule-name compadd $* - $submodule_names _wanted submodule-names expl submodule-name compadd $* - $submodule_names
} }
__gitex_workspace_names() {
local expl
declare -a workspace_names
workspace_names=($(git bulk --listall | awk '{print $1}' | cut -d "." -f 2))
__gitex_command_successful || return
_wanted workspace-names expl workspace-names compadd $* - $workspace_names
}
__gitex_author_names() { __gitex_author_names() {
local expl local expl
@ -138,22 +122,6 @@ _git-brv() {
'(-r --reverse)'{-r,--reverse}'[reverse order]' '(-r --reverse)'{-r,--reverse}'[reverse order]'
} }
_git-bulk() {
_arguments \
'-a[Run a git command on all workspaces and their repositories.]' \
'-g[Ask the user for confirmation on every execution (guarded mode).]' \
'-w[Run the git command on the specified workspace.]:workspace-name:__gitex_workspace_names' \
'-q[Suppress bulk output about current execution (quiet mode).]' \
'--no-follow-symlinks[Do not traverse symbolic links when searching for git repositories.]' \
'--no-follow-hidden[Do not traverse hidden directories when searching for git repositories.]' \
'--addworkspace[Register a workspace for bulk operations.]' \
'--removeworkspace[Remove the specified workspace.]:workspace-name:__gitex_workspace_names' \
'--addcurrent[Adds the current directory as workspace to git bulk operations]' \
'--purge[Removes all defined repository locations.]' \
'--listall[List all registered repositories.]' \
'--help[Show the help.]'
}
_git-changelog() { _git-changelog() {
_arguments \ _arguments \
'(-l --list)'{-l,--list}'[list commits]' \ '(-l --list)'{-l,--list}'[list commits]' \
@ -171,11 +139,6 @@ _git-coauthor() {
':co-author-email[email address of co-author to add]:__gitex_author_emails' ':co-author-email[email address of co-author to add]:__gitex_author_emails'
} }
_git-commits-since() {
_arguments \
'(-r --ref)'{-r,--ref}'[show commits since ref]'
}
_git-contrib() { _git-contrib() {
_arguments \ _arguments \
':author:__gitex_author_names' ':author:__gitex_author_names'
@ -210,12 +173,8 @@ _git-create-branch() {
} }
_git-delete-branch() { _git-delete-branch() {
__gitex_branch_names_unique
}
_git-delete-gone-branches() {
_arguments \ _arguments \
'(-n --dry-run)'{-n,--dry-run}'[show branches that would be deleted without deleting]' ':branch-name:__gitex_branch_names'
} }
_git-delete-squashed-branches() { _git-delete-squashed-branches() {
@ -317,11 +276,9 @@ _git-guilt() {
_git-ignore() { _git-ignore() {
_arguments -C \ _arguments -C \
'(--local -l)'{--local,-l}'[set context to local gitignore]' \ '(--local -l)'{--local,-l}'[show local gitignore]' \
'(--global -g)'{--global,-g}'[set context to global gitignore]' \ '(--global -g)'{--global,-g}'[show global gitignore]' \
'(--private -p)'{--private,-p}'[set context to private gitignore]' \ '(--private -p)'{--private,-p}'[show repo gitignore]' \
'(--edit -e)'{--edit,-e}'[set action to edit]' \
'(--remove -r)'{--remove,-r}'[set action to remove]' \
'*:filename:_files' '*:filename:_files'
} }
@ -392,7 +349,6 @@ _git-standup() {
} }
_git-summary() { _git-summary() {
_arguments '--full-path[show repository full path]'
_arguments '--line[summarize with lines rather than commits]' _arguments '--line[summarize with lines rather than commits]'
_arguments '--dedup-by-email[remove duplicate users by the email address]' _arguments '--dedup-by-email[remove duplicate users by the email address]'
_arguments '--no-merges[exclude merge commits]' _arguments '--no-merges[exclude merge commits]'
@ -423,12 +379,10 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \
clear:'rigorously clean up a repository' \ clear:'rigorously clean up a repository' \
coauthor:'add a co-author to the last commit' \ coauthor:'add a co-author to the last commit' \
commits-since:'show commit logs since some date' \ commits-since:'show commit logs since some date' \
continue:'continue current revert, merge, rebase, or cherry-pick process' \
contrib:'show user contributions' \ contrib:'show user contributions' \
count:'show commit count' \ count:'show commit count' \
create-branch:'create branches' \ create-branch:'create branches' \
delete-branch:'delete branches' \ delete-branch:'delete branches' \
delete-gone-branches:'delete branches whose remote is gone' \
delete-merged-branches:'delete merged branches' \ delete-merged-branches:'delete merged branches' \
delete-squashed-branches:'delete squashed branches' \ delete-squashed-branches:'delete squashed branches' \
delete-submodule:'delete submodules' \ delete-submodule:'delete submodules' \
@ -445,7 +399,7 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \
graft:'merge and destroy a given branch' \ graft:'merge and destroy a given branch' \
guilt:'calculate change between two revisions' \ guilt:'calculate change between two revisions' \
ignore-io:'get sample gitignore file' \ ignore-io:'get sample gitignore file' \
ignore:'Modify or display .gitignore files' \ ignore:'add .gitignore patterns' \
info:'returns information on current repository' \ info:'returns information on current repository' \
local-commits:'list local commits' \ local-commits:'list local commits' \
lock:'lock a file excluded from version control' \ lock:'lock a file excluded from version control' \
@ -485,6 +439,4 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \
touch:'touch and add file to the index' \ touch:'touch and add file to the index' \
undo:'remove latest commits' \ undo:'remove latest commits' \
unlock:'unlock a file excluded from version control' \ unlock:'unlock a file excluded from version control' \
utimes:'change files modification time to their last commit date' \ utimes:'change files modification time to their last commit date'
unwip:'undo a WIP commit' \
wip:'create a WIP commit'

View file

@ -32,7 +32,7 @@ set __fish_git_extras_commands \
"graft:Merge and destroy a given branch" \ "graft:Merge and destroy a given branch" \
"guilt:calculate change between two revisions" \ "guilt:calculate change between two revisions" \
"ignore-io:Get sample gitignore file" \ "ignore-io:Get sample gitignore file" \
"ignore:Modify or display .gitignore files" \ "ignore:Add .gitignore patterns" \
"info:Returns information on current repository" \ "info:Returns information on current repository" \
"local-commits:List local commits" \ "local-commits:List local commits" \
"lock:Lock a file excluded from version control" \ "lock:Lock a file excluded from version control" \
@ -131,8 +131,6 @@ function __fish_git_extra_coauthor_email
end end
complete -c git -f -n '__fish_git_using_command coauthor; and __fish_git_arg_number 2' -a '(__fish_git_extra_coauthor_name)' complete -c git -f -n '__fish_git_using_command coauthor; and __fish_git_arg_number 2' -a '(__fish_git_extra_coauthor_name)'
complete -c git -f -n '__fish_git_using_command coauthor; and __fish_git_arg_number 3' -a '(__fish_git_extra_coauthor_email)' complete -c git -f -n '__fish_git_using_command coauthor; and __fish_git_arg_number 3' -a '(__fish_git_extra_coauthor_email)'
# commits-since
complete -c git -f -n '__fish_git_using_command commits-since' -s r -l ref -d 'show commits since ref'
# count # count
complete -c git -f -n '__fish_git_using_command count' -l all -d 'detailed commit count' complete -c git -f -n '__fish_git_using_command count' -l all -d 'detailed commit count'
# create-branch # create-branch
@ -162,11 +160,9 @@ complete -c git -f -n '__fish_git_using_command guilt' -s e -l email -d 'display
complete -c git -f -n '__fish_git_using_command guilt' -s d -l debug -d 'output debug information' complete -c git -f -n '__fish_git_using_command guilt' -s d -l debug -d 'output debug information'
complete -c git -f -n '__fish_git_using_command guilt' -s h -d 'output usage information' complete -c git -f -n '__fish_git_using_command guilt' -s h -d 'output usage information'
# ignore # ignore
complete -c git -f -n '__fish_git_using_command ignore' -s l -l local -d 'set context to local gitignore' complete -c git -f -n '__fish_git_using_command ignore' -s l -l local -d 'show local gitignore'
complete -c git -f -n '__fish_git_using_command ignore' -s g -l global -d 'set context to global gitignore' complete -c git -f -n '__fish_git_using_command ignore' -s g -l global -d 'show global gitignore'
complete -c git -f -n '__fish_git_using_command ignore' -s p -l private -d 'set context to private gitignore' complete -c git -f -n '__fish_git_using_command ignore' -s p -l private -d 'show repo gitignore'
complete -c git -f -n '__fish_git_using_command ignore' -s e -l edit -d 'set action to edit'
complete -c git -f -n '__fish_git_using_command ignore' -s r -l remove -d 'set action to remove'
# ignore-io # ignore-io
function __fish_git_extra_get_ignore_io_types function __fish_git_extra_get_ignore_io_types
# we will first remove every tab spaces, and then append `\t` at the end to remove the default description # we will first remove every tab spaces, and then append `\t` at the end to remove the default description

20
etc/test.fish Normal file
View file

@ -0,0 +1,20 @@
complete -e blah
function __fish_git_arg_number -a number
set -l cmd (commandline -opc)
test (count $cmd) -eq $number
end
function __fish_git_extra_coauthor_name
printf '%s\n' 'a' 'apple' 'ann'
end
function __fish_git_extra_coauthor_email
set -l cmd (commandline -opc)
set -l value $cmd[3]
printf '%s\n' 'n' 'n1' 'n2' "$value"
end
complete -c blah -f -n '__fish_git_using_command coauthor; and __fish_git_arg_number 2' -a '(__fish_git_extra_coauthor_name)'
complete -c blah -f -n '__fish_git_using_command coauthor; and __fish_git_arg_number 3' -a '(__fish_git_extra_coauthor_email)'

View file

@ -3,9 +3,7 @@
# #
is_git_repo() { is_git_repo() {
# --git-dir succeeds for both normal and bare repositories, whereas git rev-parse --show-toplevel > /dev/null 2>&1
# --show-toplevel fails inside a bare repository (it has no working tree).
git rev-parse --git-dir > /dev/null 2>&1
result=$? result=$?
if test $result != 0; then if test $result != 0; then
>&2 echo 'Not a git repo!' >&2 echo 'Not a git repo!'

View file

@ -39,34 +39,13 @@ goto :defaultpath
rem remove the last slash rem remove the last slash
SET bindir=%bindir:~0,-1% SET bindir=%bindir:~0,-1%
for %%G in ("%bindir%") do set installdir=%%~dpG for %%G in ("%bindir%") do set installdir=%%~dpG
rem strip a trailing slash so we can inspect the leaf directory name set PREFIX=%installdir%mingw64
if "%installdir:~-1%"=="\" set installdir=%installdir:~0,-1%
rem git.exe found under <GitRoot>\mingw64\bin or <GitRoot>\clangarm64\bin
rem means installdir already is the architecture directory itself
for %%G in ("%installdir%") do set archdir=%%~nxG
if /I "%archdir%"=="mingw64" (
set PREFIX=%installdir%
) else if /I "%archdir%"=="clangarm64" (
set PREFIX=%installdir%
) else if exist "%installdir%\mingw64" (
set PREFIX=%installdir%\mingw64
) else if exist "%installdir%\clangarm64" (
set PREFIX=%installdir%\clangarm64
) else (
set PREFIX=%installdir%\mingw64
)
goto :foundprefix goto :foundprefix
:defaultpath :defaultpath
:: default for Git for Windows 2.x :: default for Git for Windows 2.x
if exist "%ProgramFiles%\Git" ( if exist "%ProgramFiles%\Git" (
if exist "%ProgramFiles%\Git\mingw64" ( set PREFIX=%ProgramFiles%\Git\mingw64
set PREFIX=%ProgramFiles%\Git\mingw64
) else if exist "%ProgramFiles%\Git\clangarm64" (
set PREFIX=%ProgramFiles%\Git\clangarm64
) else (
set PREFIX=%ProgramFiles%\Git\mingw64
)
) )
:foundprefix :foundprefix
@ -76,11 +55,9 @@ IF NOT "%~1"=="" (
REM just supplying the git dir is enough... REM just supplying the git dir is enough...
if exist "%~1\mingw64" ( if exist "%~1\mingw64" (
set PREFIX=%~1\mingw64 set PREFIX=%~1\mingw64
) else if exist "%~1\clangarm64" (
set PREFIX=%~1\clangarm64
) else ( ) else (
echo Using git install path "%~1" as PREFIX, please make sure it's really a echo Using git install path "%~1" as PREFIX, please make sure it's really a
echo path to the mingw64 or clangarm64 directory... echo path to the mingw64 directory...
echo. echo.
SET PREFIX=%~1 SET PREFIX=%~1
) )
@ -95,14 +72,12 @@ set GIT_INSTALL_DIR=!GIT_INSTALL_DIR:"=!
IF %GIT_INSTALL_DIR:~-1%==\ SET GIT_INSTALL_DIR=%GIT_INSTALL_DIR:~0,-1% IF %GIT_INSTALL_DIR:~-1%==\ SET GIT_INSTALL_DIR=%GIT_INSTALL_DIR:~0,-1%
if not exist "%GIT_INSTALL_DIR%\mingw64" ( if not exist "%GIT_INSTALL_DIR%\mingw64" (
if not exist "%GIT_INSTALL_DIR%\clangarm64" ( echo No mingw64 folder found in %GIT_INSTALL_DIR%.
echo No mingw64 or clangarm64 folder found in %GIT_INSTALL_DIR%. echo.
echo. echo Please supply a proper "Git for Windows 2.x" install path:
echo Please supply a proper "Git for Windows 2.x" install path: echo "install.cmd c:\[git-install-path]"
echo "install.cmd c:\[git-install-path]" set ERROR=1
set ERROR=1 goto :exit
goto :exit
)
) )
echo Installing to %PREFIX% echo Installing to %PREFIX%
@ -141,7 +116,7 @@ FOR /R "%GITEXTRAS%\bin" %%i in (*.*) DO (
TYPE "%GITEXTRAS%\helper\reset-env" >> "%PREFIX%\bin\%%~ni" TYPE "%GITEXTRAS%\helper\reset-env" >> "%PREFIX%\bin\%%~ni"
TYPE "%GITEXTRAS%\helper\git-extra-utility" >> "%PREFIX%\bin\%%~ni" TYPE "%GITEXTRAS%\helper\git-extra-utility" >> "%PREFIX%\bin\%%~ni"
TYPE "%GITEXTRAS%\helper\is-git-repo" >> "%PREFIX%\bin\%%~ni" TYPE "%GITEXTRAS%\helper\is-git-repo" >> "%PREFIX%\bin\%%~ni"
REM Added /E option for installation fix on Windows 10.0.17134 and higher REM Added /E option for installation fix on Windows 10.0.17134 and higher
MORE /E +2 "%GITEXTRAS%\bin\%%~ni" >> "%PREFIX%\bin\%%~ni" MORE /E +2 "%GITEXTRAS%\bin\%%~ni" >> "%PREFIX%\bin\%%~ni"
) )
@ -152,7 +127,7 @@ FOR %%i in (%COMMANDS_WITHOUT_REPO%) DO (
ECHO #^^!/usr/bin/env bash > "%PREFIX%\bin\%%i" ECHO #^^!/usr/bin/env bash > "%PREFIX%\bin\%%i"
TYPE "%GITEXTRAS%\helper\reset-env" >> "%PREFIX%\bin\%%i" TYPE "%GITEXTRAS%\helper\reset-env" >> "%PREFIX%\bin\%%i"
TYPE "%GITEXTRAS%\helper\git-extra-utility" >> "%PREFIX%\bin\%%i" TYPE "%GITEXTRAS%\helper\git-extra-utility" >> "%PREFIX%\bin\%%i"
REM Added /E option for installation fix on Windows 10.0.17134 and higher REM Added /E option for installation fix on Windows 10.0.17134 and higher
MORE /E +2 "%GITEXTRAS%\bin\%%i" >> "%PREFIX%\bin\%%i" MORE /E +2 "%GITEXTRAS%\bin\%%i" >> "%PREFIX%\bin\%%i"
) )

View file

@ -1,6 +1,6 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn-NG/v0.9.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/apjanke/ronn-ng/tree/0.9.1
.TH "GIT\-ARCHIVE\-FILE" "1" "March 2026" "" "Git Extras" .TH "GIT\-ARCHIVE\-FILE" "1" "May 2020" "" "Git Extras"
.SH "NAME" .SH "NAME"
\fBgit\-archive\-file\fR \- Export the current HEAD of the git repository to an archive \fBgit\-archive\-file\fR \- Export the current HEAD of the git repository to an archive
.SH "SYNOPSIS" .SH "SYNOPSIS"
@ -14,11 +14,11 @@ Archive naming conventions:
.P .P
On any branch: \fBgit\-extras\.1\.7\.0\-110\-gafefba7\.branch\-name\.zip\fR On any branch: \fBgit\-extras\.1\.7\.0\-110\-gafefba7\.branch\-name\.zip\fR
.P .P
On the default branch: \fBgit\-extras\.1\.7\.0\-110\-gafefba7\.zip\fR On master branch: \fBgit\-extras\.1\.7\.0\-110\-gafefba7\.zip\fR
.P .P
On a detached HEAD (e\.g\. a tag): \fBgit\-extras\.1\.7\.0\.zip\fR On a detached HEAD (e\.g\. a tag): \fBgit\-extras\.1\.7\.0\.zip\fR
.P .P
The '/' and '\e' in the branch name will be converted into '\-'\. The \'/\' and \'\e\' in the branch name will be converted into \'\-\'\.
.SH "AUTHOR" .SH "AUTHOR"
Written by Philipp Klose <\fIme@thehippo\.de\fR> Written by Philipp Klose <\fIme@thehippo\.de\fR>
.SH "REPORTING BUGS" .SH "REPORTING BUGS"

View file

@ -1,8 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' content='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>
<title>git-archive-file(1) - Export the current HEAD of the git repository to an archive</title> <title>git-archive-file(1) - Export the current HEAD of the git repository to an archive</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
@ -93,7 +93,7 @@
<p>On any branch: <code>git-extras.1.7.0-110-gafefba7.branch-name.zip</code></p> <p>On any branch: <code>git-extras.1.7.0-110-gafefba7.branch-name.zip</code></p>
<p>On the default branch: <code>git-extras.1.7.0-110-gafefba7.zip</code></p> <p>On master branch: <code>git-extras.1.7.0-110-gafefba7.zip</code></p>
<p>On a detached HEAD (e.g. a tag): <code>git-extras.1.7.0.zip</code></p> <p>On a detached HEAD (e.g. a tag): <code>git-extras.1.7.0.zip</code></p>
@ -113,7 +113,7 @@
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>March 2026</li> <li class='tc'>May 2020</li>
<li class='tr'>git-archive-file(1)</li> <li class='tr'>git-archive-file(1)</li>
</ol> </ol>

View file

@ -20,7 +20,7 @@ Archive naming conventions:
On any branch: `git-extras.1.7.0-110-gafefba7.branch-name.zip` On any branch: `git-extras.1.7.0-110-gafefba7.branch-name.zip`
On the default branch: `git-extras.1.7.0-110-gafefba7.zip` On master branch: `git-extras.1.7.0-110-gafefba7.zip`
On a detached HEAD (e.g. a tag): `git-extras.1.7.0.zip` On a detached HEAD (e.g. a tag): `git-extras.1.7.0.zip`

View file

@ -1,23 +1,34 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn/v0.7.3
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/rtomayko/ronn/tree/0.7.3
.TH "GIT\-BROWSE\-CI" "1" "March 2026" "" "Git Extras" .
.TH "GIT\-BROWSE\-CI" "1" "March 2022" "" "Git Extras"
.
.SH "NAME" .SH "NAME"
\fBgit\-browse\-ci\fR \- View the CI page for the current repository \fBgit\-browse\-ci\fR \-
.
.SH "SYNOPSIS" .SH "SYNOPSIS"
\fBgit\-browse\-ci\fR [<remote_name>] \fBgit\-browse\-ci\fR [remote_name]
.
.SH "DESCRIPTION" .SH "DESCRIPTION"
Opens the current git repository CI page in your default web browser\. Opens the current git repository CI page in your default web browser\.
.
.SH "OPTIONS" .SH "OPTIONS"
<remote_name> <remote_name>
.
.P .P
The name of the remote you wish to browse to\. Defaults to the current branch's configured remote, or \fBorigin\fR if not specified\. The name of the remote you wish to browse to\. Defaults to the first remote if not specified\.
.
.SH "EXAMPLES" .SH "EXAMPLES"
$ git browse\-ci $ git browse\-ci
.
.P .P
$ git browse\-ci upstream $ git browse\-ci upstream
.
.SH "AUTHOR" .SH "AUTHOR"
Written by Peter Benjamin <\fIhttps://github\.com/pbnj\fR> Written by Peter Benjamin <\fIhttps://github\.com/pbnj\fR>
.
.SH "REPORTING BUGS" .SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR> <\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO" .SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR> <\fIhttps://github\.com/tj/git\-extras\fR>

View file

@ -1,9 +1,9 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-browse-ci(1) - View the CI page for the current repository</title> <title>git-browse-ci(1) - &lt;View the web page for the current repository&gt;</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
body#manpage {margin:0} body#manpage {margin:0}
@ -69,15 +69,14 @@
<li class='tr'>git-browse-ci(1)</li> <li class='tr'>git-browse-ci(1)</li>
</ol> </ol>
<h2 id="NAME">NAME</h2>
<h2 id="NAME">NAME</h2>
<p class="man-name"> <p class="man-name">
<code>git-browse-ci</code> - <span class="man-whatis">View the CI page for the current repository</span> <code>git-browse-ci</code> - <span class="man-whatis"><view the web page for current repository /></span>
</p> </p>
<h2 id="SYNOPSIS">SYNOPSIS</h2> <h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-browse-ci</code> [&lt;remote_name&gt;]</p> <p><code>git-browse-ci</code> [remote_name]</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2> <h2 id="DESCRIPTION">DESCRIPTION</h2>
@ -87,14 +86,14 @@
<p>&lt;remote_name&gt;</p> <p>&lt;remote_name&gt;</p>
<p>The name of the remote you wish to browse to. Defaults to the current <p>The name of the remote you wish to browse to. Defaults to
branch's configured remote, or <code>origin</code> if not specified.</p> the first remote if not specified.</p>
<h2 id="EXAMPLES">EXAMPLES</h2> <h2 id="EXAMPLES">EXAMPLES</h2>
<p>$ git browse-ci</p> <p> $ git browse-ci</p>
<p>$ git browse-ci upstream</p> <p> $ git browse-ci upstream</p>
<h2 id="AUTHOR">AUTHOR</h2> <h2 id="AUTHOR">AUTHOR</h2>
@ -108,9 +107,10 @@ branch's configured remote, or <code>origin</code> if not specified.</p>
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p> <p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>March 2026</li> <li class='tc'>March 2022</li>
<li class='tr'>git-browse-ci(1)</li> <li class='tr'>git-browse-ci(1)</li>
</ol> </ol>

View file

@ -1,9 +1,9 @@
git-browse-ci(1) -- View the CI page for the current repository git-browse-ci(1) -- <View the web page for the current repository>
================================ ================================
## SYNOPSIS ## SYNOPSIS
`git-browse-ci` [&lt;remote_name&gt;] `git-browse-ci` [remote_name]
## DESCRIPTION ## DESCRIPTION
@ -13,8 +13,8 @@ Opens the current git repository CI page in your default web browser.
&lt;remote_name&gt; &lt;remote_name&gt;
The name of the remote you wish to browse to. Defaults to the current The name of the remote you wish to browse to. Defaults to
branch's configured remote, or `origin` if not specified. the first remote if not specified.
## EXAMPLES ## EXAMPLES

View file

@ -1,41 +1,61 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn/v0.7.3
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/rtomayko/ronn/tree/0.7.3
.TH "GIT\-BROWSE" "1" "March 2026" "" "Git Extras" .
.TH "GIT\-BROWSE" "1" "June 2022" "" "Git Extras"
.
.SH "NAME" .SH "NAME"
\fBgit\-browse\fR \- View the web page for the current repository \fBgit\-browse\fR \-
.
.SH "SYNOPSIS" .SH "SYNOPSIS"
\fBgit\-browse\fR [REMOTE\-NAME] [FILE\-NAME] [LINE\-1] [LINE\-2] \fBgit\-browse\fR [remote_name] [file_name] [line_1] [line_2]
.
.SH "DESCRIPTION" .SH "DESCRIPTION"
Opens the current git repository website in your default web browser\. Opens the current git repository website in your default web browser\.
.
.SH "OPTIONS" .SH "OPTIONS"
REMOTE\-NAME <remote_name>
.
.P .P
The name of the remote you wish to browse to\. Defaults to the first remote if not specified\. The name of the remote you wish to browse to\. Defaults to the first remote if not specified\.
.
.P .P
FILE\-NAME <file_name>
.
.P .P
The name of the file you wish to browse to\. The name of the file you wish to browse to\.
.
.P .P
LINE\-1 <line_1>
.
.P .P
The line number of the file you wish to browse to\. The line number of the file you wish to browse to\.
.
.P .P
LINE\-2 <line_2>
.
.P .P
The line range (from LINE\-1 to LINE\-2) of the file you wish to browse to\. The line range (from <line_1> to <line_2>) of the file you wish to browse to\.
.
.SH "EXAMPLES" .SH "EXAMPLES"
$ git browse $ git browse
.
.P .P
$ git browse upstream $ git browse upstream
.
.P .P
$ git browse upstream bin/git\-browse $ git browse upstream bin/git\-browse
.
.P .P
$ git browse upstream bin/git\-browse 42 $ git browse upstream bin/git\-browse 42
.
.P .P
$ git browse upstream bin/git\-browse 1 42 $ git browse upstream bin/git\-browse 1 42
.
.SH "AUTHOR" .SH "AUTHOR"
Written by Mark Pitman <\fIhttps://github\.com/mapitman\fR> Written by Mark Pitman <\fIhttps://github\.com/mapitman\fR>
.
.SH "REPORTING BUGS" .SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR> <\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO" .SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR> <\fIhttps://github\.com/tj/git\-extras\fR>

View file

@ -1,9 +1,9 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-browse(1) - View the web page for the current repository</title> <title>git-browse(1) - &lt;View the web page for the current repository&gt;</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
body#manpage {margin:0} body#manpage {margin:0}
@ -69,15 +69,14 @@
<li class='tr'>git-browse(1)</li> <li class='tr'>git-browse(1)</li>
</ol> </ol>
<h2 id="NAME">NAME</h2>
<h2 id="NAME">NAME</h2>
<p class="man-name"> <p class="man-name">
<code>git-browse</code> - <span class="man-whatis">View the web page for the current repository</span> <code>git-browse</code> - <span class="man-whatis"><view the web page for current repository /></span>
</p> </p>
<h2 id="SYNOPSIS">SYNOPSIS</h2> <h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-browse</code> [REMOTE-NAME] [FILE-NAME] [LINE-1] [LINE-2]</p> <p><code>git-browse</code> [remote_name] [file_name] [line_1] [line_2]</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2> <h2 id="DESCRIPTION">DESCRIPTION</h2>
@ -85,35 +84,35 @@
<h2 id="OPTIONS">OPTIONS</h2> <h2 id="OPTIONS">OPTIONS</h2>
<p>REMOTE-NAME</p> <p>&lt;remote_name&gt;</p>
<p>The name of the remote you wish to browse to. Defaults to <p>The name of the remote you wish to browse to. Defaults to
the first remote if not specified.</p> the first remote if not specified.</p>
<p>FILE-NAME</p> <p>&lt;file_name&gt;</p>
<p>The name of the file you wish to browse to.</p> <p>The name of the file you wish to browse to.</p>
<p>LINE-1</p> <p>&lt;line_1&gt;</p>
<p>The line number of the file you wish to browse to.</p> <p>The line number of the file you wish to browse to.</p>
<p>LINE-2</p> <p>&lt;line_2&gt;</p>
<p>The line range (from LINE-1 to LINE-2) of the file you wish to <p>The line range (from &lt;line_1&gt; to &lt;line_2&gt;) of the file you wish to
browse to.</p> browse to.</p>
<h2 id="EXAMPLES">EXAMPLES</h2> <h2 id="EXAMPLES">EXAMPLES</h2>
<p>$ git browse</p> <p> $ git browse</p>
<p>$ git browse upstream</p> <p> $ git browse upstream</p>
<p>$ git browse upstream bin/git-browse</p> <p> $ git browse upstream bin/git-browse</p>
<p>$ git browse upstream bin/git-browse 42</p> <p> $ git browse upstream bin/git-browse 42</p>
<p>$ git browse upstream bin/git-browse 1 42</p> <p> $ git browse upstream bin/git-browse 1 42</p>
<h2 id="AUTHOR">AUTHOR</h2> <h2 id="AUTHOR">AUTHOR</h2>
@ -127,9 +126,10 @@ browse to.</p>
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p> <p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>March 2026</li> <li class='tc'>June 2022</li>
<li class='tr'>git-browse(1)</li> <li class='tr'>git-browse(1)</li>
</ol> </ol>

View file

@ -1,9 +1,9 @@
git-browse(1) -- View the web page for the current repository git-browse(1) -- <View the web page for the current repository>
================================ ================================
## SYNOPSIS ## SYNOPSIS
`git-browse` [REMOTE-NAME] [FILE-NAME] [LINE-1] [LINE-2] `git-browse` [remote_name] [file_name] [line_1] [line_2]
## DESCRIPTION ## DESCRIPTION
@ -11,22 +11,22 @@ Opens the current git repository website in your default web browser.
## OPTIONS ## OPTIONS
REMOTE-NAME &lt;remote_name&gt;
The name of the remote you wish to browse to. Defaults to The name of the remote you wish to browse to. Defaults to
the first remote if not specified. the first remote if not specified.
FILE-NAME &lt;file_name&gt;
The name of the file you wish to browse to. The name of the file you wish to browse to.
LINE-1 &lt;line_1&gt;
The line number of the file you wish to browse to. The line number of the file you wish to browse to.
LINE-2 &lt;line_2&gt;
The line range (from LINE-1 to LINE-2) of the file you wish to The line range (from &lt;line_1&gt; to &lt;line_2&gt;) of the file you wish to
browse to. browse to.
## EXAMPLES ## EXAMPLES

View file

@ -1,24 +1,27 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn-NG/v0.9.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/apjanke/ronn-ng/tree/0.9.1
.TH "GIT\-BULK" "1" "March 2026" "" "Git Extras" .TH "GIT\-BULK" "1" "September 2024" "" "Git Extras"
.SH "NAME" .SH "NAME"
\fBgit\-bulk\fR \- Run git commands on multiple repositories \fBgit\-bulk\fR \- Run git commands on multiple repositories
.SH "SYNOPSIS" .SH "SYNOPSIS"
.nf \fBgit\-bulk\fR [\-g] ([\-a]|[\-w
git\-bulk [\-q|\-\-quiet] [\-g] [\-\-no\-follow\-symlinks] [\-\-no\-follow\-hidden] ([\-a]|[\-w WS\-NAME]) GIT\-COMMAND .br
git\-bulk \-\-addworkspace WS\-NAME WS\-ROOT\-DIRECTORY (\-\-from URL\-OR\-FILE) \fBgit\-bulk\fR \-\-addworkspace
git\-bulk \-\-removeworkspace WS\-NAME .br
git\-bulk \-\-addcurrent WS\-NAME \fBgit\-bulk\fR \-\-removeworkspace <ws\-name>
git\-bulk \-\-purge .br
git\-bulk \-\-listall \fBgit\-bulk\fR \-\-addcurrent <ws\-name>
.fi .br
\fBgit\-bulk\fR \-\-purge
.br
\fBgit\-bulk\fR \-\-listall
.SH "DESCRIPTION" .SH "DESCRIPTION"
git bulk adds convenient support for operations that you want to execute on multiple git repositories\. git bulk adds convenient support for operations that you want to execute on multiple git repositories\.
.IP "\(bu" 4 .IP "\[ci]" 4
simply register workspaces that contain multiple git repos in their directory structure simply register workspaces that contain multiple git repos in their directory structure
.IP "\(bu" 4 .IP "\[ci]" 4
run any git command on the repositories of the registered workspaces in one command to \fBgit bulk\fR run any git command on the repositories of the registered workspaces in one command to \fBgit bulk\fR
.IP "\(bu" 4 .IP "\[ci]" 4
use the "guarded mode" to check on each execution use the "guarded mode" to check on each execution
.IP "" 0 .IP "" 0
.SH "OPTIONS" .SH "OPTIONS"
@ -30,35 +33,27 @@ Run a git command on all workspaces and their repositories\.
.P .P
Ask the user for confirmation on every execution\. Ask the user for confirmation on every execution\.
.P .P
\-\-no\-follow\-symlinks \-w <ws\-name>
.P
Do not traverse symbolic links under the workspace when searching for git repositories\.
.P
\-\-no\-follow\-hidden
.P
Do not traverse hidden (dotted) directories under the workspace when searching for git repositories\.
.P
\-w WS\-NAME
.P .P
Run the git command on the specified workspace\. The workspace must be registered\. Run the git command on the specified workspace\. The workspace must be registered\.
.P .P
GIT\-COMMAND <git command>
.P .P
Any git Command you wish to execute on the repositories\. Any git Command you wish to execute on the repositories\.
.P .P
\-\-addworkspace WS\-NAME WS\-ROOT\-DIRECTORY (\-\-from URL\-OR\-FILE) \-\-addworkspace
.P .P
Register a workspace for bulk operations\. All repositories in the directories below WS\-ROOT\-DIRECTORY get registered under this workspace with the name WS\-NAME\. WS\-ROOT\-DIRECTORY must be an absolute path\. Register a workspace for bulk operations\. All repositories in the directories below <ws\-root\-directory> get registered under this workspace with the name <ws\-name>\. <ws\-root\-directory> must be absolute path\.
.P .P
With option '\-\-from' the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace\. Suitable for the initial setup of a multi\-repo project\. With option '\-\-from' the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace\. Suitable for the initial setup of a multi\-repo project\.
.P .P
\-\-removeworkspace WS\-NAME \-\-removeworkspace <ws\-name>
.P .P
Remove the workspace with the logical name WS\-NAME\. Remove the workspace with the logical name <ws\-name>\.
.P .P
\-\-addcurrent WS\-NAME \-\-addcurrent <ws\-name>
.P .P
Adds the current directory as workspace to git bulk operations\. The workspace is referenced with its logical name WS\-NAME\. Adds the current directory as workspace to git bulk operations\. The workspace is referenced with its logical name <ws\-name>\.
.P .P
git bulk \-\-purge git bulk \-\-purge
.P .P
@ -69,14 +64,10 @@ git bulk \-\-listall
List all registered repositories\. List all registered repositories\.
.SH "EXAMPLES" .SH "EXAMPLES"
.nf .nf
Register a workspace so that git bulk knows about it using an absolute path: Register a workspace so that git bulk knows about it:
$ git bulk \-\-addworkspace personal ~/workspaces/personal $ git bulk \-\-addworkspace personal ~/workspaces/personal
Or register a workspace using an environment variable pointing to an absolute path:
$ git bulk \-\-addworkspace personal '$PERSONAL_WORKSPACE'
Use option \-\-from in order to directly clone a repository or multiple repositories Use option \-\-from in order to directly clone a repository or multiple repositories
$ git bulk \-\-addworkspace personal ~/workspaces/personal \-\-from https://github\.com/tj/git\-extras\.git $ git bulk \-\-addworkspace personal ~/workspaces/personal \-\-from https://github\.com/tj/git\-extras\.git
@ -117,10 +108,6 @@ Remove all registered workspaces:
$ git bulk \-\-purge $ git bulk \-\-purge
.fi .fi
.SH "FILES"
.IP "\(bu" 4
\fB\.gitconfig\fR: Store the \fBgit\-bulk\fR registered workspaces under the \fBbulkworkspaces\fR key\.
.IP "" 0
.SH "AUTHOR" .SH "AUTHOR"
Written by Niklas Schlimm <\fIns103@hotmail\.de\fR> Written by Niklas Schlimm <\fIns103@hotmail\.de\fR>
.SH "REPORTING BUGS" .SH "REPORTING BUGS"

View file

@ -1,8 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' content='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>
<title>git-bulk(1) - Run git commands on multiple repositories</title> <title>git-bulk(1) - Run git commands on multiple repositories</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
@ -58,7 +58,6 @@
<a href="#DESCRIPTION">DESCRIPTION</a> <a href="#DESCRIPTION">DESCRIPTION</a>
<a href="#OPTIONS">OPTIONS</a> <a href="#OPTIONS">OPTIONS</a>
<a href="#EXAMPLES">EXAMPLES</a> <a href="#EXAMPLES">EXAMPLES</a>
<a href="#FILES">FILES</a>
<a href="#AUTHOR">AUTHOR</a> <a href="#AUTHOR">AUTHOR</a>
<a href="#REPORTING-BUGS">REPORTING BUGS</a> <a href="#REPORTING-BUGS">REPORTING BUGS</a>
<a href="#SEE-ALSO">SEE ALSO</a> <a href="#SEE-ALSO">SEE ALSO</a>
@ -78,13 +77,12 @@
</p> </p>
<h2 id="SYNOPSIS">SYNOPSIS</h2> <h2 id="SYNOPSIS">SYNOPSIS</h2>
<pre><code>git-bulk [-q|--quiet] [-g] [--no-follow-symlinks] [--no-follow-hidden] ([-a]|[-w WS-NAME]) GIT-COMMAND <p><code>git-bulk</code> [-g] ([-a]|[-w <ws-name>]) <git command> </git></ws-name><br>
git-bulk --addworkspace WS-NAME WS-ROOT-DIRECTORY (--from URL-OR-FILE) <code>git-bulk</code> --addworkspace <ws-name> <ws-root-directory> (--from <url or file>) </url></ws-root-directory></ws-name><br>
git-bulk --removeworkspace WS-NAME <code>git-bulk</code> --removeworkspace &lt;ws-name&gt; <br>
git-bulk --addcurrent WS-NAME <code>git-bulk</code> --addcurrent &lt;ws-name&gt; <br>
git-bulk --purge <code>git-bulk</code> --purge <br>
git-bulk --listall <code>git-bulk</code> --listall</p>
</code></pre>
<h2 id="DESCRIPTION">DESCRIPTION</h2> <h2 id="DESCRIPTION">DESCRIPTION</h2>
@ -107,35 +105,27 @@ git-bulk --listall
<p>Ask the user for confirmation on every execution.</p> <p>Ask the user for confirmation on every execution.</p>
<p>--no-follow-symlinks</p> <p>-w &lt;ws-name&gt;</p>
<p>Do not traverse symbolic links under the workspace when searching for git repositories.</p>
<p>--no-follow-hidden</p>
<p>Do not traverse hidden (dotted) directories under the workspace when searching for git repositories.</p>
<p>-w WS-NAME</p>
<p>Run the git command on the specified workspace. The workspace must be registered.</p> <p>Run the git command on the specified workspace. The workspace must be registered.</p>
<p>GIT-COMMAND</p> <p>&lt;git command&gt;</p>
<p>Any git Command you wish to execute on the repositories.</p> <p>Any git Command you wish to execute on the repositories.</p>
<p>--addworkspace WS-NAME WS-ROOT-DIRECTORY (--from URL-OR-FILE)</p> <p>--addworkspace <ws-name> <ws-root-directory> (--from <url or file></url></ws-root-directory></ws-name></p>
<p>Register a workspace for bulk operations. All repositories in the directories below WS-ROOT-DIRECTORY get registered under this workspace with the name WS-NAME. WS-ROOT-DIRECTORY must be an absolute path.</p> <p>Register a workspace for bulk operations. All repositories in the directories below &lt;ws-root-directory&gt; get registered under this workspace with the name &lt;ws-name&gt;. &lt;ws-root-directory&gt; must be absolute path.</p>
<p>With option '--from' the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace. Suitable for the initial setup of a multi-repo project.</p> <p>With option '--from' the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace. Suitable for the initial setup of a multi-repo project.</p>
<p>--removeworkspace WS-NAME</p> <p>--removeworkspace &lt;ws-name&gt;</p>
<p>Remove the workspace with the logical name WS-NAME.</p> <p>Remove the workspace with the logical name &lt;ws-name&gt;.</p>
<p>--addcurrent WS-NAME</p> <p>--addcurrent &lt;ws-name&gt;</p>
<p>Adds the current directory as workspace to git bulk operations. The workspace is referenced with its logical name WS-NAME.</p> <p>Adds the current directory as workspace to git bulk operations. The workspace is referenced with its logical name &lt;ws-name&gt;.</p>
<p>git bulk --purge</p> <p>git bulk --purge</p>
@ -147,14 +137,10 @@ git-bulk --listall
<h2 id="EXAMPLES">EXAMPLES</h2> <h2 id="EXAMPLES">EXAMPLES</h2>
<pre><code>Register a workspace so that git bulk knows about it using an absolute path: <pre><code>Register a workspace so that git bulk knows about it:
$ git bulk --addworkspace personal ~/workspaces/personal $ git bulk --addworkspace personal ~/workspaces/personal
Or register a workspace using an environment variable pointing to an absolute path:
$ git bulk --addworkspace personal '$PERSONAL_WORKSPACE'
Use option --from in order to directly clone a repository or multiple repositories Use option --from in order to directly clone a repository or multiple repositories
$ git bulk --addworkspace personal ~/workspaces/personal --from https://github.com/tj/git-extras.git $ git bulk --addworkspace personal ~/workspaces/personal --from https://github.com/tj/git-extras.git
@ -196,13 +182,6 @@ Remove all registered workspaces:
$ git bulk --purge $ git bulk --purge
</code></pre> </code></pre>
<h2 id="FILES">FILES</h2>
<ul>
<li>
<code>.gitconfig</code>: Store the <code>git-bulk</code> registered workspaces under the <code>bulkworkspaces</code> key.</li>
</ul>
<h2 id="AUTHOR">AUTHOR</h2> <h2 id="AUTHOR">AUTHOR</h2>
<p>Written by Niklas Schlimm &lt;<a href="mailto:ns103@hotmail.de" data-bare-link="true">ns103@hotmail.de</a>&gt;</p> <p>Written by Niklas Schlimm &lt;<a href="mailto:ns103@hotmail.de" data-bare-link="true">ns103@hotmail.de</a>&gt;</p>
@ -217,7 +196,7 @@ $ git bulk --purge
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>March 2026</li> <li class='tc'>September 2024</li>
<li class='tr'>git-bulk(1)</li> <li class='tr'>git-bulk(1)</li>
</ol> </ol>

View file

@ -3,12 +3,12 @@ git-bulk(1) -- Run git commands on multiple repositories
## SYNOPSIS ## SYNOPSIS
git-bulk [-q|--quiet] [-g] [--no-follow-symlinks] [--no-follow-hidden] ([-a]|[-w WS-NAME]) GIT-COMMAND `git-bulk` [-g] ([-a]|[-w &lt;ws-name&gt;]) &lt;git command&gt; <br/>
git-bulk --addworkspace WS-NAME WS-ROOT-DIRECTORY (--from URL-OR-FILE) `git-bulk` --addworkspace &lt;ws-name&gt; &lt;ws-root-directory&gt; (--from &lt;URL or file&gt;) <br/>
git-bulk --removeworkspace WS-NAME `git-bulk` --removeworkspace &lt;ws-name&gt; <br/>
git-bulk --addcurrent WS-NAME `git-bulk` --addcurrent &lt;ws-name&gt; <br/>
git-bulk --purge `git-bulk` --purge <br/>
git-bulk --listall `git-bulk` --listall
## DESCRIPTION ## DESCRIPTION
@ -28,35 +28,27 @@ git bulk adds convenient support for operations that you want to execute on mult
Ask the user for confirmation on every execution. Ask the user for confirmation on every execution.
--no-follow-symlinks -w &lt;ws-name&gt;
Do not traverse symbolic links under the workspace when searching for git repositories.
--no-follow-hidden
Do not traverse hidden (dotted) directories under the workspace when searching for git repositories.
-w WS-NAME
Run the git command on the specified workspace. The workspace must be registered. Run the git command on the specified workspace. The workspace must be registered.
GIT-COMMAND &lt;git command&gt;
Any git Command you wish to execute on the repositories. Any git Command you wish to execute on the repositories.
--addworkspace WS-NAME WS-ROOT-DIRECTORY (--from URL-OR-FILE) --addworkspace &lt;ws-name&gt; &lt;ws-root-directory&gt; (--from &lt;URL or file&rt;gt;)
Register a workspace for bulk operations. All repositories in the directories below WS-ROOT-DIRECTORY get registered under this workspace with the name WS-NAME. WS-ROOT-DIRECTORY must be an absolute path. Register a workspace for bulk operations. All repositories in the directories below &lt;ws-root-directory&gt; get registered under this workspace with the name &lt;ws-name&gt;. &lt;ws-root-directory&gt; must be absolute path.
With option '--from' the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace. Suitable for the initial setup of a multi-repo project. With option '--from' the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace. Suitable for the initial setup of a multi-repo project.
--removeworkspace WS-NAME --removeworkspace &lt;ws-name&gt;
Remove the workspace with the logical name WS-NAME. Remove the workspace with the logical name &lt;ws-name&gt;.
--addcurrent WS-NAME --addcurrent &lt;ws-name&gt;
Adds the current directory as workspace to git bulk operations. The workspace is referenced with its logical name WS-NAME. Adds the current directory as workspace to git bulk operations. The workspace is referenced with its logical name &lt;ws-name&gt;.
git bulk --purge git bulk --purge
@ -68,14 +60,10 @@ git bulk adds convenient support for operations that you want to execute on mult
## EXAMPLES ## EXAMPLES
Register a workspace so that git bulk knows about it using an absolute path: Register a workspace so that git bulk knows about it:
$ git bulk --addworkspace personal ~/workspaces/personal $ git bulk --addworkspace personal ~/workspaces/personal
Or register a workspace using an environment variable pointing to an absolute path:
$ git bulk --addworkspace personal '$PERSONAL_WORKSPACE'
Use option --from in order to directly clone a repository or multiple repositories Use option --from in order to directly clone a repository or multiple repositories
$ git bulk --addworkspace personal ~/workspaces/personal --from https://github.com/tj/git-extras.git $ git bulk --addworkspace personal ~/workspaces/personal --from https://github.com/tj/git-extras.git
@ -116,10 +104,6 @@ git bulk adds convenient support for operations that you want to execute on mult
$ git bulk --purge $ git bulk --purge
## FILES
- `.gitconfig`: Store the `git-bulk` registered workspaces under the `bulkworkspaces` key.
## AUTHOR ## AUTHOR
Written by Niklas Schlimm &lt;<ns103@hotmail.de>&gt; Written by Niklas Schlimm &lt;<ns103@hotmail.de>&gt;

View file

@ -1,52 +1,57 @@
.\" generated with Ronn-NG/v0.9.1 .\" generated with Ronn/v0.7.3
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1 .\" http://github.com/rtomayko/ronn/tree/0.7.3
.TH "GIT\-COMMITS\-SINCE" "1" "January 2026" "" "Git Extras" .
.TH "GIT\-COMMITS\-SINCE" "1" "October 2017" "" "Git Extras"
.
.SH "NAME" .SH "NAME"
\fBgit\-commits\-since\fR \- Show commit logs since some date \fBgit\-commits\-since\fR \- Show commit logs since some date
.
.SH "SYNOPSIS" .SH "SYNOPSIS"
.TS \fBgit\-commits\-since\fR [<date>]
allbox; .
\fBgit\-commits\-since\fR [\-r \-\-ref <ref>] [<date>]
.TE
.SH "DESCRIPTION" .SH "DESCRIPTION"
List of commits since the given \fIdate\fR or \fIref\fR\. List of commits since the given \fIdate\fR\.
.
.SH "OPTIONS" .SH "OPTIONS"
<date> <date>
.
.P .P
Show commits more recent than <date>\. By default, the command shows the commit logs since "last week"\. Show commits more recent than \fIdate\fR\. By default, the command shows the commit logs since "last week"\.
.P .
\-r, \-\-ref <ref>
.P
Show commits since the given ref (tag, branch, or commit)\. When specified, the command uses \fBref\.\.HEAD\fR instead of date\-based filtering\.
.SH "EXAMPLES" .SH "EXAMPLES"
It is really flexible and these are only 3 of the options, go ahead give it a try: It is really flexible and these are only 3 of the options, go ahead give it a try:
.
.IP "" 4 .IP "" 4
.
.nf .nf
$ git commits\-since yesterday $ git commits\-since yesterday
aa084d9 TweeKane \- Add global gitignore to git\-ignore output \.\.\. commits since yesterday
515e94a TJ Holowaychuk \- Merge pull request #128 from nickl\-/git\-extras\-html\-hyperlinks nickl\- \- Merge branch upstream master\.
5f86b54 TJ Holowaychuk \- Merge pull request #129 from nickl\-/develop nickl\- \- Rebase bolshakov with master
7398d10 nickl\- \- Fix #127 git\-ignore won\'t add duplicates\. TJ Holowaychuk \- Merge pull request #128 from nickl\-/git\-extras\-html\-hyperlinks
TJ Holowaychuk \- Merge pull request #129 from nickl\-/develop
nickl\- \- Fix #127 git\-ignore won\'t add duplicates\.
$ git commits\-since 3 o clock pm $ git commits\-since 3 o clock pm
aa084d9 TweeKane \- Add global gitignore to git\-ignore output \.\.\. commits since 3 o clock pm
nickl\- \- Merge branch upstream master\.
$ git commits\-since 2 hour ago $ git commits\-since 2 hour ago
aa084d9 TweeKane \- Add global gitignore to git\-ignore output \.\.\. commits since 2 hour ago
515e94a TJ Holowaychuk \- Merge pull request #128 from nickl\-/git\-extras\-html\-hyperlinks nickl\- \- Merge branch upstream master\.
5f86b54 TJ Holowaychuk \- Merge pull request #129 from nickl\-/develop TJ Holowaychuk \- Merge pull request #128 from nickl\-/git\-extras\-html\-hyperlinks
TJ Holowaychuk \- Merge pull request #129 from nickl\-/develop
$ git commits\-since \-\-ref 7\.4\.0 .
6ed2643 John Bachir \- ability to specify command when hitting enter (#1223)
b9bd309 John Bachir \- Improve `git\-repl` prompt (#1224)
6f4cf0c johnpyp \- feat: `delete\-branch` multiple unique branch names completions (#1221)
\|\.\|\.\|\.
215382b 罗泽轩 \- Bump version to 7\.5\.0\-dev (#1207)
.fi .fi
.
.IP "" 0 .IP "" 0
.
.SH "AUTHOR" .SH "AUTHOR"
Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR> Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR>
.
.SH "REPORTING BUGS" .SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR> <\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO" .SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR> <\fIhttps://github\.com/tj/git\-extras\fR>

View file

@ -1,8 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf8'> <meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'> <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-commits-since(1) - Show commit logs since some date</title> <title>git-commits-since(1) - Show commit logs since some date</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
@ -69,67 +69,51 @@
<li class='tr'>git-commits-since(1)</li> <li class='tr'>git-commits-since(1)</li>
</ol> </ol>
<h2 id="NAME">NAME</h2>
<h2 id="NAME">NAME</h2>
<p class="man-name"> <p class="man-name">
<code>git-commits-since</code> - <span class="man-whatis">Show commit logs since some date</span> <code>git-commits-since</code> - <span class="man-whatis">Show commit logs since some date</span>
</p> </p>
<h2 id="SYNOPSIS">SYNOPSIS</h2> <h2 id="SYNOPSIS">SYNOPSIS</h2>
<table> <p><code>git-commits-since</code> [&lt;date&gt;]</p>
<tbody>
<tr>
<td>
<code>git-commits-since</code> [-r</td>
<td>--ref &lt;ref&gt;] [&lt;date&gt;]</td>
</tr>
</tbody>
</table>
<h2 id="DESCRIPTION">DESCRIPTION</h2> <h2 id="DESCRIPTION">DESCRIPTION</h2>
<p>List of commits since the given <em>date</em> or <em>ref</em>.</p> <p> List of commits since the given <em>date</em>.</p>
<h2 id="OPTIONS">OPTIONS</h2> <h2 id="OPTIONS">OPTIONS</h2>
<p>&lt;date&gt;</p> <p> &lt;date&gt;</p>
<p>Show commits more recent than &lt;date&gt;. By default, the command shows the commit logs since "last week".</p> <p> Show commits more recent than <var>date</var>. By default, the command shows the commit logs since "last week".</p>
<p>-r, --ref &lt;ref&gt;</p>
<p>Show commits since the given ref (tag, branch, or commit). When specified, the command uses <code>ref..HEAD</code> instead of date-based filtering.</p>
<h2 id="EXAMPLES">EXAMPLES</h2> <h2 id="EXAMPLES">EXAMPLES</h2>
<p>It is really flexible and these are only 3 of the options, go ahead give it a try:</p> <p> It is really flexible and these are only 3 of the options, go ahead give it a try:</p>
<pre><code>$ git commits-since yesterday <pre><code>$ git commits-since yesterday
aa084d9 TweeKane - Add global gitignore to git-ignore output ... commits since yesterday
515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks nickl- - Merge branch upstream master.
5f86b54 TJ Holowaychuk - Merge pull request #129 from nickl-/develop nickl- - Rebase bolshakov with master
7398d10 nickl- - Fix #127 git-ignore won't add duplicates. TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks
TJ Holowaychuk - Merge pull request #129 from nickl-/develop
nickl- - Fix #127 git-ignore won't add duplicates.
$ git commits-since 3 o clock pm $ git commits-since 3 o clock pm
aa084d9 TweeKane - Add global gitignore to git-ignore output ... commits since 3 o clock pm
nickl- - Merge branch upstream master.
$ git commits-since 2 hour ago $ git commits-since 2 hour ago
aa084d9 TweeKane - Add global gitignore to git-ignore output ... commits since 2 hour ago
515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks nickl- - Merge branch upstream master.
5f86b54 TJ Holowaychuk - Merge pull request #129 from nickl-/develop TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks
TJ Holowaychuk - Merge pull request #129 from nickl-/develop
$ git commits-since --ref 7.4.0
6ed2643 John Bachir - ability to specify command when hitting enter (#1223)
b9bd309 John Bachir - Improve `git-repl` prompt (#1224)
6f4cf0c johnpyp - feat: `delete-branch` multiple unique branch names completions (#1221)
...
215382b 罗泽轩 - Bump version to 7.5.0-dev (#1207)
</code></pre> </code></pre>
<h2 id="AUTHOR">AUTHOR</h2> <h2 id="AUTHOR">AUTHOR</h2>
<p>Written by Tj Holowaychuk &lt;<a href="mailto:tj@vision-media.ca" data-bare-link="true">tj@vision-media.ca</a>&gt;</p> <p>Written by Tj Holowaychuk &lt;<a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#116;&#x6a;&#x40;&#x76;&#105;&#x73;&#x69;&#x6f;&#110;&#45;&#109;&#x65;&#x64;&#105;&#x61;&#x2e;&#99;&#97;" data-bare-link="true">&#x74;&#106;&#64;&#x76;&#x69;&#115;&#105;&#111;&#x6e;&#x2d;&#x6d;&#x65;&#x64;&#x69;&#97;&#46;&#x63;&#97;</a>&gt;</p>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2> <h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
@ -139,9 +123,10 @@ b9bd309 John Bachir - Improve `git-repl` prompt (#1224)
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p> <p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>January 2026</li> <li class='tc'>October 2017</li>
<li class='tr'>git-commits-since(1)</li> <li class='tr'>git-commits-since(1)</li>
</ol> </ol>

View file

@ -3,46 +3,40 @@ git-commits-since(1) -- Show commit logs since some date
## SYNOPSIS ## SYNOPSIS
`git-commits-since` [-r|--ref &lt;ref&gt;] [&lt;date&gt;] `git-commits-since` [&lt;date&gt;]
## DESCRIPTION ## DESCRIPTION
List of commits since the given _date_ or _ref_. List of commits since the given _date_.
## OPTIONS ## OPTIONS
&lt;date&gt; &lt;date&gt;
Show commits more recent than &lt;date&gt;. By default, the command shows the commit logs since "last week". Show commits more recent than <date>. By default, the command shows the commit logs since "last week".
-r, --ref &lt;ref&gt;
Show commits since the given ref (tag, branch, or commit). When specified, the command uses `ref..HEAD` instead of date-based filtering.
## EXAMPLES ## EXAMPLES
It is really flexible and these are only 3 of the options, go ahead give it a try: It is really flexible and these are only 3 of the options, go ahead give it a try:
$ git commits-since yesterday $ git commits-since yesterday
aa084d9 TweeKane - Add global gitignore to git-ignore output ... commits since yesterday
515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks nickl- - Merge branch upstream master.
5f86b54 TJ Holowaychuk - Merge pull request #129 from nickl-/develop nickl- - Rebase bolshakov with master
7398d10 nickl- - Fix #127 git-ignore won't add duplicates. TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks
TJ Holowaychuk - Merge pull request #129 from nickl-/develop
nickl- - Fix #127 git-ignore won't add duplicates.
$ git commits-since 3 o clock pm $ git commits-since 3 o clock pm
aa084d9 TweeKane - Add global gitignore to git-ignore output ... commits since 3 o clock pm
nickl- - Merge branch upstream master.
$ git commits-since 2 hour ago $ git commits-since 2 hour ago
aa084d9 TweeKane - Add global gitignore to git-ignore output ... commits since 2 hour ago
515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks nickl- - Merge branch upstream master.
5f86b54 TJ Holowaychuk - Merge pull request #129 from nickl-/develop TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks
TJ Holowaychuk - Merge pull request #129 from nickl-/develop
$ git commits-since --ref 7.4.0
6ed2643 John Bachir - ability to specify command when hitting enter (#1223)
b9bd309 John Bachir - Improve `git-repl` prompt (#1224)
6f4cf0c johnpyp - feat: `delete-branch` multiple unique branch names completions (#1221)
...
215382b 罗泽轩 - Bump version to 7.5.0-dev (#1207)
## AUTHOR ## AUTHOR

View file

@ -1,19 +0,0 @@
.\" generated with Ronn-NG/v0.8.0
.\" http://github.com/apjanke/ronn-ng/tree/0.8.0
.TH "GIT\-CONTINUE" "1" "November 2024" "" "Git Extras"
.SH "NAME"
\fBgit\-continue\fR \- Continue current git operation
.SH "SYNOPSIS"
\fBgit\-continue\fR
.SH "DESCRIPTION"
Continue current git revert, rebase, merge or cherry\-pick process\.
.SH "OPTIONS"
There are no options, it just continues current operation\.
.SH "EXAMPLES"
\fBgit\-continue\fR
.SH "AUTHOR"
Written by oikarinen
.SH "REPORTING BUGS"
<\fI\%https://github\.com/tj/git\-extras/issues\fR>
.SH "SEE ALSO"
<\fI\%https://github\.com/tj/git\-extras\fR>

View file

@ -1,114 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='content-type' content='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.8.0 (http://github.com/apjanke/ronn-ng/tree/0.8.0)'>
<title>git-continue(1) - Continue current git operation</title>
<style type='text/css' media='all'>
/* style: man */
body#manpage {margin:0}
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
.mp h2 {margin:10px 0 0 0}
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
.mp h3 {margin:0 0 0 4ex}
.mp dt {margin:0;clear:left}
.mp dt.flush {float:left;width:8ex}
.mp dd {margin:0 0 0 9ex}
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
.mp pre {margin-bottom:20px}
.mp pre+h2,.mp pre+h3 {margin-top:22px}
.mp h2+pre,.mp h3+pre {margin-top:5px}
.mp img {display:block;margin:auto}
.mp h1.man-title {display:none}
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
.mp h2 {font-size:16px;line-height:1.25}
.mp h1 {font-size:20px;line-height:2}
.mp {text-align:justify;background:#fff}
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
.mp u {text-decoration:underline}
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
.mp b.man-ref {font-weight:normal;color:#434241}
.mp pre {padding:0 4ex}
.mp pre code {font-weight:normal;color:#434241}
.mp h2+pre,h3+pre {padding-left:0}
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
ol.man-decor {width:100%}
ol.man-decor li.tl {text-align:left}
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
ol.man-decor li.tr {text-align:right;float:right}
</style>
</head>
<!--
The following styles are deprecated and will be removed at some point:
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
.man-navigation should be used instead.
-->
<body id='manpage'>
<div class='mp' id='man'>
<div class='man-navigation' style='display:none'>
<a href="#NAME">NAME</a>
<a href="#SYNOPSIS">SYNOPSIS</a>
<a href="#DESCRIPTION">DESCRIPTION</a>
<a href="#OPTIONS">OPTIONS</a>
<a href="#EXAMPLES">EXAMPLES</a>
<a href="#AUTHOR">AUTHOR</a>
<a href="#REPORTING-BUGS">REPORTING BUGS</a>
<a href="#SEE-ALSO">SEE ALSO</a>
</div>
<ol class='man-decor man-head man head'>
<li class='tl'>git-continue(1)</li>
<li class='tc'>Git Extras</li>
<li class='tr'>git-continue(1)</li>
</ol>
<h2 id="NAME">NAME</h2>
<p class="man-name">
<code>git-continue</code> - <span class="man-whatis">Continue current git operation</span>
</p>
<h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-continue</code></p>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
<p> Continue current git revert, rebase, merge or cherry-pick process.</p>
<h2 id="OPTIONS">OPTIONS</h2>
<p> There are no options, it just continues current operation.</p>
<h2 id="EXAMPLES">EXAMPLES</h2>
<p> <code>git-continue</code></p>
<h2 id="AUTHOR">AUTHOR</h2>
<p>Written by oikarinen</p>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
<p>&lt;<a href="https://github.com/tj/git-extras/issues" data-bare-link="true">https://github.com/tj/git-extras/issues</a>&gt;</p>
<h2 id="SEE-ALSO">SEE ALSO</h2>
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'>
<li class='tl'></li>
<li class='tc'>November 2024</li>
<li class='tr'>git-continue(1)</li>
</ol>
</div>
</body>
</html>

View file

@ -1,30 +0,0 @@
git-continue(1) -- Continue current git operation
================================
## SYNOPSIS
`git-continue`
## DESCRIPTION
Continue current git revert, rebase, merge or cherry-pick process.
## OPTIONS
There are no options, it just continues current operation.
## EXAMPLES
`git-continue`
## AUTHOR
Written by oikarinen
## REPORTING BUGS
&lt;<https://github.com/tj/git-extras/issues>&gt;
## SEE ALSO
&lt;<https://github.com/tj/git-extras>&gt;

View file

@ -1,54 +0,0 @@
.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "GIT\-DELETE\-GONE\-BRANCHES" "1" "March 2026" "" "Git Extras"
.
.SH "NAME"
\fBgit\-delete\-gone\-branches\fR \- Delete branches whose remote is gone
.
.SH "SYNOPSIS"
\fBgit\-delete\-gone\-branches\fR [\-n|\-\-dry\-run] [\-f|\-\-force] [\-p|\-\-prune]
.
.SH "DESCRIPTION"
Deletes all local branches whose remote\-tracking branch has been deleted\. This commonly happens after a pull request is merged and the remote branch is removed\. By default, lists the branches and prompts for confirmation before deleting\.
.
.SH "OPTIONS"
\-n, \-\-dry\-run
.
.P
Show the branches that would be deleted without actually deleting them\.
.
.P
\-f, \-\-force
.
.P
Skip the confirmation prompt and delete branches immediately\.
.
.P
\-p, \-\-prune
.
.P
Run \fBgit fetch \-\-prune\fR before checking for gone branches, to ensure remote\-tracking refs are up to date\.
.
.SH "EXAMPLES"
.
.nf
$ git delete\-gone\-branches
$ git delete\-gone\-branches \-\-dry\-run
$ git delete\-gone\-branches \-\-force
$ git delete\-gone\-branches \-\-prune
.
.fi
.
.SH "AUTHOR"
Written by Utsav Sabharwal <\fIhttps://github\.com/codersofthedark\fR>
.
.SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR>

View file

@ -1,135 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-delete-gone-branches(1) - Delete branches whose remote is gone</title>
<style type='text/css' media='all'>
/* style: man */
body#manpage {margin:0}
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
.mp h2 {margin:10px 0 0 0}
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
.mp h3 {margin:0 0 0 4ex}
.mp dt {margin:0;clear:left}
.mp dt.flush {float:left;width:8ex}
.mp dd {margin:0 0 0 9ex}
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
.mp pre {margin-bottom:20px}
.mp pre+h2,.mp pre+h3 {margin-top:22px}
.mp h2+pre,.mp h3+pre {margin-top:5px}
.mp img {display:block;margin:auto}
.mp h1.man-title {display:none}
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
.mp h2 {font-size:16px;line-height:1.25}
.mp h1 {font-size:20px;line-height:2}
.mp {text-align:justify;background:#fff}
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
.mp u {text-decoration:underline}
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
.mp b.man-ref {font-weight:normal;color:#434241}
.mp pre {padding:0 4ex}
.mp pre code {font-weight:normal;color:#434241}
.mp h2+pre,h3+pre {padding-left:0}
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
ol.man-decor {width:100%}
ol.man-decor li.tl {text-align:left}
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
ol.man-decor li.tr {text-align:right;float:right}
</style>
</head>
<!--
The following styles are deprecated and will be removed at some point:
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
.man-navigation should be used instead.
-->
<body id='manpage'>
<div class='mp' id='man'>
<div class='man-navigation' style='display:none'>
<a href="#NAME">NAME</a>
<a href="#SYNOPSIS">SYNOPSIS</a>
<a href="#DESCRIPTION">DESCRIPTION</a>
<a href="#OPTIONS">OPTIONS</a>
<a href="#EXAMPLES">EXAMPLES</a>
<a href="#AUTHOR">AUTHOR</a>
<a href="#REPORTING-BUGS">REPORTING BUGS</a>
<a href="#SEE-ALSO">SEE ALSO</a>
</div>
<ol class='man-decor man-head man head'>
<li class='tl'>git-delete-gone-branches(1)</li>
<li class='tc'>Git Extras</li>
<li class='tr'>git-delete-gone-branches(1)</li>
</ol>
<h2 id="NAME">NAME</h2>
<p class="man-name">
<code>git-delete-gone-branches</code> - <span class="man-whatis">Delete branches whose remote is gone</span>
</p>
<h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-delete-gone-branches</code> [-n|--dry-run] [-f|--force] [-p|--prune]</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
<p> Deletes all local branches whose remote-tracking branch has been deleted.
This commonly happens after a pull request is merged and the remote branch
is removed. By default, lists the branches and prompts for confirmation
before deleting.</p>
<h2 id="OPTIONS">OPTIONS</h2>
<p> -n, --dry-run</p>
<p> Show the branches that would be deleted without actually deleting them.</p>
<p> -f, --force</p>
<p> Skip the confirmation prompt and delete branches immediately.</p>
<p> -p, --prune</p>
<p> Run <code>git fetch --prune</code> before checking for gone branches, to ensure
remote-tracking refs are up to date.</p>
<h2 id="EXAMPLES">EXAMPLES</h2>
<pre><code>$ git delete-gone-branches
$ git delete-gone-branches --dry-run
$ git delete-gone-branches --force
$ git delete-gone-branches --prune
</code></pre>
<h2 id="AUTHOR">AUTHOR</h2>
<p>Written by Utsav Sabharwal &lt;<a href="&#x6d;&#97;&#105;&#x6c;&#x74;&#111;&#x3a;&#117;&#116;&#115;&#97;&#x76;&#x2e;&#115;&#x61;&#x62;&#x68;&#x61;&#x72;&#x77;&#x61;&#108;&#64;&#115;&#x79;&#x73;&#x64;&#105;&#x67;&#x2e;&#99;&#111;&#x6d;" data-bare-link="true">&#117;&#116;&#115;&#x61;&#x76;&#x2e;&#x73;&#x61;&#x62;&#104;&#97;&#x72;&#x77;&#97;&#108;&#64;&#x73;&#121;&#115;&#x64;&#105;&#103;&#46;&#x63;&#x6f;&#109;</a>&gt;</p>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
<p>&lt;<a href="https://github.com/tj/git-extras/issues" data-bare-link="true">https://github.com/tj/git-extras/issues</a>&gt;</p>
<h2 id="SEE-ALSO">SEE ALSO</h2>
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'>
<li class='tl'></li>
<li class='tc'>March 2026</li>
<li class='tr'>git-delete-gone-branches(1)</li>
</ol>
</div>
</body>
</html>

View file

@ -1,50 +0,0 @@
git-delete-gone-branches(1) -- Delete branches whose remote is gone
====================================================================
## SYNOPSIS
`git-delete-gone-branches` [-n|--dry-run] [-f|--force] [-p|--prune]
## DESCRIPTION
Deletes all local branches whose remote-tracking branch has been deleted.
This commonly happens after a pull request is merged and the remote branch
is removed. By default, lists the branches and prompts for confirmation
before deleting.
## OPTIONS
-n, --dry-run
Show the branches that would be deleted without actually deleting them.
-f, --force
Skip the confirmation prompt and delete branches immediately.
-p, --prune
Run `git fetch --prune` before checking for gone branches, to ensure
remote-tracking refs are up to date.
## EXAMPLES
$ git delete-gone-branches
$ git delete-gone-branches --dry-run
$ git delete-gone-branches --force
$ git delete-gone-branches --prune
## AUTHOR
Written by Utsav Sabharwal &lt;<https://github.com/codersofthedark>&gt;
## REPORTING BUGS
&lt;<https://github.com/tj/git-extras/issues>&gt;
## SEE ALSO
&lt;<https://github.com/tj/git-extras>&gt;

View file

@ -1,19 +1,30 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn/v0.7.3
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/rtomayko/ronn/tree/0.7.3
.TH "GIT\-DELETE\-MERGED\-BRANCHES" "1" "March 2026" "" "Git Extras" .
.TH "GIT\-DELETE\-MERGED\-BRANCHES" "1" "October 2017" "" "Git Extras"
.
.SH "NAME" .SH "NAME"
\fBgit\-delete\-merged\-branches\fR \- Delete merged branches \fBgit\-delete\-merged\-branches\fR \- Delete merged branches
.
.SH "SYNOPSIS" .SH "SYNOPSIS"
\fBgit\-delete\-merged\-branches\fR \fBgit\-delete\-merged\-branches\fR
.
.SH "DESCRIPTION" .SH "DESCRIPTION"
Deletes all branches merged in to current HEAD\. Does not delete the default branch, even if run from a branch that is a descendant of it\. Deletes all branches merged in to current HEAD\. Does not delete \fImaster\fR, even if run from a branch that is a descendant of \fImaster\fR\.
.
.SH "EXAMPLES" .SH "EXAMPLES"
.
.nf .nf
$ git delete\-merged\-branches $ git delete\-merged\-branches
.
.fi .fi
.
.SH "AUTHOR" .SH "AUTHOR"
Written by Jesús Espino <\fIjespinog@gmail\.com\fR> Written by Jesús Espino <\fIjespinog@gmail\.com\fR>
.
.SH "REPORTING BUGS" .SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR> <\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO" .SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR> <\fIhttps://github\.com/tj/git\-extras\fR>

View file

@ -1,8 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-delete-merged-branches(1) - Delete merged branches</title> <title>git-delete-merged-branches(1) - Delete merged branches</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
@ -68,20 +68,19 @@
<li class='tr'>git-delete-merged-branches(1)</li> <li class='tr'>git-delete-merged-branches(1)</li>
</ol> </ol>
<h2 id="NAME">NAME</h2>
<h2 id="NAME">NAME</h2>
<p class="man-name"> <p class="man-name">
<code>git-delete-merged-branches</code> - <span class="man-whatis">Delete merged branches</span> <code>git-delete-merged-branches</code> - <span class="man-whatis">Delete merged branches</span>
</p> </p>
<h2 id="SYNOPSIS">SYNOPSIS</h2> <h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-delete-merged-branches</code></p> <p><code>git-delete-merged-branches</code></p>
<h2 id="DESCRIPTION">DESCRIPTION</h2> <h2 id="DESCRIPTION">DESCRIPTION</h2>
<p>Deletes all branches merged in to current HEAD. Does not delete the default branch, even if run from a branch that is <p> Deletes all branches merged in to current HEAD. Does not delete <em>master</em>, even if run from a branch that is
a descendant of it.</p> a descendant of <em>master</em>.</p>
<h2 id="EXAMPLES">EXAMPLES</h2> <h2 id="EXAMPLES">EXAMPLES</h2>
@ -90,7 +89,7 @@
<h2 id="AUTHOR">AUTHOR</h2> <h2 id="AUTHOR">AUTHOR</h2>
<p>Written by Jesús Espino &lt;<a href="mailto:jespinog@gmail.com" data-bare-link="true">jespinog@gmail.com</a>&gt;</p> <p>Written by Jesús Espino &lt;<a href="&#x6d;&#97;&#105;&#108;&#116;&#111;&#58;&#106;&#x65;&#x73;&#x70;&#105;&#110;&#111;&#x67;&#64;&#x67;&#x6d;&#x61;&#x69;&#108;&#x2e;&#x63;&#111;&#109;" data-bare-link="true">&#x6a;&#x65;&#115;&#112;&#105;&#110;&#x6f;&#x67;&#64;&#x67;&#x6d;&#97;&#x69;&#x6c;&#x2e;&#x63;&#111;&#109;</a>&gt;</p>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2> <h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
@ -100,9 +99,10 @@
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p> <p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>March 2026</li> <li class='tc'>October 2017</li>
<li class='tr'>git-delete-merged-branches(1)</li> <li class='tr'>git-delete-merged-branches(1)</li>
</ol> </ol>

View file

@ -7,8 +7,8 @@ git-delete-merged-branches(1) -- Delete merged branches
## DESCRIPTION ## DESCRIPTION
Deletes all branches merged in to current HEAD. Does not delete the default branch, even if run from a branch that is Deletes all branches merged in to current HEAD. Does not delete *master*, even if run from a branch that is
a descendant of it. a descendant of *master*.
## EXAMPLES ## EXAMPLES

View file

@ -1,29 +1,48 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn/v0.7.3
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/rtomayko/ronn/tree/0.7.3
.TH "GIT\-DELTA" "1" "March 2026" "" "Git Extras" .
.TH "GIT\-DELTA" "1" "October 2017" "" "Git Extras"
.
.SH "NAME" .SH "NAME"
\fBgit\-delta\fR \- Lists changed files \fBgit\-delta\fR \- Lists changed files
.
.SH "SYNOPSIS" .SH "SYNOPSIS"
\fBgit\-delta\fR [<branch>] [<filter>] \fBgit\-delta\fR [<branch>] [<filter>]
.
.SH "DESCRIPTION" .SH "DESCRIPTION"
Lists all files that differ from a branch\. By default, lists files that have been added, copied, or modified as compared to the configured default branch\. Lists all files that differ from a branch\. By default, lists files that have been added, copied, or modified as compared to the \fBmaster\fR branch\.
.
.SH "EXAMPLES" .SH "EXAMPLES"
Lists all modified and renamed files vs\. \fBmain\fR: Lists all modified and renamed files vs\. \fBmaster\fR:
.
.IP "" 4 .IP "" 4
.
.nf .nf
$ git delta main MR
$ git delta master MR
.
.fi .fi
.
.IP "" 0 .IP "" 0
.
.P .P
Lists all deleted files vs\. \fBexample\fR: Lists all deleted files vs\. \fBexample\fR:
.
.IP "" 4 .IP "" 4
.
.nf .nf
$ git delta example D $ git delta example D
.
.fi .fi
.
.IP "" 0 .IP "" 0
.
.SH "AUTHOR" .SH "AUTHOR"
Written by Ivan Malopinsky <\fIhello@imsky\.co\fR> Written by Ivan Malopinsky <\fIhello@imsky\.co\fR>
.
.SH "REPORTING BUGS" .SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR> <\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO" .SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR> <\fIhttps://github\.com/tj/git\-extras\fR>

View file

@ -1,8 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-delta(1) - Lists changed files</title> <title>git-delta(1) - Lists changed files</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
@ -68,35 +68,34 @@
<li class='tr'>git-delta(1)</li> <li class='tr'>git-delta(1)</li>
</ol> </ol>
<h2 id="NAME">NAME</h2>
<h2 id="NAME">NAME</h2>
<p class="man-name"> <p class="man-name">
<code>git-delta</code> - <span class="man-whatis">Lists changed files</span> <code>git-delta</code> - <span class="man-whatis">Lists changed files</span>
</p> </p>
<h2 id="SYNOPSIS">SYNOPSIS</h2> <h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-delta</code> [&lt;branch&gt;] [&lt;filter&gt;]</p> <p><code>git-delta</code> [&lt;branch&gt;] [&lt;filter&gt;]</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2> <h2 id="DESCRIPTION">DESCRIPTION</h2>
<p>Lists all files that differ from a branch. By default, lists files that have been added, copied, or modified as compared to the configured default branch.</p> <p>Lists all files that differ from a branch. By default, lists files that have been added, copied, or modified as compared to the <code>master</code> branch.</p>
<h2 id="EXAMPLES">EXAMPLES</h2> <h2 id="EXAMPLES">EXAMPLES</h2>
<p>Lists all modified and renamed files vs. <code>main</code>:</p> <p> Lists all modified and renamed files vs. <code>master</code>:</p>
<pre><code>$ git delta main MR <pre><code>$ git delta master MR
</code></pre> </code></pre>
<p>Lists all deleted files vs. <code>example</code>:</p> <p> Lists all deleted files vs. <code>example</code>:</p>
<pre><code>$ git delta example D <pre><code>$ git delta example D
</code></pre> </code></pre>
<h2 id="AUTHOR">AUTHOR</h2> <h2 id="AUTHOR">AUTHOR</h2>
<p>Written by Ivan Malopinsky &lt;<a href="mailto:hello@imsky.co" data-bare-link="true">hello@imsky.co</a>&gt;</p> <p>Written by Ivan Malopinsky &lt;<a href="&#109;&#97;&#x69;&#108;&#x74;&#x6f;&#58;&#104;&#x65;&#x6c;&#x6c;&#x6f;&#64;&#x69;&#x6d;&#x73;&#x6b;&#x79;&#46;&#99;&#x6f;" data-bare-link="true">&#x68;&#x65;&#x6c;&#x6c;&#x6f;&#64;&#x69;&#x6d;&#115;&#x6b;&#x79;&#x2e;&#99;&#111;</a>&gt;</p>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2> <h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
@ -106,9 +105,10 @@
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p> <p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>March 2026</li> <li class='tc'>October 2017</li>
<li class='tr'>git-delta(1)</li> <li class='tr'>git-delta(1)</li>
</ol> </ol>

View file

@ -7,13 +7,13 @@ git-delta(1) -- Lists changed files
## DESCRIPTION ## DESCRIPTION
Lists all files that differ from a branch. By default, lists files that have been added, copied, or modified as compared to the configured default branch. Lists all files that differ from a branch. By default, lists files that have been added, copied, or modified as compared to the `master` branch.
## EXAMPLES ## EXAMPLES
Lists all modified and renamed files vs. `main`: Lists all modified and renamed files vs. `master`:
$ git delta main MR $ git delta master MR
Lists all deleted files vs. `example`: Lists all deleted files vs. `example`:

View file

@ -1,6 +1,6 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn-NG/v0.9.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/apjanke/ronn-ng/tree/0.9.1
.TH "GIT\-EXTRAS" "1" "May 2026" "" "Git Extras" .TH "GIT\-EXTRAS" "1" "September 2024" "" "Git Extras"
.SH "NAME" .SH "NAME"
\fBgit\-extras\fR \- Awesome GIT utilities \fBgit\-extras\fR \- Awesome GIT utilities
.SH "SYNOPSIS" .SH "SYNOPSIS"
@ -22,158 +22,152 @@ Self update\.
.P .P
Change the default branch to \fB$BRANCH\fR\. If \fBgit\-extras\.default\-branch\fR isn't set, \fBinit\.defaultBranch\fR is used instead\. If none of them are set it defaults to \fBmain\fR\. Change the default branch to \fB$BRANCH\fR\. If \fBgit\-extras\.default\-branch\fR isn't set, \fBinit\.defaultBranch\fR is used instead\. If none of them are set it defaults to \fBmain\fR\.
.SH "COMMANDS" .SH "COMMANDS"
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-abort(1)\fR Abort current git operation \fBgit\-abort(1)\fR Abort current git operation
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-alias(1)\fR Define, search and show aliases \fBgit\-alias(1)\fR Define, search and show aliases
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-archive\-file(1)\fR Export the current HEAD of the git repository to an archive \fBgit\-archive\-file(1)\fR Export the current HEAD of the git repository to an archive
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-authors(1)\fR Generate authors report \fBgit\-authors(1)\fR Generate authors report
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-browse\-ci(1)\fR View the CI page for the current repository \fBgit\-browse\-ci(1)\fR \fIView the web page for the current repository\fR
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-browse(1)\fR View the web page for the current repository \fBgit\-browse(1)\fR \fIView the web page for the current repository\fR
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-brv(1)\fR List branches sorted by their last commit date \fBgit\-brv(1)\fR List branches sorted by their last commit date
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-bulk(1)\fR Run git commands on multiple repositories \fBgit\-bulk(1)\fR Run git commands on multiple repositories
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-changelog(1)\fR Generate a changelog report \fBgit\-changelog(1)\fR Generate a changelog report
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-clear\-soft(1)\fR Soft clean up a repository \fBgit\-clear\-soft(1)\fR Soft clean up a repository
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-clear(1)\fR Rigorously clean up a repository \fBgit\-clear(1)\fR Rigorously clean up a repository
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-coauthor(1)\fR Add a co\-author to the last commit \fBgit\-coauthor(1)\fR Add a co\-author to the last commit
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-commits\-since(1)\fR Show commit logs since some date \fBgit\-commits\-since(1)\fR Show commit logs since some date
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-continue(1)\fR Continue current git operation
.IP "\(bu" 4
\fBgit\-contrib(1)\fR Show user's contributions \fBgit\-contrib(1)\fR Show user's contributions
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-count(1)\fR Show commit count \fBgit\-count(1)\fR Show commit count
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-cp(1)\fR Copy a file keeping its history \fBgit\-cp(1)\fR Copy a file keeping its history
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-create\-branch(1)\fR Create branches \fBgit\-create\-branch(1)\fR Create branches
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-delete\-branch(1)\fR Delete branches \fBgit\-delete\-branch(1)\fR Delete branches
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-delete\-merged\-branches(1)\fR Delete merged branches \fBgit\-delete\-merged\-branches(1)\fR Delete merged branches
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-delete\-squashed\-branches(1)\fR Delete branches that were squashed \fBgit\-delete\-squashed\-branches(1)\fR Delete branches that were squashed
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-delete\-submodule(1)\fR Delete submodules \fBgit\-delete\-submodule(1)\fR Delete submodules
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-delete\-tag(1)\fR Delete tags \fBgit\-delete\-tag(1)\fR Delete tags
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-delta(1)\fR Lists changed files \fBgit\-delta(1)\fR Lists changed files
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-effort(1)\fR Show effort statistics on file(s) \fBgit\-effort(1)\fR Show effort statistics on file(s)
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-feature(1)\fR Create/Merge feature branch \fBgit\-feature(1)\fR Create/Merge feature branch
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-force\-clone(1)\fR overwrite local repositories with clone \fBgit\-force\-clone(1)\fR overwrite local repositories with clone
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-fork(1)\fR Fork a repo on github \fBgit\-fork(1)\fR Fork a repo on github
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-fresh\-branch(1)\fR Create fresh branches \fBgit\-fresh\-branch(1)\fR Create fresh branches
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-get(1)\fR Clone a Git repository under a configured directory \fBgit\-get(1)\fR Clone a Git repository under a configured directory
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-gh\-pages(1)\fR Create the GitHub Pages branch \fBgit\-gh\-pages(1)\fR Create the GitHub Pages branch
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-graft(1)\fR Merge and destroy a given branch \fBgit\-graft(1)\fR Merge and destroy a given branch
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-guilt(1)\fR calculate change between two revisions \fBgit\-guilt(1)\fR calculate change between two revisions
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-ignore\-io(1)\fR Get sample gitignore file \fBgit\-ignore\-io(1)\fR Get sample gitignore file
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-ignore(1)\fR Add \.gitignore patterns \fBgit\-ignore(1)\fR Add \.gitignore patterns
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-info(1)\fR Returns information on current repository \fBgit\-info(1)\fR Returns information on current repository
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-local\-commits(1)\fR List local commits \fBgit\-local\-commits(1)\fR List local commits
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-lock(1)\fR Lock a file excluded from version control \fBgit\-lock(1)\fR Lock a file excluded from version control
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-locked(1)\fR ls files that have been locked \fBgit\-locked(1)\fR ls files that have been locked
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-magic(1)\fR Automate add/commit/push routines \fBgit\-magic(1)\fR Automate add/commit/push routines
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-merge\-into(1)\fR Merge one branch into another \fBgit\-merge\-into(1)\fR Merge one branch into another
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-merge\-repo(1)\fR Merge two repo histories \fBgit\-merge\-repo(1)\fR Merge two repo histories
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-missing(1)\fR Show commits missing from another branch \fBgit\-missing(1)\fR Show commits missing from another branch
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-mr(1)\fR Checks out a merge request locally \fBgit\-mr(1)\fR Checks out a merge request locally
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-obliterate(1)\fR rewrite past commits to remove some files \fBgit\-obliterate(1)\fR rewrite past commits to remove some files
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-paste(1)\fR Send patches to pastebin for chat conversations \fBgit\-paste(1)\fR Send patches to pastebin for chat conversations
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-pr(1)\fR Checks out a pull request locally \fBgit\-pr(1)\fR Checks out a pull request locally
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-psykorebase(1)\fR Rebase a branch with a merge commit \fBgit\-psykorebase(1)\fR Rebase a branch with a merge commit
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-pull\-request(1)\fR Create pull request for GitHub project \fBgit\-pull\-request(1)\fR Create pull request for GitHub project
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-reauthor(1)\fR Rewrite history to change author's identity \fBgit\-reauthor(1)\fR Rewrite history to change author's identity
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-rebase\-patch(1)\fR Rebases a patch \fBgit\-rebase\-patch(1)\fR Rebases a patch
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-release(1)\fR Commit, tag and push changes to the repository \fBgit\-release(1)\fR Commit, tag and push changes to the repository
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-rename\-branch(1)\fR rename local branch and push to remote \fBgit\-rename\-branch(1)\fR rename local branch and push to remote
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-rename\-file(1)\fR Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case\-sensitivity\. \fBgit\-rename\-file(1)\fR Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case\-sensitivity\.
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-rename\-remote(1)\fR Rename a remote \fBgit\-rename\-remote(1)\fR Rename a remote
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-rename\-tag(1)\fR Rename a tag \fBgit\-rename\-tag(1)\fR Rename a tag
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-repl(1)\fR git read\-eval\-print\-loop \fBgit\-repl(1)\fR git read\-eval\-print\-loop
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-reset\-file(1)\fR Reset one file \fBgit\-reset\-file(1)\fR Reset one file
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-root(1)\fR show path of root \fBgit\-root(1)\fR show path of root
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-scp(1)\fR Copy files to SSH compatible \fBgit\-remote\fR \fBgit\-scp(1)\fR Copy files to SSH compatible \fBgit\-remote\fR
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-sed(1)\fR replace patterns in git\-controlled files \fBgit\-sed(1)\fR replace patterns in git\-controlled files
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-setup(1)\fR Set up a git repository \fBgit\-setup(1)\fR Set up a git repository
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-show\-merged\-branches(1)\fR Show merged branches \fBgit\-show\-merged\-branches(1)\fR Show merged branches
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-show\-tree(1)\fR show branch tree of commit history \fBgit\-show\-tree(1)\fR show branch tree of commit history
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-show\-unmerged\-branches(1)\fR Show unmerged branches \fBgit\-show\-unmerged\-branches(1)\fR Show unmerged branches
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-squash(1)\fR squash N last changes up to a ref'ed commit \fBgit\-squash(1)\fR squash N last changes up to a ref'ed commit
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-stamp(1)\fR Stamp the last commit message \fBgit\-stamp(1)\fR Stamp the last commit message
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-standup(1)\fR Recall the commit history \fBgit\-standup(1)\fR Recall the commit history
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-summary(1)\fR Show repository summary \fBgit\-summary(1)\fR Show repository summary
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-sync(1)\fR Sync local branch with remote branch \fBgit\-sync(1)\fR Sync local branch with remote branch
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-touch(1)\fR Touch and add file to the index \fBgit\-touch(1)\fR Touch and add file to the index
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-undo(1)\fR Remove latest commits \fBgit\-undo(1)\fR Remove latest commits
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-unlock(1)\fR Unlock a file excluded from version control \fBgit\-unlock(1)\fR Unlock a file excluded from version control
.IP "\(bu" 4 .IP "\[ci]" 4
\fBgit\-unwip(1)\fR Undo a Work In Progress commit
.IP "\(bu" 4
\fBgit\-utimes(1)\fR Change files modification time to their last commit date \fBgit\-utimes(1)\fR Change files modification time to their last commit date
.IP "\(bu" 4
\fBgit\-wip(1)\fR Create a Work In Progress commit
.IP "" 0 .IP "" 0
.SH "AUTHOR" .SH "AUTHOR"
Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR> Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR>

View file

@ -1,8 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' content='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>
<title>git-extras(1) - Awesome GIT utilities</title> <title>git-extras(1) - Awesome GIT utilities</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
@ -111,9 +111,11 @@
<li> <li>
<strong><a class="man-ref" href="git-authors.html">git-authors<span class="s">(1)</span></a></strong> Generate authors report</li> <strong><a class="man-ref" href="git-authors.html">git-authors<span class="s">(1)</span></a></strong> Generate authors report</li>
<li> <li>
<strong><a class="man-ref" href="git-browse-ci.html">git-browse-ci<span class="s">(1)</span></a></strong> View the CI page for the current repository</li> <strong><a class="man-ref" href="git-browse-ci.html">git-browse-ci<span class="s">(1)</span></a></strong> <var>View the web page for the current repository</var>
</li>
<li> <li>
<strong><a class="man-ref" href="git-browse.html">git-browse<span class="s">(1)</span></a></strong> View the web page for the current repository</li> <strong><a class="man-ref" href="git-browse.html">git-browse<span class="s">(1)</span></a></strong> <var>View the web page for the current repository</var>
</li>
<li> <li>
<strong><a class="man-ref" href="git-brv.html">git-brv<span class="s">(1)</span></a></strong> List branches sorted by their last commit date</li> <strong><a class="man-ref" href="git-brv.html">git-brv<span class="s">(1)</span></a></strong> List branches sorted by their last commit date</li>
<li> <li>
@ -129,8 +131,6 @@
<li> <li>
<strong><a class="man-ref" href="git-commits-since.html">git-commits-since<span class="s">(1)</span></a></strong> Show commit logs since some date</li> <strong><a class="man-ref" href="git-commits-since.html">git-commits-since<span class="s">(1)</span></a></strong> Show commit logs since some date</li>
<li> <li>
<strong><a class="man-ref" href="git-continue.html">git-continue<span class="s">(1)</span></a></strong> Continue current git operation</li>
<li>
<strong><a class="man-ref" href="git-contrib.html">git-contrib<span class="s">(1)</span></a></strong> Show user's contributions</li> <strong><a class="man-ref" href="git-contrib.html">git-contrib<span class="s">(1)</span></a></strong> Show user's contributions</li>
<li> <li>
<strong><a class="man-ref" href="git-count.html">git-count<span class="s">(1)</span></a></strong> Show commit count</li> <strong><a class="man-ref" href="git-count.html">git-count<span class="s">(1)</span></a></strong> Show commit count</li>
@ -250,11 +250,7 @@
<li> <li>
<strong><a class="man-ref" href="git-unlock.html">git-unlock<span class="s">(1)</span></a></strong> Unlock a file excluded from version control</li> <strong><a class="man-ref" href="git-unlock.html">git-unlock<span class="s">(1)</span></a></strong> Unlock a file excluded from version control</li>
<li> <li>
<strong><a class="man-ref" href="git-unwip.html">git-unwip<span class="s">(1)</span></a></strong> Undo a Work In Progress commit</li>
<li>
<strong><a class="man-ref" href="git-utimes.html">git-utimes<span class="s">(1)</span></a></strong> Change files modification time to their last commit date</li> <strong><a class="man-ref" href="git-utimes.html">git-utimes<span class="s">(1)</span></a></strong> Change files modification time to their last commit date</li>
<li>
<strong><a class="man-ref" href="git-wip.html">git-wip<span class="s">(1)</span></a></strong> Create a Work In Progress commit</li>
</ul> </ul>
<h2 id="AUTHOR">AUTHOR</h2> <h2 id="AUTHOR">AUTHOR</h2>
@ -271,7 +267,7 @@
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>May 2026</li> <li class='tc'>September 2024</li>
<li class='tr'>git-extras(1)</li> <li class='tr'>git-extras(1)</li>
</ol> </ol>

View file

@ -31,8 +31,8 @@ git-extras(1) -- Awesome GIT utilities
- **git-alias(1)** Define, search and show aliases - **git-alias(1)** Define, search and show aliases
- **git-archive-file(1)** Export the current HEAD of the git repository to an archive - **git-archive-file(1)** Export the current HEAD of the git repository to an archive
- **git-authors(1)** Generate authors report - **git-authors(1)** Generate authors report
- **git-browse-ci(1)** View the CI page for the current repository - **git-browse-ci(1)** <View the web page for the current repository>
- **git-browse(1)** View the web page for the current repository - **git-browse(1)** <View the web page for the current repository>
- **git-brv(1)** List branches sorted by their last commit date - **git-brv(1)** List branches sorted by their last commit date
- **git-bulk(1)** Run git commands on multiple repositories - **git-bulk(1)** Run git commands on multiple repositories
- **git-changelog(1)** Generate a changelog report - **git-changelog(1)** Generate a changelog report
@ -40,13 +40,11 @@ git-extras(1) -- Awesome GIT utilities
- **git-clear(1)** Rigorously clean up a repository - **git-clear(1)** Rigorously clean up a repository
- **git-coauthor(1)** Add a co-author to the last commit - **git-coauthor(1)** Add a co-author to the last commit
- **git-commits-since(1)** Show commit logs since some date - **git-commits-since(1)** Show commit logs since some date
- **git-continue(1)** Continue current git operation
- **git-contrib(1)** Show user's contributions - **git-contrib(1)** Show user's contributions
- **git-count(1)** Show commit count - **git-count(1)** Show commit count
- **git-cp(1)** Copy a file keeping its history - **git-cp(1)** Copy a file keeping its history
- **git-create-branch(1)** Create branches - **git-create-branch(1)** Create branches
- **git-delete-branch(1)** Delete branches - **git-delete-branch(1)** Delete branches
- **git-delete-gone-branches(1)** Delete branches whose remote is gone
- **git-delete-merged-branches(1)** Delete merged branches - **git-delete-merged-branches(1)** Delete merged branches
- **git-delete-squashed-branches(1)** Delete branches that were squashed - **git-delete-squashed-branches(1)** Delete branches that were squashed
- **git-delete-submodule(1)** Delete submodules - **git-delete-submodule(1)** Delete submodules
@ -62,7 +60,7 @@ git-extras(1) -- Awesome GIT utilities
- **git-graft(1)** Merge and destroy a given branch - **git-graft(1)** Merge and destroy a given branch
- **git-guilt(1)** calculate change between two revisions - **git-guilt(1)** calculate change between two revisions
- **git-ignore-io(1)** Get sample gitignore file - **git-ignore-io(1)** Get sample gitignore file
- **git-ignore(1)** Modify or display .gitignore files - **git-ignore(1)** Add .gitignore patterns
- **git-info(1)** Returns information on current repository - **git-info(1)** Returns information on current repository
- **git-local-commits(1)** List local commits - **git-local-commits(1)** List local commits
- **git-lock(1)** Lock a file excluded from version control - **git-lock(1)** Lock a file excluded from version control
@ -101,9 +99,7 @@ git-extras(1) -- Awesome GIT utilities
- **git-touch(1)** Touch and add file to the index - **git-touch(1)** Touch and add file to the index
- **git-undo(1)** Remove latest commits - **git-undo(1)** Remove latest commits
- **git-unlock(1)** Unlock a file excluded from version control - **git-unlock(1)** Unlock a file excluded from version control
- **git-unwip(1)** Undo a Work In Progress commit
- **git-utimes(1)** Change files modification time to their last commit date - **git-utimes(1)** Change files modification time to their last commit date
- **git-wip(1)** Create a Work In Progress commit
## AUTHOR ## AUTHOR

View file

@ -1,33 +1,33 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn-NG/v0.9.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/apjanke/ronn-ng/tree/0.9.1
.TH "GIT\-FORCE\-CLONE" "1" "March 2026" "" "Git Extras" .TH "GIT\-FORCE\-CLONE" "1" "August 2021" "" "Git Extras"
.SH "NAME" .SH "NAME"
\fBgit\-force\-clone\fR \- overwrite local repositories with clone \fBgit\-force\-clone\fR \- overwrite local repositories with clone
.SH "SYNOPSIS" .SH "SYNOPSIS"
\fBgit\-force\-clone \-\-help\fR \fBforce\-clone \-\-help\fR
.br .br
\fBgit\-force\-clone {remote_url} {destination_path}\fR \fBforce\-clone {remote_url} {destination_path}\fR
.br .br
\fBgit\-force\-clone \-\-branch {branch_name} {remote_url} {destination_path}\fR \fBforce\-clone \-\-branch {branch_name} {remote_url} {destination_path}\fR
.SH "DESCRIPTION" .SH "DESCRIPTION"
Provides the basic functionality of \fBgit clone\fR, but if the destination git repository already exists it will force\-reset it to resemble a clone of the remote\. Provides the basic functionality of \fBgit clone\fR, but if the destination git repository already exists it will force\-reset it to resemble a clone of the remote\.
.P .P
Because it doesn't actually delete the directory, it is usually significantly faster than the alternative of deleting the directory and cloning the repository from scratch\. Because it doesn\'t actually delete the directory, it is usually significantly faster than the alternative of deleting the directory and cloning the repository from scratch\.
.P .P
\fBCAUTION\fR: If the repository exists, this will destroy \fIall\fR local work: changed files will be reset, local branches and other remotes will be removed\. \fBCAUTION\fR: If the repository exists, this will destroy \fIall\fR local work: changed files will be reset, local branches and other remotes will be removed\.
.SH "PROCESS" .SH "PROCESS"
If \fBtarget\-directory\fR doesn't exist or isn't a git repository then the arguments will simply be passed through to \fBgit clone\fR\. If \fBtarget\-directory\fR doesn\'t exist or isn\'t a git repository then the arguments will simply be passed through to \fBgit clone\fR\.
.P .P
If \fBtarget\-directory\fR exists and is a git repository then this will: If \fBtarget\-directory\fR exists and is a git repository then this will:
.IP "\(bu" 4 .IP "\[ci]" 4
Remove all remotes Remove all remotes
.IP "\(bu" 4 .IP "\[ci]" 4
Set the origin remote to \fB{remote_url}\fR and fetch the remote Set the origin remote to \fB{remote_url}\fR and fetch the remote
.IP "\(bu" 4 .IP "\[ci]" 4
Discover the default branch, if no branch was specified Discover the default branch, if no branch was specified
.IP "\(bu" 4 .IP "\[ci]" 4
Check out the selected branch Check out the selected branch
.IP "\(bu" 4 .IP "\[ci]" 4
Delete all other local branches Delete all other local branches
.IP "" 0 .IP "" 0
.SH "OPTIONS" .SH "OPTIONS"

View file

@ -1,8 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' content='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>
<title>git-force-clone(1) - overwrite local repositories with clone</title> <title>git-force-clone(1) - overwrite local repositories with clone</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
@ -78,9 +78,9 @@
</p> </p>
<h2 id="SYNOPSIS">SYNOPSIS</h2> <h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-force-clone --help</code><br> <p><code>force-clone --help</code><br>
<code>git-force-clone {remote_url} {destination_path}</code><br> <code>force-clone {remote_url} {destination_path}</code><br>
<code>git-force-clone --branch {branch_name} {remote_url} {destination_path}</code></p> <code>force-clone --branch {branch_name} {remote_url} {destination_path}</code></p>
<h2 id="DESCRIPTION">DESCRIPTION</h2> <h2 id="DESCRIPTION">DESCRIPTION</h2>
@ -134,7 +134,7 @@ arguments will simply be passed through to <code>git clone</code>.</p>
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>March 2026</li> <li class='tc'>August 2021</li>
<li class='tr'>git-force-clone(1)</li> <li class='tr'>git-force-clone(1)</li>
</ol> </ol>

View file

@ -3,9 +3,9 @@ git-force-clone(1) -- overwrite local repositories with clone
## SYNOPSIS ## SYNOPSIS
`git-force-clone --help` `force-clone --help`
`git-force-clone {remote_url} {destination_path}` `force-clone {remote_url} {destination_path}`
`git-force-clone --branch {branch_name} {remote_url} {destination_path}` `force-clone --branch {branch_name} {remote_url} {destination_path}`
## DESCRIPTION ## DESCRIPTION

View file

@ -49,7 +49,7 @@ A personal access token is required for making the API call to create a new fork
Make sure the personal access token has the right \fBOAuth\fR scopes for the repo(s) Make sure the personal access token has the right \fBOAuth\fR scopes for the repo(s)
. .
.P .P
Use \fBGITHUB_TOKEN\fR environment variable, or \fBgit config \-\-global \-\-add git\-extras\.github\-personal\-access\-token <your\-personal\-access\-token>\fR Use \fBgit config \-\-global \-\-add git\-extras\.github\-personal\-access\-token <your\-personal\-access\-token>\fR
. .
.P .P
If using multiple accounts, override the global value in the specific repo using \fBgit config git\-extras\.github\-personal\-access\-token <other\-acc\-personal\-access\-token>\fR If using multiple accounts, override the global value in the specific repo using \fBgit config git\-extras\.github\-personal\-access\-token <other\-acc\-personal\-access\-token>\fR

View file

@ -105,7 +105,7 @@
<p>Make sure the personal access token has the right <code>OAuth</code> scopes for the repo(s)</p> <p>Make sure the personal access token has the right <code>OAuth</code> scopes for the repo(s)</p>
<p>Use <code>GITHUB_TOKEN</code> environment variable, or <code>git config --global --add git-extras.github-personal-access-token &lt;your-personal-access-token></code></p> <p>Use <code>git config --global --add git-extras.github-personal-access-token &lt;your-personal-access-token></code></p>
<p>If using multiple accounts, override the global value in the specific repo using <code>git config git-extras.github-personal-access-token &lt;other-acc-personal-access-token></code></p> <p>If using multiple accounts, override the global value in the specific repo using <code>git config git-extras.github-personal-access-token &lt;other-acc-personal-access-token></code></p>

View file

@ -27,7 +27,7 @@ git-fork(1) -- Fork a repo on github
Make sure the personal access token has the right `OAuth` scopes for the repo(s) Make sure the personal access token has the right `OAuth` scopes for the repo(s)
Use `GITHUB_TOKEN` environment variable, or `git config --global --add git-extras.github-personal-access-token <your-personal-access-token>` Use `git config --global --add git-extras.github-personal-access-token <your-personal-access-token>`
If using multiple accounts, override the global value in the specific repo using `git config git-extras.github-personal-access-token <other-acc-personal-access-token>` If using multiple accounts, override the global value in the specific repo using `git config git-extras.github-personal-access-token <other-acc-personal-access-token>`

View file

@ -1,10 +1,10 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn-NG/v0.9.1
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/apjanke/ronn-ng/tree/0.9.1
.TH "GIT\-GET" "1" "March 2026" "" "Git Extras" .TH "GIT\-GET" "1" "May 2023" "" "Git Extras"
.SH "NAME" .SH "NAME"
\fBgit\-get\fR \- Clone a Git repository under a configured directory \fBgit\-get\fR \- Clone a Git repository under a directory
.SH "SYNOPSIS" .SH "SYNOPSIS"
\fBgit\-get\fR <url> \fBgit\-get\fR
.SH "DESCRIPTION" .SH "DESCRIPTION"
Clones a Git repository under the directory specified by the Git configuration \fBgit\-extras\.get\.clone\-path\fR Clones a Git repository under the directory specified by the Git configuration \fBgit\-extras\.get\.clone\-path\fR
.SH "EXAMPLES" .SH "EXAMPLES"

View file

@ -1,9 +1,9 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' content='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>
<title>git-get(1) - Clone a Git repository under a configured directory</title> <title>git-get(1) - Clone a Git repository under a directory</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
body#manpage {margin:0} body#manpage {margin:0}
@ -72,11 +72,11 @@
<h2 id="NAME">NAME</h2> <h2 id="NAME">NAME</h2>
<p class="man-name"> <p class="man-name">
<code>git-get</code> - <span class="man-whatis">Clone a Git repository under a configured directory</span> <code>git-get</code> - <span class="man-whatis">Clone a Git repository under a directory</span>
</p> </p>
<h2 id="SYNOPSIS">SYNOPSIS</h2> <h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-get</code> &lt;url&gt;</p> <p><code>git-get</code></p>
<h2 id="DESCRIPTION">DESCRIPTION</h2> <h2 id="DESCRIPTION">DESCRIPTION</h2>
@ -110,7 +110,7 @@ $
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>March 2026</li> <li class='tc'>May 2023</li>
<li class='tr'>git-get(1)</li> <li class='tr'>git-get(1)</li>
</ol> </ol>

View file

@ -3,7 +3,7 @@ git-get(1) -- Clone a Git repository under a configured directory
## SYNOPSIS ## SYNOPSIS
`git-get` &lt;url&gt; `git-get`
## DESCRIPTION ## DESCRIPTION

View file

@ -1,88 +1,77 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn/v0.7.3
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/rtomayko/ronn/tree/0.7.3
.TH "GIT\-IGNORE" "1" "June 2026" "" "Git Extras" .
.TH "GIT\-IGNORE" "1" "April 2018" "" "Git Extras"
.
.SH "NAME" .SH "NAME"
\fBgit\-ignore\fR \- Modify or display \.gitignore files \fBgit\-ignore\fR \- Add \.gitignore patterns
.
.SH "SYNOPSIS" .SH "SYNOPSIS"
\fBgit\-ignore\fR [<context>] [<action>] [\-\-] [<pattern> [<pattern>]\|\.\|\.\|\.] \fBgit\-ignore\fR [<context>] [<pattern> [<pattern>]\.\.\.]
.
.SH "DESCRIPTION" .SH "DESCRIPTION"
Modifies or shows \.gitignore of selected \fIcontext\fR\. Adds the given _pattern_s to a \.gitignore file if it doesn\'t already exist\.
.P .
Possible actions are: addition of new \fIpattern\fRs, removal of existing \fIpattern\fRs from gitignore files, opening these files in text editor or simply displaying their contents in current terminal (for details see flags/usage)\.
.P
Contexts are global (e\.g\. $HOME/\.gitignore or $HOME/\.local/\.git/\.gitignore), private (e\.g\. \|\.\|\.\|\./project/\.git/info/exclude) and local (e\.g\. \|\.\|\.\|\./project/\.gitignore)
.P
Adding only happens for \fIpattern\fRs that don't already exist in the file; removing \fIpattern\fRs that are not present does not do anything; editing fails if the file is not yet present\.
.P
At most 1 \fIcontext\fR and 1 \fIaction\fR matter for the program, the ones selected are the latest encountered in the flag list\.
.P
Default behavior:
.IP "\(bu" 4
If no flags or arguments are passed, prints gitignores of all 3 \fIcontext\fRs\.
.IP "\(bu" 4
Passing arguments with no \fIaction\fR implies addition of \fIpattern\fRs to gitignore\.
.IP "\(bu" 4
If an \fIaction\fR is chosen, but not \fIcontext\fR, \fIaction\fR is performed on local gitignore\.
.IP "\(bu" 4
If \fIcontext\fR is chosen but not action (not even implied), gitignore of chosen \fIcontext\fR is printed\.
.IP "" 0
.SH "OPTIONS" .SH "OPTIONS"
<context> <context>
.
.P .P
\-l, \-\-local \-l, \-\-local
.
.P .P
Sets the context to the \.gitignore file in the current working directory\. (default) Sets the context to the \.gitignore file in the current working directory\. (default)
.
.P .P
\-g, \-\-global \-g, \-\-global
.
.P .P
Sets the context to the global gitignore file for the current user\. Sets the context to the global gitignore file for the current user\.
.
.P .P
\-p, \-\-private \-p, \-\-private
.
.P .P
Sets the context to the private exclude file for the repository (\fB\.git/info/exclude\fR)\. Sets the context to the private exclude file for the repository (\fB\.git/info/exclude\fR)\.
.P .
<action>
.P
\-e, \-\-edit
.P
Sets action to edit\. This will open gitignore in a text editor (editor selection is the same as for git commit)\. If no \fIcontext\fR is provided local is assumed\. Any \fIpattern\fR; provided in additional arguments is silently omitted\.
.P
\-r, \-\-remove
.P
Sets action to remove\. This will look for \fIpattern\fRs in gitignore of selected \fIcontext\fR and remove if finds them\. If no \fIpattern\fR is provided does nothing\. All characters in \fIpattern\fR are treated literally, no interpretation of metacharacters is performed as would be, for example, for a regex pattern\.
.P .P
<pattern> <pattern>
.
.P .P
A space delimited list of patterns to append to the file in context\. A space delimited list of patterns to append to the file in context\.
.P .
\-\-
.P
End of options delimeter\. Everything to the right of it is treated as positional arguments or more precisely a \fIpattern\fR\.
.P
\-h, \-\-help
.P
Print a brief usage summary\.
.SS "PATTERN FORMAT" .SS "PATTERN FORMAT"
Pattern format as described in the git manual Pattern format as described in the git manual
.
.IP "\(bu" 4 .IP "\(bu" 4
A blank line matches no files, so it can serve as a separator for readability\. To append a blank line use empty quotes ""\. A blank line matches no files, so it can serve as a separator for readability\. To append a blank line use empty quotes ""\.
.
.IP "\(bu" 4 .IP "\(bu" 4
A line starting with # serves as a comment\. For example, "# This is a comment" A line starting with # serves as a comment\. For example, "# This is a comment"
.
.IP "\(bu" 4 .IP "\(bu" 4
An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again\. If a negated pattern matches, this will override lower precedence patterns sources\. To use an exclamation ! as command line argument it is best placed between single quotes ''\. For example, '!src' An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again\. If a negated pattern matches, this will override lower precedence patterns sources\. To use an exclamation ! as command line argument it is best placed between single quotes \'\'\. For example, \'!src\'
.
.IP "\(bu" 4 .IP "\(bu" 4
If the pattern ends with a slash, it is removed for the purpose of the following description, but it would only find a match with a directory\. In other words, foo/ will match a directory foo and paths underneath it, but will not match a regular file or a symbolic link foo (this is consistent with the way how pathspec works in general in git)\. If the pattern ends with a slash, it is removed for the purpose of the following description, but it would only find a match with a directory\. In other words, foo/ will match a directory foo and paths underneath it, but will not match a regular file or a symbolic link foo (this is consistent with the way how pathspec works in general in git)\.
.
.IP "\(bu" 4 .IP "\(bu" 4
If the pattern does not contain a slash /, git treats it as a shell glob pattern and checks for a match against the pathname relative to the location of the \.gitignore file (relative to the top level of the work tree if not from a \.gitignore file)\. If the pattern does not contain a slash /, git treats it as a shell glob pattern and checks for a match against the pathname relative to the location of the \.gitignore file (relative to the top level of the work tree if not from a \.gitignore file)\.
.
.IP "\(bu" 4 .IP "\(bu" 4
Otherwise, git treats the pattern as a shell glob suitable for consumption by fnmatch(3) with the FNM_PATHNAME flag: wildcards in the pattern will not match a / in the pathname\. For example, "Documentation/*\.html" matches "Documentation/git\.html" but not "Documentation/ppc/ppc\.html" or "tools/perf/Documentation/perf\.html"\. Otherwise, git treats the pattern as a shell glob suitable for consumption by fnmatch(3) with the FNM_PATHNAME flag: wildcards in the pattern will not match a / in the pathname\. For example, "Documentation/*\.html" matches "Documentation/git\.html" but not "Documentation/ppc/ppc\.html" or "tools/perf/Documentation/perf\.html"\.
.
.IP "\(bu" 4 .IP "\(bu" 4
A leading slash matches the beginning of the pathname\. For example, "/*\.c" matches "cat\-file\.c" but not "mozilla\-sha1/sha1\.c"\. A leading slash matches the beginning of the pathname\. For example, "/*\.c" matches "cat\-file\.c" but not "mozilla\-sha1/sha1\.c"\.
.
.IP "" 0 .IP "" 0
.
.SH "EXAMPLES" .SH "EXAMPLES"
All arguments are optional so calling git\-ignore alone will display global, local and private gitignore files in order: All arguments are optional so calling git\-ignore alone will display first the global then the local gitignore files:
.
.IP "" 4 .IP "" 4
.
.nf .nf
$ git ignore $ git ignore
Global gitignore: /home/alice/\.gitignore Global gitignore: /home/alice/\.gitignore
# Numerous always\-ignore extensions # Numerous always\-ignore extensions
@ -97,101 +86,92 @@ Global gitignore: /home/alice/\.gitignore
*\.sass\-cache *\.sass\-cache
# OS or Editor folders # OS or Editor folders
\&\.DS_Store \.DS_Store
\&\.Trashes \.Trashes
\&\._* \._*
Thumbs\.db Thumbs\.db
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
Local gitignore: \.gitignore Local gitignore: \.gitignore
\&\.cache \.cache
\&\.project \.project
\&\.settings \.settings
\&\.tmproj \.tmproj
nbproject nbproject
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .
Private gitignore: \.git/info/exclude
notes\.txt
test\.sh
\&\.env\.local
config\.json
.fi .fi
.
.IP "" 0 .IP "" 0
.
.P .P
If you only want to see the global context use the \-\-global argument (for local use \-\-local, for private use \-\-private): If you only want to see the global context use the \-\-global argument (for local use \-\-local):
.
.IP "" 4 .IP "" 4
.
.nf .nf
$ git ignore $ git ignore
Global gitignore: /home/alice/\.gitignore Global gitignore: /home/alice/\.gitignore
\&\.DS_Store \.DS_Store
\&\.Trashes \.Trashes
\&\._* \._*
Thumbs\.db Thumbs\.db
.
.fi .fi
.
.IP "" 0 .IP "" 0
.
.P .P
To quickly append a new pattern to the default/local context simply: To quickly append a new pattern to the default/local context simply:
.
.IP "" 4 .IP "" 4
.
.nf .nf
$ git ignore *\.log $ git ignore *\.log
Adding pattern(s) to: \.gitignore Adding pattern(s) to: \.gitignore
\|\.\|\.\|\. adding '*\.log' \.\.\. adding \'*\.log\'
.
.fi .fi
.
.IP "" 0 .IP "" 0
.
.P .P
You can now configure any patterns without ever using an editor (or use a shortcut to open file in editor when needed), with a context and pattern arguments: The resulting configuration is also returned for your convenience\. You can now configure any patterns without ever using an editor, with a context and pattern arguments: The resulting configuration is also returned for your convenience\.
.
.IP "" 4 .IP "" 4
.
.nf .nf
$ git ignore \-\-local "" "# Temporary files" *\.tmp "*\.log" tmp/* "" "# Files I'd like to keep" '!work' ""
$ git ignore \-\-local "" "# Temporary files" *\.tmp "*\.log" tmp/* "" "# Files I\'d like to keep" \'!work\' ""
Adding pattern(s) to: \.gitignore Adding pattern(s) to: \.gitignore
\|\.\|\.\|\. adding '' \.\.\. adding \'\'
\|\.\|\.\|\. adding '# Temporary files' \.\.\. adding \'# Temporary files\'
\|\.\|\.\|\. adding '*\.tmp' \.\.\. adding \'index\.tmp\'
\|\.\|\.\|\. adding '*\.log' \.\.\. adding \'*\.log\'
\|\.\|\.\|\. adding 'tmp/*' \.\.\. adding \'tmp/*\'
\|\.\|\.\|\. adding '' \.\.\. adding \'\'
\|\.\|\.\|\. adding '# Files I'd like to keep' \.\.\. adding \'# Files I\'d like to keep\'
\|\.\|\.\|\. adding '!work' \.\.\. adding \'!work\'
\|\.\|\.\|\. adding '' \.\.\. adding \'\'
Local gitignore: \.gitignore Local gitignore: \.gitignore
# Temporary files # Temporary files
*\.tmp index\.tmp
*\.log *\.log
tmp/*
# Files I'd like to keep # Files I\'d like to keep
!work !work
.
.fi .fi
.
.IP "" 0 .IP "" 0
.P .
Removing patterns works in a similar way\. Select context and pass patterns to be removed from the gitignore file\.
.IP "" 4
.nf
$ git ignore \-l \-r "*\.log"
Removing patterns from local gitignore: \.gitignore
\|\.\|\.\|\. removing '*\.log'
Local gitignore: \.gitignore
# Temporary files
*\.tmp
tmp/*
# Files I'd like to keep
!work
.fi
.IP "" 0
.P
If you want to open gitignore in an editor and do changes manually pass \-e flag:
.IP "" 4
.nf
$ git ignore \-p \-e
.fi
.IP "" 0
.SH "AUTHOR" .SH "AUTHOR"
Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR> and Tema Bolshakov <\fItweekane@gmail\.com\fR> and Nick Lombard <\fIgithub@jigsoft\.co\.za\fR&gt and Kirill Dergachev <\fIkdergachev1062@gmail\.com\fR> Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR> and Tema Bolshakov <\fItweekane@gmail\.com\fR> and Nick Lombard <\fIgithub@jigsoft\.co\.za\fR>
.
.SH "REPORTING BUGS" .SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR> <\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO" .SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR> <\fIhttps://github\.com/tj/git\-extras\fR>

View file

@ -1,9 +1,9 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-ignore(1) - Modify or display .gitignore files</title> <title>git-ignore(1) - Add .gitignore patterns</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
body#manpage {margin:0} body#manpage {margin:0}
@ -69,114 +69,57 @@
<li class='tr'>git-ignore(1)</li> <li class='tr'>git-ignore(1)</li>
</ol> </ol>
<h2 id="NAME">NAME</h2>
<h2 id="NAME">NAME</h2>
<p class="man-name"> <p class="man-name">
<code>git-ignore</code> - <span class="man-whatis">Modify or display .gitignore files</span> <code>git-ignore</code> - <span class="man-whatis">Add .gitignore patterns</span>
</p> </p>
<h2 id="SYNOPSIS">SYNOPSIS</h2> <h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-ignore</code> [&lt;context&gt;] [&lt;action&gt;] [--] [&lt;pattern&gt; [&lt;pattern&gt;]...]</p> <p><code>git-ignore</code> [&lt;context&gt;] [&lt;pattern&gt; [&lt;pattern&gt;]...]</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2> <h2 id="DESCRIPTION">DESCRIPTION</h2>
<p>Modifies or shows .gitignore of selected <em>context</em>.</p> <p>Adds the given _pattern_s to a .gitignore file if it doesn't already exist.</p>
<p>Possible actions are: addition of new <em>pattern</em>s, removal of existing <em>pattern</em>s from gitignore files, opening these files in text editor or simply displaying their contents in current terminal (for details see flags/usage).</p>
<p>Contexts are global (e.g. $HOME/.gitignore or $HOME/.local/.git/.gitignore), private (e.g. .../project/.git/info/exclude) and local (e.g. .../project/.gitignore)</p>
<p>Adding only happens for <em>pattern</em>s that don't already exist in the file; removing <em>pattern</em>s that are not present does not do anything; editing fails if the file is not yet present.</p>
<p>At most 1 <em>context</em> and 1 <em>action</em> matter for the program, the ones selected are the latest encountered in the flag list.</p>
<p>Default behavior:</p>
<ul>
<li>
<p>If no flags or arguments are passed, prints gitignores of all 3 <em>context</em>s.</p>
</li>
<li>
<p>Passing arguments with no <em>action</em> implies addition of <em>pattern</em>s to gitignore.</p>
</li>
<li>
<p>If an <em>action</em> is chosen, but not <em>context</em>, <em>action</em> is performed on local gitignore.</p>
</li>
<li>
<p>If <em>context</em> is chosen but not action (not even implied), gitignore of chosen <em>context</em> is printed.</p>
</li>
</ul>
<h2 id="OPTIONS">OPTIONS</h2> <h2 id="OPTIONS">OPTIONS</h2>
<p>&lt;context&gt;</p> <p> &lt;context&gt;</p>
<p>-l, --local</p> <p> -l, --local</p>
<p>Sets the context to the .gitignore file in the current working directory. (default)</p> <p> Sets the context to the .gitignore file in the current working directory. (default)</p>
<p>-g, --global</p> <p> -g, --global</p>
<p>Sets the context to the global gitignore file for the current user.</p> <p> Sets the context to the global gitignore file for the current user.</p>
<p>-p, --private</p> <p> -p, --private</p>
<p>Sets the context to the private exclude file for the repository (<code>.git/info/exclude</code>).</p> <p> Sets the context to the private exclude file for the repository (<code>.git/info/exclude</code>).</p>
<p>&lt;action&gt;</p> <p> &lt;pattern&gt;</p>
<p>-e, --edit</p> <p> A space delimited list of patterns to append to the file in context.</p>
<p>Sets action to edit. This will open gitignore in a text editor (editor selection is the same as for git commit). If no <em>context</em> is provided local is assumed. Any <em>pattern</em>; provided in additional arguments is silently omitted.</p>
<p>-r, --remove</p>
<p>Sets action to remove. This will look for <em>pattern</em>s in gitignore of selected <em>context</em> and remove if finds them. If no <em>pattern</em> is provided does nothing. All characters in <em>pattern</em> are treated literally, no interpretation of metacharacters is performed as would be, for example, for a regex pattern.</p>
<p>&lt;pattern&gt;</p>
<p>A space delimited list of patterns to append to the file in context.</p>
<p>--</p>
<p>End of options delimeter. Everything to the right of it is treated as positional arguments or more precisely a <em>pattern</em>.</p>
<p>-h, --help</p>
<p>Print a brief usage summary.</p>
<h3 id="PATTERN-FORMAT">PATTERN FORMAT</h3> <h3 id="PATTERN-FORMAT">PATTERN FORMAT</h3>
<p>Pattern format as described in the git manual</p> <p>Pattern format as described in the git manual</p>
<ul> <ul>
<li> <li><p>A blank line matches no files, so it can serve as a separator for readability. To append a blank line use empty quotes "".</p></li>
<p>A blank line matches no files, so it can serve as a separator for readability. To append a blank line use empty quotes "".</p> <li><p>A line starting with # serves as a comment. For example, "# This is a comment"</p></li>
</li> <li><p>An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again. If a negated pattern matches, this will override lower precedence patterns sources. To use an exclamation ! as command line argument it is best placed between single quotes ''. For example, '!src'</p></li>
<li> <li><p>If the pattern ends with a slash, it is removed for the purpose of the following description, but it would only find a match with a directory. In other words, foo/ will match a directory foo and paths underneath it, but will not match a regular file or a symbolic link foo (this is consistent with the way how pathspec works in general in git).</p></li>
<p>A line starting with # serves as a comment. For example, "# This is a comment"</p> <li><p>If the pattern does not contain a slash /, git treats it as a shell glob pattern and checks for a match against the pathname relative to the location of the .gitignore file (relative to the top level of the work tree if not from a .gitignore file).</p></li>
</li> <li><p>Otherwise, git treats the pattern as a shell glob suitable for consumption by <span class="man-ref">fnmatch<span class="s">(3)</span></span> with the FNM_PATHNAME flag: wildcards in the pattern will not match a / in the pathname. For example, "Documentation/*.html" matches "Documentation/git.html" but not "Documentation/ppc/ppc.html" or "tools/perf/Documentation/perf.html".</p></li>
<li> <li><p>A leading slash matches the beginning of the pathname. For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".</p></li>
<p>An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again. If a negated pattern matches, this will override lower precedence patterns sources. To use an exclamation ! as command line argument it is best placed between single quotes ''. For example, '!src'</p>
</li>
<li>
<p>If the pattern ends with a slash, it is removed for the purpose of the following description, but it would only find a match with a directory. In other words, foo/ will match a directory foo and paths underneath it, but will not match a regular file or a symbolic link foo (this is consistent with the way how pathspec works in general in git).</p>
</li>
<li>
<p>If the pattern does not contain a slash /, git treats it as a shell glob pattern and checks for a match against the pathname relative to the location of the .gitignore file (relative to the top level of the work tree if not from a .gitignore file).</p>
</li>
<li>
<p>Otherwise, git treats the pattern as a shell glob suitable for consumption by <span class="man-ref">fnmatch<span class="s">(3)</span></span> with the FNM_PATHNAME flag: wildcards in the pattern will not match a / in the pathname. For example, "Documentation/*.html" matches "Documentation/git.html" but not "Documentation/ppc/ppc.html" or "tools/perf/Documentation/perf.html".</p>
</li>
<li>
<p>A leading slash matches the beginning of the pathname. For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".</p>
</li>
</ul> </ul>
<h2 id="EXAMPLES">EXAMPLES</h2> <h2 id="EXAMPLES">EXAMPLES</h2>
<p>All arguments are optional so calling git-ignore alone will display global, local and private gitignore files in order:</p> <p> All arguments are optional so calling git-ignore alone will display first the global then the local gitignore files:</p>
<pre><code>$ git ignore <pre><code>$ git ignore
Global gitignore: /home/alice/.gitignore Global gitignore: /home/alice/.gitignore
@ -203,15 +146,9 @@ Local gitignore: .gitignore
.settings .settings
.tmproj .tmproj
nbproject nbproject
---------------------------------
Private gitignore: .git/info/exclude
notes.txt
test.sh
.env.local
config.json
</code></pre> </code></pre>
<p>If you only want to see the global context use the --global argument (for local use --local, for private use --private):</p> <p>If you only want to see the global context use the --global argument (for local use --local):</p>
<pre><code>$ git ignore <pre><code>$ git ignore
Global gitignore: /home/alice/.gitignore Global gitignore: /home/alice/.gitignore
@ -228,14 +165,14 @@ Adding pattern(s) to: .gitignore
... adding '*.log' ... adding '*.log'
</code></pre> </code></pre>
<p>You can now configure any patterns without ever using an editor (or use a shortcut to open file in editor when needed), with a context and pattern arguments: <p>You can now configure any patterns without ever using an editor, with a context and pattern arguments:
The resulting configuration is also returned for your convenience.</p> The resulting configuration is also returned for your convenience.</p>
<pre><code>$ git ignore --local "" "# Temporary files" *.tmp "*.log" tmp/* "" "# Files I'd like to keep" '!work' "" <pre><code>$ git ignore --local "" "# Temporary files" *.tmp "*.log" tmp/* "" "# Files I'd like to keep" '!work' ""
Adding pattern(s) to: .gitignore Adding pattern(s) to: .gitignore
... adding '' ... adding ''
... adding '# Temporary files' ... adding '# Temporary files'
... adding '*.tmp' ... adding 'index.tmp'
... adding '*.log' ... adding '*.log'
... adding 'tmp/*' ... adding 'tmp/*'
... adding '' ... adding ''
@ -246,39 +183,17 @@ Adding pattern(s) to: .gitignore
Local gitignore: .gitignore Local gitignore: .gitignore
# Temporary files # Temporary files
*.tmp index.tmp
*.log *.log
tmp/*
# Files I'd like to keep # Files I'd like to keep
!work !work
</code></pre> </code></pre>
<p>Removing patterns works in a similar way. Select context and pass patterns to be removed from the gitignore file.</p>
<pre><code>$ git ignore -l -r "*.log"
Removing patterns from local gitignore: .gitignore
... removing '*.log'
Local gitignore: .gitignore
# Temporary files
*.tmp
tmp/*
# Files I'd like to keep
!work
</code></pre>
<p>If you want to open gitignore in an editor and do changes manually pass -e flag:</p>
<pre><code>$ git ignore -p -e
</code></pre>
<h2 id="AUTHOR">AUTHOR</h2> <h2 id="AUTHOR">AUTHOR</h2>
<p>Written by Tj Holowaychuk &lt;<a href="mailto:tj@vision-media.ca" data-bare-link="true">tj@vision-media.ca</a>&gt; and Tema Bolshakov &lt;<a href="mailto:tweekane@gmail.com" data-bare-link="true">tweekane@gmail.com</a>&gt; <p>Written by Tj Holowaychuk &lt;<a href="&#x6d;&#97;&#105;&#108;&#x74;&#111;&#58;&#116;&#x6a;&#x40;&#x76;&#105;&#115;&#105;&#111;&#110;&#x2d;&#x6d;&#x65;&#100;&#x69;&#97;&#46;&#x63;&#x61;" data-bare-link="true">&#116;&#106;&#x40;&#118;&#x69;&#x73;&#x69;&#x6f;&#110;&#45;&#109;&#101;&#100;&#105;&#97;&#x2e;&#99;&#97;</a>&gt; and Tema Bolshakov &lt;<a href="&#x6d;&#97;&#105;&#x6c;&#116;&#x6f;&#58;&#116;&#x77;&#101;&#101;&#107;&#x61;&#x6e;&#101;&#x40;&#x67;&#x6d;&#97;&#x69;&#108;&#46;&#x63;&#111;&#x6d;" data-bare-link="true">&#x74;&#119;&#x65;&#x65;&#107;&#x61;&#110;&#x65;&#x40;&#103;&#x6d;&#97;&#105;&#x6c;&#x2e;&#x63;&#x6f;&#x6d;</a>&gt;
and Nick Lombard &lt;<a href="mailto:github@jigsoft.co.za" data-bare-link="true">github@jigsoft.co.za</a>&amp;gt and Kirill Dergachev &lt;<a href="mailto:kdergachev1062@gmail.com" data-bare-link="true">kdergachev1062@gmail.com</a>&gt;</p> and Nick Lombard &lt;<a href="&#109;&#97;&#x69;&#x6c;&#116;&#111;&#58;&#x67;&#105;&#116;&#104;&#117;&#x62;&#x40;&#x6a;&#105;&#103;&#x73;&#x6f;&#x66;&#116;&#46;&#x63;&#x6f;&#x2e;&#x7a;&#97;" data-bare-link="true">&#103;&#105;&#116;&#104;&#x75;&#98;&#x40;&#106;&#105;&#103;&#115;&#x6f;&#102;&#x74;&#x2e;&#x63;&#111;&#x2e;&#122;&#x61;</a>&gt;</p>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2> <h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
@ -288,9 +203,10 @@ and Nick Lombard &lt;<a href="mailto:github@jigsoft.co.za" data-bare-link="true"
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p> <p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>June 2026</li> <li class='tc'>April 2018</li>
<li class='tr'>git-ignore(1)</li> <li class='tr'>git-ignore(1)</li>
</ol> </ol>

View file

@ -1,31 +1,13 @@
git-ignore(1) -- Modify or display .gitignore files git-ignore(1) -- Add .gitignore patterns
======================================== ========================================
## SYNOPSIS ## SYNOPSIS
`git-ignore` [&lt;context&gt;] [&lt;action&gt;] [--] [&lt;pattern&gt; [&lt;pattern&gt;]...] `git-ignore` [&lt;context&gt;] [&lt;pattern&gt; [&lt;pattern&gt;]...]
## DESCRIPTION ## DESCRIPTION
Modifies or shows .gitignore of selected *context*. Adds the given _pattern_s to a .gitignore file if it doesn't already exist.
Possible actions are: addition of new *pattern*s, removal of existing *pattern*s from gitignore files, opening these files in text editor or simply displaying their contents in current terminal (for details see flags/usage).
Contexts are global (e.g. $HOME/.gitignore or $HOME/.local/.git/.gitignore), private (e.g. .../project/.git/info/exclude) and local (e.g. .../project/.gitignore)
Adding only happens for *pattern*s that don't already exist in the file; removing *pattern*s that are not present does not do anything; editing fails if the file is not yet present.
At most 1 *context* and 1 *action* matter for the program, the ones selected are the latest encountered in the flag list.
Default behavior:
* If no flags or arguments are passed, prints gitignores of all 3 *context*s.
* Passing arguments with no *action* implies addition of *pattern*s to gitignore.
* If an *action* is chosen, but not *context*, *action* is performed on local gitignore.
* If *context* is chosen but not action (not even implied), gitignore of chosen *context* is printed.
## OPTIONS ## OPTIONS
@ -43,28 +25,10 @@ Default behavior:
Sets the context to the private exclude file for the repository (`.git/info/exclude`). Sets the context to the private exclude file for the repository (`.git/info/exclude`).
&lt;action&gt;
-e, --edit
Sets action to edit. This will open gitignore in a text editor (editor selection is the same as for git commit). If no *context* is provided local is assumed. Any *pattern*; provided in additional arguments is silently omitted.
-r, --remove
Sets action to remove. This will look for *pattern*s in gitignore of selected *context* and remove if finds them. If no *pattern* is provided does nothing. All characters in *pattern* are treated literally, no interpretation of metacharacters is performed as would be, for example, for a regex pattern.
&lt;pattern&gt; &lt;pattern&gt;
A space delimited list of patterns to append to the file in context. A space delimited list of patterns to append to the file in context.
--
End of options delimiter. Everything to the right of it is treated as positional arguments or more precisely a *pattern*.
-h, --help
Print a brief usage summary.
### PATTERN FORMAT ### PATTERN FORMAT
Pattern format as described in the git manual Pattern format as described in the git manual
@ -79,14 +43,14 @@ Pattern format as described in the git manual
* If the pattern does not contain a slash /, git treats it as a shell glob pattern and checks for a match against the pathname relative to the location of the .gitignore file (relative to the top level of the work tree if not from a .gitignore file). * If the pattern does not contain a slash /, git treats it as a shell glob pattern and checks for a match against the pathname relative to the location of the .gitignore file (relative to the top level of the work tree if not from a .gitignore file).
* Otherwise, git treats the pattern as a shell glob suitable for consumption by fnmatch(3) with the FNM\_PATHNAME flag: wildcards in the pattern will not match a / in the pathname. For example, "Documentation/\*.html" matches "Documentation/git.html" but not "Documentation/ppc/ppc.html" or "tools/perf/Documentation/perf.html". * Otherwise, git treats the pattern as a shell glob suitable for consumption by fnmatch(3) with the FNM_PATHNAME flag: wildcards in the pattern will not match a / in the pathname. For example, "Documentation/*.html" matches "Documentation/git.html" but not "Documentation/ppc/ppc.html" or "tools/perf/Documentation/perf.html".
* A leading slash matches the beginning of the pathname. For example, "/\*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". * A leading slash matches the beginning of the pathname. For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".
## EXAMPLES ## EXAMPLES
All arguments are optional so calling git-ignore alone will display global, local and private gitignore files in order: All arguments are optional so calling git-ignore alone will display first the global then the local gitignore files:
$ git ignore $ git ignore
Global gitignore: /home/alice/.gitignore Global gitignore: /home/alice/.gitignore
@ -113,14 +77,8 @@ Pattern format as described in the git manual
.settings .settings
.tmproj .tmproj
nbproject nbproject
---------------------------------
Private gitignore: .git/info/exclude
notes.txt
test.sh
.env.local
config.json
If you only want to see the global context use the --global argument (for local use --local, for private use --private): If you only want to see the global context use the --global argument (for local use --local):
$ git ignore $ git ignore
Global gitignore: /home/alice/.gitignore Global gitignore: /home/alice/.gitignore
@ -135,55 +93,34 @@ To quickly append a new pattern to the default/local context simply:
Adding pattern(s) to: .gitignore Adding pattern(s) to: .gitignore
... adding '*.log' ... adding '*.log'
You can now configure any patterns without ever using an editor (or use a shortcut to open file in editor when needed), with a context and pattern arguments: You can now configure any patterns without ever using an editor, with a context and pattern arguments:
The resulting configuration is also returned for your convenience. The resulting configuration is also returned for your convenience.
$ git ignore --local "" "# Temporary files" *.tmp "*.log" tmp/* "" "# Files I'd like to keep" '!work' "" $ git ignore --local "" "# Temporary files" *.tmp "*.log" tmp/* "" "# Files I'd like to keep" '!work' ""
Adding pattern(s) to: .gitignore Adding pattern(s) to: .gitignore
... adding '' ... adding ''
... adding '# Temporary files' ... adding '# Temporary files'
... adding '*.tmp' ... adding 'index.tmp'
... adding '*.log' ... adding '*.log'
... adding 'tmp/*' ... adding 'tmp/*'
... adding '' ... adding ''
... adding '# Files I'd like to keep' ... adding '# Files I'd like to keep'
... adding '!work' ... adding '!work'
... adding '' ... adding ''
Local gitignore: .gitignore Local gitignore: .gitignore
# Temporary files # Temporary files
*.tmp index.tmp
*.log *.log
tmp/*
# Files I'd like to keep # Files I'd like to keep
!work !work
Removing patterns works in a similar way. Select context and pass patterns to be removed from the gitignore file.
$ git ignore -l -r "*.log"
Removing patterns from local gitignore: .gitignore
... removing '*.log'
Local gitignore: .gitignore
# Temporary files
*.tmp
tmp/*
# Files I'd like to keep
!work
If you want to open gitignore in an editor and do changes manually pass -e flag:
$ git ignore -p -e
## AUTHOR ## AUTHOR
Written by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt; and Tema Bolshakov &lt;<tweekane@gmail.com>&gt; Written by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt; and Tema Bolshakov &lt;<tweekane@gmail.com>&gt;
and Nick Lombard &lt;<github@jigsoft.co.za>&gt and Kirill Dergachev &lt;<kdergachev1062@gmail.com>&gt; and Nick Lombard &lt;<github@jigsoft.co.za>&gt;
## REPORTING BUGS ## REPORTING BUGS

View file

@ -1,71 +1,102 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn/v0.7.3
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/rtomayko/ronn/tree/0.7.3
.TH "GIT\-MAGIC" "1" "September 2025" "" "Git Extras" .
.SH "NAME" .TH "GIT\-MAGIC" "1" "May 2023" "" "Git Extras"
\fBgit\-magic\fR \- Automate add/commit/push routines .
.SH "SYNOPSIS" .SH "NAME"
\fBgit\-magic\fR [\-a] [\-m \fImsg\fR] [\-e] [\-p] [\-f] \fBgit\-magic\fR \- Automate add/commit/push routines
.SH "DESCRIPTION" .
Produces summary of changes for commit message from \fBgit status \-\-porcelain\fR output\. Commits staged changes with the generated commit message and opens editor to modify generated commit message optionally\. Also staging and pushing can be automated optionally\. .SH "SYNOPSIS"
.SH "OPTIONS" \fBgit\-magic\fR [\-a] [\-m \fImsg\fR] [\-e] [\-p] [\-f]
\-a .
.P .SH "DESCRIPTION"
Adds everything including untracked files\. Produces summary of changes for commit message from \fBgit status \-\-porcelain\fR output\. Commits staged changes with the generated commit message and opens editor to modify generated commit message optionally\. Also staging and pushing can be automated optionally\.
.P .
\-m \fImsg\fR .SH "OPTIONS"
.P \-a
Use the given \fImsg\fR as the commit message\. If multiple \-m options are given, their values are concatenated as separate paragraphs\. Passed to git commit command\. The generated is appended to user\-given messages\. .
.P .P
\-e Adds everything including untracked files\.
.P .
This option lets you further edit the generated message\. Passed to git commit command\. .P
.P \-m \fImsg\fR
\-p .
.P .P
Runs \fBgit push\fR after commit\. Use the given \fImsg\fR as the commit message\. If multiple \-m options are given, their values are concatenated as separate paragraphs\. Passed to git commit command\. The generated is appended to user\-given messages\.
.P .
\-f .P
.P \-e
Adds \fB\-\-force\-with\-lease\fR option to \fBgit push\fR command for safer force pushing\. .
.P .P
\-h This option lets you further edit the generated message\. Passed to git commit command\.
.P .
Prints synopsis\. .P
.SH "EXAMPLES" \-p
This example stages all changes then commits with automatic commit message\. .
.IP "" 4 .P
.nf Runs \fBgit push\fR after commit\.
$ git magic \-a .
[feature/magic dc2a11e] A man/git\-magic\.md .P
1 file changed, 37 insertions(+) \-f
create mode 100644 man/git\-auto\.md .
# git log .P
Author: overengineer <54alpersaid@gmail\.com> Adds \fB\-f\fR option to \fBgit push\fR command\.
Date: Thu Sep 30 20:14:22 2021 +0300 .
.P
M man/git\-magic\.md \-h
.fi .
.IP "" 0 .P
.P Prints synopsis\.
\fB\-m\fR option PREPENDS generated message\. .
.IP "" 4 .SH "EXAMPLES"
.nf This example stages all changes then commits with automatic commit message\.
$ git magic \-am "Added documentation for git magic" .
[feature/magic dc2a11e] Added documentation for git magic .IP "" 4
1 file changed, 42 insertions(+), 0 deletions(\-) .
create mode 100644 A man/git\-auto\.md .nf
$ git log
Author: overengineer <54alpersaid@gmail\.com> $ git magic \-a
Date: Thu Sep 30 20:14:22 2021 +0300 [feature/magic dc2a11e] A man/git\-magic\.md
1 file changed, 37 insertions(+)
Added documentation for git magic create mode 100644 man/git\-auto\.md
# git log
M man/git\-magic\.md Author: overengineer <54alpersaid@gmail\.com>
.fi Date: Thu Sep 30 20:14:22 2021 +0300
.IP "" 0
.SH "AUTHOR" M man/git\-magic\.md
Written by Alper S\. Soylu \fI54alpersaid@gmail\.com\fR .
.SH "REPORTING BUGS" .fi
<\fIhttps://github\.com/tj/git\-extras/issues\fR> .
.SH "SEE ALSO" .IP "" 0
<\fIhttps://github\.com/tj/git\-extras\fR> .
.P
\fB\-m\fR option PREPENDS generated message\.
.
.IP "" 4
.
.nf
$ git magic \-am "Added documentation for git magic"
[feature/magic dc2a11e] Added documentation for git magic
1 file changed, 42 insertions(+), 0 deletions(\-)
create mode 100644 A man/git\-auto\.md
$ git log
Author: overengineer <54alpersaid@gmail\.com>
Date: Thu Sep 30 20:14:22 2021 +0300
Added documentation for git magic
M man/git\-magic\.md
.
.fi
.
.IP "" 0
.
.SH "AUTHOR"
Written by Alper S\. Soylu <54alpersaid@gmail\.com>
.
.SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR>

View file

@ -1,167 +1,167 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-magic(1) - Automate add/commit/push routines</title> <title>git-magic(1) - Automate add/commit/push routines</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
body#manpage {margin:0} body#manpage {margin:0}
.mp {max-width:100ex;padding:0 9ex 1ex 4ex} .mp {max-width:100ex;padding:0 9ex 1ex 4ex}
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0} .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
.mp h2 {margin:10px 0 0 0} .mp h2 {margin:10px 0 0 0}
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex} .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
.mp h3 {margin:0 0 0 4ex} .mp h3 {margin:0 0 0 4ex}
.mp dt {margin:0;clear:left} .mp dt {margin:0;clear:left}
.mp dt.flush {float:left;width:8ex} .mp dt.flush {float:left;width:8ex}
.mp dd {margin:0 0 0 9ex} .mp dd {margin:0 0 0 9ex}
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left} .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
.mp pre {margin-bottom:20px} .mp pre {margin-bottom:20px}
.mp pre+h2,.mp pre+h3 {margin-top:22px} .mp pre+h2,.mp pre+h3 {margin-top:22px}
.mp h2+pre,.mp h3+pre {margin-top:5px} .mp h2+pre,.mp h3+pre {margin-top:5px}
.mp img {display:block;margin:auto} .mp img {display:block;margin:auto}
.mp h1.man-title {display:none} .mp h1.man-title {display:none}
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143} .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
.mp h2 {font-size:16px;line-height:1.25} .mp h2 {font-size:16px;line-height:1.25}
.mp h1 {font-size:20px;line-height:2} .mp h1 {font-size:20px;line-height:2}
.mp {text-align:justify;background:#fff} .mp {text-align:justify;background:#fff}
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211} .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201} .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
.mp u {text-decoration:underline} .mp u {text-decoration:underline}
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211} .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none} .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff} .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
.mp b.man-ref {font-weight:normal;color:#434241} .mp b.man-ref {font-weight:normal;color:#434241}
.mp pre {padding:0 4ex} .mp pre {padding:0 4ex}
.mp pre code {font-weight:normal;color:#434241} .mp pre code {font-weight:normal;color:#434241}
.mp h2+pre,h3+pre {padding-left:0} .mp h2+pre,h3+pre {padding-left:0}
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px} ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
ol.man-decor {width:100%} ol.man-decor {width:100%}
ol.man-decor li.tl {text-align:left} ol.man-decor li.tl {text-align:left}
ol.man-decor li.tc {text-align:center;letter-spacing:4px} ol.man-decor li.tc {text-align:center;letter-spacing:4px}
ol.man-decor li.tr {text-align:right;float:right} ol.man-decor li.tr {text-align:right;float:right}
</style> </style>
</head> </head>
<!-- <!--
The following styles are deprecated and will be removed at some point: The following styles are deprecated and will be removed at some point:
div#man, div#man ol.man, div#man ol.head, div#man ol.man. div#man, div#man ol.man, div#man ol.head, div#man ol.man.
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
.man-navigation should be used instead. .man-navigation should be used instead.
--> -->
<body id='manpage'> <body id='manpage'>
<div class='mp' id='man'> <div class='mp' id='man'>
<div class='man-navigation' style='display:none'> <div class='man-navigation' style='display:none'>
<a href="#NAME">NAME</a> <a href="#NAME">NAME</a>
<a href="#SYNOPSIS">SYNOPSIS</a> <a href="#SYNOPSIS">SYNOPSIS</a>
<a href="#DESCRIPTION">DESCRIPTION</a> <a href="#DESCRIPTION">DESCRIPTION</a>
<a href="#OPTIONS">OPTIONS</a> <a href="#OPTIONS">OPTIONS</a>
<a href="#EXAMPLES">EXAMPLES</a> <a href="#EXAMPLES">EXAMPLES</a>
<a href="#AUTHOR">AUTHOR</a> <a href="#AUTHOR">AUTHOR</a>
<a href="#REPORTING-BUGS">REPORTING BUGS</a> <a href="#REPORTING-BUGS">REPORTING BUGS</a>
<a href="#SEE-ALSO">SEE ALSO</a> <a href="#SEE-ALSO">SEE ALSO</a>
</div> </div>
<ol class='man-decor man-head man head'> <ol class='man-decor man-head man head'>
<li class='tl'>git-magic(1)</li> <li class='tl'>git-magic(1)</li>
<li class='tc'>Git Extras</li> <li class='tc'>Git Extras</li>
<li class='tr'>git-magic(1)</li> <li class='tr'>git-magic(1)</li>
</ol> </ol>
<h2 id="NAME">NAME</h2>
<p class="man-name">
<h2 id="NAME">NAME</h2> <code>git-magic</code> - <span class="man-whatis">Automate add/commit/push routines</span>
<p class="man-name"> </p>
<code>git-magic</code> - <span class="man-whatis">Automate add/commit/push routines</span>
</p> <h2 id="SYNOPSIS">SYNOPSIS</h2>
<h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-magic</code> [-a] [-m <var>msg</var>] [-e] [-p] [-f]</p>
<p><code>git-magic</code> [-a] [-m <var>msg</var>] [-e] [-p] [-f]</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
<p>Produces summary of changes for commit message from <code>git status --porcelain</code> output.
<p>Produces summary of changes for commit message from <code>git status --porcelain</code> output. Commits staged changes with the generated commit message and
Commits staged changes with the generated commit message and opens editor to modify generated commit message optionally.
opens editor to modify generated commit message optionally. Also staging and pushing can be automated optionally.</p>
Also staging and pushing can be automated optionally.</p>
<h2 id="OPTIONS">OPTIONS</h2>
<h2 id="OPTIONS">OPTIONS</h2>
<p>-a</p>
<p>-a</p>
<p>Adds everything including untracked files.</p>
<p>Adds everything including untracked files.</p>
<p>-m <var>msg</var></p>
<p>-m <var>msg</var></p>
<p>Use the given <var>msg</var> as the commit message. If multiple -m options are given, their values are concatenated as separate paragraphs.
<p>Use the given <var>msg</var> as the commit message. If multiple -m options are given, their values are concatenated as separate paragraphs. Passed to git commit command. The generated is appended to user-given messages.</p>
Passed to git commit command. The generated is appended to user-given messages.</p>
<p>-e</p>
<p>-e</p>
<p>This option lets you further edit the generated message.
<p>This option lets you further edit the generated message. Passed to git commit command.</p>
Passed to git commit command.</p>
<p>-p</p>
<p>-p</p>
<p>Runs <code>git push</code> after commit.</p>
<p>Runs <code>git push</code> after commit.</p>
<p>-f</p>
<p>-f</p>
<p>Adds <code>-f</code> option to <code>git push</code> command.</p>
<p>Adds <code>--force-with-lease</code> option to <code>git push</code> command for safer force pushing.</p>
<p>-h</p>
<p>-h</p>
<p>Prints synopsis.</p>
<p>Prints synopsis.</p>
<h2 id="EXAMPLES">EXAMPLES</h2>
<h2 id="EXAMPLES">EXAMPLES</h2>
<p>This example stages all changes then commits with automatic commit message.</p>
<p>This example stages all changes then commits with automatic commit message.</p>
<pre><code>$ git magic -a
<pre><code>$ git magic -a [feature/magic dc2a11e] A man/git-magic.md
[feature/magic dc2a11e] A man/git-magic.md 1 file changed, 37 insertions(+)
1 file changed, 37 insertions(+) create mode 100644 man/git-auto.md
create mode 100644 man/git-auto.md # git log
# git log Author: overengineer &lt;54alpersaid@gmail.com&gt;
Author: overengineer &lt;54alpersaid@gmail.com&gt; Date: Thu Sep 30 20:14:22 2021 +0300
Date: Thu Sep 30 20:14:22 2021 +0300
M man/git-magic.md
M man/git-magic.md </code></pre>
</code></pre>
<p><code>-m</code> option PREPENDS generated message.</p>
<p><code>-m</code> option PREPENDS generated message.</p>
<pre><code>$ git magic -am "Added documentation for git magic"
<pre><code>$ git magic -am "Added documentation for git magic" [feature/magic dc2a11e] Added documentation for git magic
[feature/magic dc2a11e] Added documentation for git magic 1 file changed, 42 insertions(+), 0 deletions(-)
1 file changed, 42 insertions(+), 0 deletions(-) create mode 100644 A man/git-auto.md
create mode 100644 A man/git-auto.md $ git log
$ git log Author: overengineer &lt;54alpersaid@gmail.com&gt;
Author: overengineer &lt;54alpersaid@gmail.com&gt; Date: Thu Sep 30 20:14:22 2021 +0300
Date: Thu Sep 30 20:14:22 2021 +0300
Added documentation for git magic
Added documentation for git magic
M man/git-magic.md
M man/git-magic.md </code></pre>
</code></pre>
<h2 id="AUTHOR">AUTHOR</h2>
<h2 id="AUTHOR">AUTHOR</h2>
<p>Written by Alper S. Soylu &lt;54alpersaid@gmail.com></p>
<p>Written by Alper S. Soylu <a href="mailto:54alpersaid@gmail.com" data-bare-link="true">54alpersaid@gmail.com</a></p>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
<p>&lt;<a href="https://github.com/tj/git-extras/issues" data-bare-link="true">https://github.com/tj/git-extras/issues</a>&gt;</p>
<p>&lt;<a href="https://github.com/tj/git-extras/issues" data-bare-link="true">https://github.com/tj/git-extras/issues</a>&gt;</p>
<h2 id="SEE-ALSO">SEE ALSO</h2>
<h2 id="SEE-ALSO">SEE ALSO</h2>
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>September 2025</li> <li class='tc'>May 2023</li>
<li class='tr'>git-magic(1)</li> <li class='tr'>git-magic(1)</li>
</ol> </ol>
</div> </div>
</body> </body>
</html> </html>

View file

@ -34,7 +34,7 @@ Runs `git push` after commit.
-f -f
Adds `--force-with-lease` option to `git push` command for safer force pushing. Adds `-f` option to `git push` command.
-h -h

View file

@ -28,7 +28,7 @@ The name of the remote to fetch from\. Defaults to \fBorigin\fR\.
<url> <url>
. .
.P .P
GitLab merge request URL in the format \fBhttps://gitlab\.tld/owner/repository/merge_requests/453\fR, or a Forgejo/Codeberg pull request URL in the format \fBhttps://codeberg\.tld/owner/repository/pulls/453\fR\. GitLab merge request URL in the format \fBhttps://gitlab\.tld/owner/repository/merge_requests/453\fR\.
. .
.SH "EXAMPLES" .SH "EXAMPLES"
This checks out merge request \fB!51\fR from remote \fBorigin\fR to branch \fBmr/51\fR\. This checks out merge request \fB!51\fR from remote \fBorigin\fR to branch \fBmr/51\fR\.
@ -46,22 +46,6 @@ Switched to branch \'mr/51\'
. .
.IP "" 0 .IP "" 0
. .
.P
This checks out pull request \fB#51\fR from a Forgejo/Codeberg URL to branch \fBmr/51\fR\.
.
.IP "" 4
.
.nf
$ git mr https://codeberg\.org/owner/repository/pulls/51
From codeberg\.org:owner/repository
* [new ref] refs/pull/51/head \-> mr/51
Switched to branch \'mr/51\'
.
.fi
.
.IP "" 0
.
.SH "AUTHOR" .SH "AUTHOR"
Written by Étienne BERSAC \fIbersace03@gmail\.com\fR from git\-pr(1)\. Written by Étienne BERSAC \fIbersace03@gmail\.com\fR from git\-pr(1)\.
. .

View file

@ -94,9 +94,7 @@
<p> &lt;url&gt;</p> <p> &lt;url&gt;</p>
<p> GitLab merge request URL in the format <p> GitLab merge request URL in the format
<code>https://gitlab.tld/owner/repository/merge_requests/453</code>, or a <code>https://gitlab.tld/owner/repository/merge_requests/453</code>.</p>
Forgejo/Codeberg pull request URL in the format
<code>https://codeberg.tld/owner/repository/pulls/453</code>.</p>
<h2 id="EXAMPLES">EXAMPLES</h2> <h2 id="EXAMPLES">EXAMPLES</h2>
@ -108,14 +106,6 @@ From gitlab.com:owner/repository
Switched to branch 'mr/51' Switched to branch 'mr/51'
</code></pre> </code></pre>
<p>This checks out pull request <code>#51</code> from a Forgejo/Codeberg URL to branch <code>mr/51</code>.</p>
<pre><code>$ git mr https://codeberg.org/owner/repository/pulls/51
From codeberg.org:owner/repository
* [new ref] refs/pull/51/head -&gt; mr/51
Switched to branch 'mr/51'
</code></pre>
<h2 id="AUTHOR">AUTHOR</h2> <h2 id="AUTHOR">AUTHOR</h2>
<p>Written by Étienne BERSAC <a href="&#109;&#x61;&#x69;&#x6c;&#116;&#x6f;&#58;&#x62;&#101;&#x72;&#115;&#97;&#x63;&#101;&#48;&#x33;&#64;&#103;&#x6d;&#x61;&#x69;&#108;&#x2e;&#99;&#x6f;&#109;" data-bare-link="true">&#x62;&#101;&#114;&#115;&#x61;&#x63;&#101;&#48;&#51;&#64;&#x67;&#109;&#97;&#x69;&#x6c;&#46;&#x63;&#111;&#109;</a> from <a class="man-ref" href="git-pr.html">git-pr<span class="s">(1)</span></a>.</p> <p>Written by Étienne BERSAC <a href="&#109;&#x61;&#x69;&#x6c;&#116;&#x6f;&#58;&#x62;&#101;&#x72;&#115;&#97;&#x63;&#101;&#48;&#x33;&#64;&#103;&#x6d;&#x61;&#x69;&#108;&#x2e;&#99;&#x6f;&#109;" data-bare-link="true">&#x62;&#101;&#114;&#115;&#x61;&#x63;&#101;&#48;&#51;&#64;&#x67;&#109;&#97;&#x69;&#x6c;&#46;&#x63;&#111;&#109;</a> from <a class="man-ref" href="git-pr.html">git-pr<span class="s">(1)</span></a>.</p>

View file

@ -21,9 +21,7 @@ git-mr(1) -- Checks out a merge request locally
&lt;url&gt; &lt;url&gt;
GitLab merge request URL in the format GitLab merge request URL in the format
`https://gitlab.tld/owner/repository/merge_requests/453`, or a `https://gitlab.tld/owner/repository/merge_requests/453`.
Forgejo/Codeberg pull request URL in the format
`https://codeberg.tld/owner/repository/pulls/453`.
## EXAMPLES ## EXAMPLES
@ -35,13 +33,6 @@ This checks out merge request `!51` from remote `origin` to branch `mr/51`.
* [new ref] refs/merge-requests/51/head -> mr/51 * [new ref] refs/merge-requests/51/head -> mr/51
Switched to branch 'mr/51' Switched to branch 'mr/51'
This checks out pull request `#51` from a Forgejo/Codeberg URL to branch `mr/51`.
$ git mr https://codeberg.org/owner/repository/pulls/51
From codeberg.org:owner/repository
* [new ref] refs/pull/51/head -> mr/51
Switched to branch 'mr/51'
## AUTHOR ## AUTHOR
Written by Étienne BERSAC <bersace03@gmail.com> from git-pr(1). Written by Étienne BERSAC <bersace03@gmail.com> from git-pr(1).

View file

@ -1,41 +1,58 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn/v0.7.3
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/rtomayko/ronn/tree/0.7.3
.TH "GIT\-PULL\-REQUEST" "1" "March 2026" "" "Git Extras" .
.TH "GIT\-PULL\-REQUEST" "1" "August 2020" "" "Git Extras"
.
.SH "NAME" .SH "NAME"
\fBgit\-pull\-request\fR \- Create pull request for GitHub project \fBgit\-pull\-request\fR \- Create pull request for GitHub project
.
.SH "SYNOPSIS" .SH "SYNOPSIS"
\fBgit\-pull\-request\fR [<branch>] \fBgit\-pull\-request\fR [<target branch>]
.
.SH "DESCRIPTION" .SH "DESCRIPTION"
Create pull request for a project on GitHub via command line\. Create pull request for a project on GitHub via command line\.
.
.P .P
A personal access token is required for making the API call to open the pull request(s) in GitHub\. API Documentation here \fIhttps://docs\.github\.com/en/rest/reference/pulls#create\-a\-pull\-request\fR A personal access token is required for making the API call to open the pull request(s) in GitHub\. API Documentation here \fIhttps://docs\.github\.com/en/rest/reference/pulls#create\-a\-pull\-request\fR
.
.P .P
Make sure the personal access token has the right \fBOAuth\fR scopes for the repo(s) Make sure the personal access token has the right \fBOAuth\fR scopes for the repo(s)
.
.P .P
Use \fBGITHUB_TOKEN\fR environment variable, or \fBgit config \-\-global \-\-add git\-extras\.github\-personal\-access\-token <your\-personal\-access\-token>\fR Use \fBgit config \-\-global \-\-add git\-extras\.github\-personal\-access\-token <your\-personal\-access\-token>\fR
.
.P .P
If using multiple accounts, override the global value in the specific repo using \fBgit config git\-extras\.github\-personal\-access\-token <other\-acc\-personal\-access\-token>\fR If using multiple accounts, override the global value in the specific repo using \fBgit config git\-extras\.github\-personal\-access\-token <other\-acc\-personal\-access\-token>\fR
.
.SH "OPTIONS" .SH "OPTIONS"
<branch> <target branch>
.
.P .P
The local branch to push and use as the pull request head\. The base branch is prompted separately\. The target branch you want to send pull request to\.
.
.SH "EXAMPLES" .SH "EXAMPLES"
.
.nf .nf
$ git pull\-request master $ git pull\-request master
Everything up\-to\-date Everything up\-to\-date
create pull\-request for spacewander/spacewander\-toolbox 'master' create pull\-request for spacewander/spacewander\-toolbox \'master\'
title: test title: test
body: body:
base [master]: base [master]:
GitHub two\-factor authentication code (leave blank if not set up): GitHub two\-factor authentication code (leave blank if not set up):
\|\.\|\.\|\. \.\.\.
.
.fi .fi
.
.SH "AUTHOR" .SH "AUTHOR"
Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR> Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR>
.
.SH "REPORTING BUGS" .SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR> <\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO" .SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR> <\fIhttps://github\.com/tj/git\-extras\fR>

View file

@ -1,8 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'> <meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-pull-request(1) - Create pull request for GitHub project</title> <title>git-pull-request(1) - Create pull request for GitHub project</title>
<style type='text/css' media='all'> <style type='text/css' media='all'>
/* style: man */ /* style: man */
@ -69,15 +69,14 @@
<li class='tr'>git-pull-request(1)</li> <li class='tr'>git-pull-request(1)</li>
</ol> </ol>
<h2 id="NAME">NAME</h2>
<h2 id="NAME">NAME</h2>
<p class="man-name"> <p class="man-name">
<code>git-pull-request</code> - <span class="man-whatis">Create pull request for GitHub project</span> <code>git-pull-request</code> - <span class="man-whatis">Create pull request for GitHub project</span>
</p> </p>
<h2 id="SYNOPSIS">SYNOPSIS</h2> <h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-pull-request</code> [&lt;branch&gt;]</p> <p><code>git-pull-request</code> [&lt;target branch&gt;]</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2> <h2 id="DESCRIPTION">DESCRIPTION</h2>
@ -87,15 +86,15 @@
<p>Make sure the personal access token has the right <code>OAuth</code> scopes for the repo(s)</p> <p>Make sure the personal access token has the right <code>OAuth</code> scopes for the repo(s)</p>
<p>Use <code>GITHUB_TOKEN</code> environment variable, or <code>git config --global --add git-extras.github-personal-access-token &lt;your-personal-access-token&gt;</code></p> <p>Use <code>git config --global --add git-extras.github-personal-access-token &lt;your-personal-access-token></code></p>
<p>If using multiple accounts, override the global value in the specific repo using <code>git config git-extras.github-personal-access-token &lt;other-acc-personal-access-token&gt;</code></p> <p>If using multiple accounts, override the global value in the specific repo using <code>git config git-extras.github-personal-access-token &lt;other-acc-personal-access-token></code></p>
<h2 id="OPTIONS">OPTIONS</h2> <h2 id="OPTIONS">OPTIONS</h2>
<p>&lt;branch&gt;</p> <p>&lt;target branch&gt;</p>
<p>The local branch to push and use as the pull request head. The base branch is prompted separately.</p> <p>The target branch you want to send pull request to.</p>
<h2 id="EXAMPLES">EXAMPLES</h2> <h2 id="EXAMPLES">EXAMPLES</h2>
@ -114,7 +113,7 @@ Everything up-to-date
<h2 id="AUTHOR">AUTHOR</h2> <h2 id="AUTHOR">AUTHOR</h2>
<p>Written by Tj Holowaychuk &lt;<a href="mailto:tj@vision-media.ca" data-bare-link="true">tj@vision-media.ca</a>&gt;</p> <p>Written by Tj Holowaychuk &lt;<a href="&#109;&#97;&#105;&#108;&#x74;&#111;&#x3a;&#x74;&#x6a;&#64;&#118;&#x69;&#x73;&#105;&#x6f;&#x6e;&#x2d;&#109;&#x65;&#x64;&#x69;&#97;&#46;&#99;&#97;" data-bare-link="true">&#116;&#x6a;&#x40;&#118;&#x69;&#x73;&#105;&#x6f;&#x6e;&#45;&#109;&#x65;&#x64;&#x69;&#97;&#x2e;&#x63;&#97;</a>&gt;</p>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2> <h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
@ -124,9 +123,10 @@ Everything up-to-date
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p> <p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>March 2026</li> <li class='tc'>August 2020</li>
<li class='tr'>git-pull-request(1)</li> <li class='tr'>git-pull-request(1)</li>
</ol> </ol>

View file

@ -3,7 +3,7 @@ git-pull-request(1) -- Create pull request for GitHub project
## SYNOPSIS ## SYNOPSIS
`git-pull-request` [&lt;branch&gt;] `git-pull-request` [&lt;target branch&gt;]
## DESCRIPTION ## DESCRIPTION
@ -13,15 +13,15 @@ A personal access token is required for making the API call to open the pull req
Make sure the personal access token has the right `OAuth` scopes for the repo(s) Make sure the personal access token has the right `OAuth` scopes for the repo(s)
Use `GITHUB_TOKEN` environment variable, or `git config --global --add git-extras.github-personal-access-token <your-personal-access-token>` Use `git config --global --add git-extras.github-personal-access-token <your-personal-access-token>`
If using multiple accounts, override the global value in the specific repo using `git config git-extras.github-personal-access-token <other-acc-personal-access-token>` If using multiple accounts, override the global value in the specific repo using `git config git-extras.github-personal-access-token <other-acc-personal-access-token>`
## OPTIONS ## OPTIONS
&lt;branch&gt; &lt;target branch&gt;
The local branch to push and use as the pull request head. The base branch is prompted separately. The target branch you want to send pull request to.
## EXAMPLES ## EXAMPLES

View file

@ -1,90 +1,131 @@
.\" generated with Ronn-NG/v0.10.1 .\" generated with Ronn/v0.7.3
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 .\" http://github.com/rtomayko/ronn/tree/0.7.3
.TH "GIT\-RELEASE" "1" "March 2026" "" "Git Extras" .
.TH "GIT\-RELEASE" "1" "April 2022" "" "Git Extras"
.
.SH "NAME" .SH "NAME"
\fBgit\-release\fR \- Commit, tag and push changes to the repository \fBgit\-release\fR \- Commit, tag and push changes to the repository
.
.SH "SYNOPSIS" .SH "SYNOPSIS"
.TS \fBgit\-release\fR [<tagname> | \-\-semver <name>] [\-r <remote>] [\-m <commit info>] [\-\-no\-empty\-commit] [\-c] [\-s] [\-u <key\-id>] [\-\-prefix <tag prefix>] [[\-\-] <hook arguments\.\.\.>]
allbox; .
\fBgit\-release\fR [<tagname> \-\-semver <name>] [\-r <remote>] [\-m <commit info>] [\-\-no\-empty\-commit] [\-c] [\-s] [\-u <key\-id>] [\-\-prefix <tag prefix>] [[\-\-] <hook arguments\|\.\|\.\|\.>]
.TE
.SH "DESCRIPTION" .SH "DESCRIPTION"
Commits changes with message "Release <tagname>" or custom commit information, tags with the given <tagname> and pushes the branch / tags\. Commits changes with message "Release <tagname>" or custom commit information, tags with the given <tagname> and pushes the branch / tags\.
.
.P .P
This command always creates a release commit, which could be empty if nothing changed\. It works like \fBgit merge \-\-no\-ff\fR\. If you don't like the behavior, you could add \fB\-\-no\-empty\-commit\fR to skip it\. This command always creates a release commit, which could be empty if nothing changed\. It works like \fBgit merge \-\-no\-ff\fR\. If you don\'t like the behavior, you could add \fB\-\-no\-empty\-commit\fR to skip it\.
.
.P .P
Optionally it generates a changelog (see git\-changelog) and a remote can be defined\. The order of first \-c or \-r does not matter\. Optionally it generates a changelog (see git\-changelog) and a remote can be defined\. The order of first \-c or \-r does not matter\.
.
.P .P
If \fB\.git/hooks/pre\-release\fR or \fB\.git/hooks/post\-release\fR exist, they will be triggered with \fBtagname\fR and extra hook arguments before/after the release\. If \fB\.git/hook/pre\-release\fR or \fB\.git/hook/post\-release\fR exist, they will be triggered with \fBtagname\fR and extra hook arguments before/after the release\.
.
.SH "OPTIONS" .SH "OPTIONS"
\-\-semver <name> \-\-semver <name>
.
.P .P
If the latest tag in your repo matches the semver format requirement, you could increase part of it as the new release tag with this option\. The name must be one of the \fBmajor\fR, \fBminor\fR, \fBpatch\fR\. For example, assumed the latest tag is \fB4\.4\.0\fR, with \fBgit release \-\-semver minor\fR you will make a new release with tag \fB4\.5\.0\fR\. Use \fB\-\-prefix\fR if tag has a character before semver\. If the latest tag in your repo matches the semver format requirement, you could increase part of it as the new release tag with this option\. The name must be one of the \fBmajor\fR, \fBminor\fR, \fBpatch\fR\. For example, assumed the latest tag is \fB4\.4\.0\fR, with \fBgit release \-\-semver minor\fR you will make a new release with tag \fB4\.5\.0\fR\. Use \fB\-\-prefix\fR if tag has a character before semver\.
.
.P .P
<tagname> <tagname>
.
.P .P
The name of the newly created tag\. Also used in tag comment\. The name of the newly created tag\. Also used in tag comment\.
.
.P .P
\-\-prefix <tag prefix> \-\-prefix <tag prefix>
.
.P .P
Use a prefix with a semver tag\. \fBgit release \-\-semver minor \-\-prefix r\fR would increment the latest tag r4\.4\.0 to r4\.5\.0\. This prefix can be any length, without spaces\. Use a prefix with a semver tag\. \fBgit release \-\-semver minor \-\-prefix r\fR would increment the latest tag r4\.4\.0 to r4\.5\.0\. This prefix can be any length, without spaces\.
.
.P .P
\-r <remote> \-r <remote>
.
.P .P
The "remote" repository that is destination of a push operation: it is passed to git push\. The "remote" repository that is destination of a push operation: it is passed to git push\.
.
.P .P
\-m <commit info> \-m <commit info>
.
.P .P
use the custom commit information instead of the default message "Release <tagname>" \. use the custom commit information instead of the default message "Release <tagname>" \.
.
.P .P
\-\-no\-empty\-commit \-\-no\-empty\-commit
.
.P .P
Avoid creating empty commit if nothing could be committed\. Avoid creating empty commit if nothing could be committed\.
.
.P .P
\-c \-c
.
.P .P
Generates or populates the changelog with all commit message since the last tag\. For more info see git\-changelog\.\. Generates or populates the changelog with all commit message since the last tag\. For more info see git\-changelog\.\.
.
.P .P
\-s \-s
.
.P .P
Create a signed and annotated tag\. Create a signed and annotated tag\.
.
.P .P
\-u <key\-id> \-u <key\-id>
.
.P .P
Create a tag, annotated and signed with the given key\. Create a tag, annotated and signed with the given key\.
.
.P .P
[\-\-] hook arguments\|\.\|\.\|\. [\-\-] hook arguments\.\.\.
.
.P .P
The arguments listed after "\-\-" separator will be passed to pre/post\-release hook following the \fBtagname\fR\. The arguments listed after "\-\-" separator will be passed to pre/post\-release hook following the \fBtagname\fR\.
.
.SH "EXAMPLES" .SH "EXAMPLES"
.
.IP "\(bu" 4 .IP "\(bu" 4
Release commit with the given <tagname>\. Release commit with the given <tagname>\.
.
.IP .IP
$ git release 0\.1\.0 $ git release 0\.1\.0
.
.IP "\(bu" 4 .IP "\(bu" 4
Release commit with the given <tagname> and custom commit message\. Release commit with the given <tagname> and custom commit message\.
.
.IP .IP
$ git release 0\.1\.0 \-m "+ powerful feature added\." $ git release 0\.1\.0 \-m "+ powerful feature added\."
.
.IP "\(bu" 4 .IP "\(bu" 4
Release commit with the given <tagname> and push to specific remote\. Release commit with the given <tagname> and push to specific remote\.
.
.IP .IP
$ git release 0\.1\.0 \-r github $ git release 0\.1\.0 \-r github
.
.IP "\(bu" 4 .IP "\(bu" 4
Release commit with the given <tagname> and populate changelog\. Release commit with the given <tagname> and populate changelog\.
.
.IP .IP
$ git release 0\.1\.0 \-c $ git release 0\.1\.0 \-c
.
.IP "\(bu" 4 .IP "\(bu" 4
Release commit with the given <tagname>, populate changelog, and push to specific remote\. Release commit with the given <tagname>, populate changelog, and push to specific remote\.
.
.IP .IP
$ git release 0\.1\.0 \-r github \-c $ git release 0\.1\.0 \-r github \-c
.
.IP "\(bu" 4 .IP "\(bu" 4
Release commit with the given <tagname>, pass <tagname> and extra argument to release hook, populate changelog, and push to specific remote\. Release commit with the given <tagname>, pass <tagname> and extra argument to release hook, populate changelog, and push to specific remote\.
.
.IP .IP
$ git release 0\.1\.0 \-r github \-c \-\- \-\-signature\-required $ git release 0\.1\.0 \-r github \-c \-\- \-\-signature\-required
.
.IP "" 0 .IP "" 0
.
.SH "AUTHOR" .SH "AUTHOR"
Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR> Extended by David Hartmann <\fIdh@tsl\.io\fR> Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR> Extended by David Hartmann <\fIdh@tsl\.io\fR>
.
.SH "REPORTING BUGS" .SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR> <\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO" .SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR> <\fIhttps://github\.com/tj/git\-extras\fR>

Some files were not shown because too many files have changed in this diff Show more