mirror of
https://github.com/tj/git-extras.git
synced 2026-09-10 15:36:21 -04:00
Compare commits
108 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4cf28ec559 | ||
|
|
09b77e8ed6 | ||
|
|
4c38988ba9 | ||
|
|
dbf68bac59 | ||
|
|
03569856db | ||
|
|
d11e45f0b1 | ||
|
|
fd2e03cf55 | ||
|
|
5a14757944 | ||
|
|
b450b36036 | ||
|
|
7f36d37283 | ||
|
|
184d37e980 | ||
|
|
e92878b81b | ||
|
|
b9e1d88f2c | ||
|
|
99207eee8e | ||
|
|
9d6319becb | ||
|
|
2bdeb59a73 | ||
|
|
c5a0fdf660 | ||
|
|
8d1c970031 | ||
|
|
c06fad59d2 | ||
|
|
65dd36ae62 | ||
|
|
967e339f91 | ||
|
|
ae3d30fb6e | ||
|
|
032090e847 | ||
|
|
5367101f2e | ||
|
|
6ed2643252 | ||
|
|
b9bd309a87 | ||
|
|
6f4cf0c1bb | ||
|
|
f5c48e4842 | ||
|
|
daf9d4148e | ||
|
|
eb34655aea | ||
|
|
1f1320f4d6 | ||
|
|
4d05955bc5 | ||
|
|
b57eb8b92a | ||
|
|
cf6d40d446 | ||
|
|
14586c7da0 | ||
|
|
5c9a7a2533 | ||
|
|
215382b12d | ||
|
|
13cbdfc51e | ||
|
|
3ddc315a76 | ||
|
|
c63b46a33b | ||
|
|
d4cd272556 | ||
|
|
783812b627 | ||
|
|
c49ca70814 | ||
|
|
18ecffef5e | ||
|
|
aadf5f874b | ||
|
|
18d1017325 | ||
|
|
a841845d9a | ||
|
|
8eed5f49ad | ||
|
|
64687599ae | ||
|
|
8ce63003c0 | ||
|
|
1a9b0c2ab4 | ||
|
|
82cc37d0f5 | ||
|
|
df53711fc7 | ||
|
|
e691826b4b | ||
|
|
fdaca2cd26 | ||
|
|
3db275cbe2 | ||
|
|
1345c5977d | ||
|
|
2f4b57d52b | ||
|
|
c23da8ae9c | ||
|
|
f1f50ac5ba | ||
|
|
0989b773de | ||
|
|
65203312c1 | ||
|
|
a2c424aada | ||
|
|
d291b2775c | ||
|
|
fb0bc6950b | ||
|
|
21a086c009 | ||
|
|
8eb1d72f07 | ||
|
|
233686d2a2 | ||
|
|
5c3fb1b062 | ||
|
|
5ca9360109 | ||
|
|
16d1445271 | ||
|
|
4d2d393142 | ||
|
|
ffee88a246 | ||
|
|
da03b7b133 | ||
|
|
f0671e2733 | ||
|
|
2c161aae02 | ||
|
|
f0b9e18e54 | ||
|
|
c32869de37 | ||
|
|
e1a4e7195d | ||
|
|
b766a655ce | ||
|
|
e34dea9b7a | ||
|
|
3bac05e690 | ||
|
|
a7ad306a6b | ||
|
|
dcb8bd6c54 | ||
|
|
a1bf09e8e0 | ||
|
|
615ea971cb | ||
|
|
e692b9619a | ||
|
|
a17d2fb15d | ||
|
|
52897f73b9 | ||
|
|
5f19424a50 | ||
|
|
b54d8c7c50 | ||
|
|
9049967232 | ||
|
|
cdbcef3227 | ||
|
|
a4b637346d | ||
|
|
1843afb38a | ||
|
|
28b48c7432 | ||
|
|
2c2bd07693 | ||
|
|
e39b1ab6a6 | ||
|
|
058cb0763e | ||
|
|
3d964687fc | ||
|
|
ca18c6e552 | ||
|
|
cf9fe2d23f | ||
|
|
c13ab52138 | ||
|
|
58c5b50514 | ||
|
|
5020890c34 | ||
|
|
4d8060e8cb | ||
|
|
7a65311b1c | ||
|
|
186bbdcb87 |
|
|
@ -17,3 +17,14 @@ trim_trailing_whitespace = false
|
|||
|
||||
[*.html]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.py]
|
||||
indent_size = 4
|
||||
|
||||
[*.bats]
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
|
||||
[tests/*.sh]
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
|
|
|
|||
1
.github/.ignore_words
vendored
1
.github/.ignore_words
vendored
|
|
@ -1 +1,2 @@
|
|||
gool
|
||||
Cant
|
||||
|
|
|
|||
12
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
12
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<!--
|
||||
|
||||
Note
|
||||
|
||||
* Mark the PR as draft until it's ready to be reviewed.
|
||||
* Please update the documentation to reflect the changes made in the PR.
|
||||
* If the command is covered by tests under ./tests, please add/update tests for any changes unless you have a good reason.
|
||||
* Make a new commit to resolve conversations instead of `push -f`.
|
||||
* To resolve merge conflicts, merge from the `main` branch instead of rebasing over `main`.
|
||||
* Please wait for the reviewer to mark a conversation as resolved.
|
||||
|
||||
-->
|
||||
6
.github/dependabot.yml
vendored
Normal file
6
.github/dependabot.yml
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
108
.github/workflows/ci.yml
vendored
108
.github/workflows/ci.yml
vendored
|
|
@ -6,54 +6,90 @@ on:
|
|||
branches: [main]
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: 'ubuntu-latest'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code.
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: 'Get Changed Files'
|
||||
id: 'files'
|
||||
uses: 'masesgroup/retrieve-changed-files@v2'
|
||||
with:
|
||||
format: 'json'
|
||||
# a force push will cause the action above to fail. Don't do force push when people are
|
||||
# reviewing!
|
||||
- name: Check out code.
|
||||
uses: actions/checkout@v3
|
||||
- uses: 'actions/setup-go@v4'
|
||||
run: |
|
||||
CHANGED_FILES=$(git diff --name-only "${BASE_SHA:-$BEFORE_SHA}...${HEAD_SHA:-$GITHUB_REF}")
|
||||
echo "::notice::Changed files: $CHANGED_FILES"
|
||||
{
|
||||
echo "added_modified<<EOF"
|
||||
echo "$CHANGED_FILES"
|
||||
echo "EOF"
|
||||
} >> "$GITHUB_OUTPUT"
|
||||
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:
|
||||
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'
|
||||
run: |
|
||||
sudo apt install -y jq
|
||||
go install 'github.com/editorconfig-checker/editorconfig-checker/cmd/editorconfig-checker@latest'
|
||||
|
||||
readarray -t changed_files <<<"$(jq -r '.[]' <<<'${{ steps.files.outputs.added_modified }}')"
|
||||
~/go/bin/editorconfig-checker ${changed_files[@]}
|
||||
run: echo "$FILES" | xargs ~/go/bin/editorconfig-checker
|
||||
env:
|
||||
# NOTE: use env to pass the output in order to avoid possible injection attacks
|
||||
FILES: "${{ steps.files.outputs.added_modified }}"
|
||||
- name: checkstyle
|
||||
run: ./scripts/checkstyle.py
|
||||
- name: Shellcheck
|
||||
run: shellcheck --severity=error bin/* ./*.sh
|
||||
|
||||
typo:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code.
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v7
|
||||
- name: Install codespell
|
||||
run: python3 -m pip install codespell==2.4
|
||||
- name: spell check
|
||||
run: |
|
||||
pip install codespell==2.2
|
||||
git grep --cached -l '' | grep -v -e 'History\.md' -e 'AUTHORS' -e 'man/.*\.1' -e 'man/.*\.html' | xargs codespell --ignore-words=.github/.ignore_words
|
||||
git grep --cached -l '' . | \
|
||||
grep -v -e 'History\.md' -e 'AUTHORS' -e 'man/.*\.1' -e 'man/.*\.html' | \
|
||||
xargs codespell --ignore-words=.github/.ignore_words
|
||||
|
||||
test:
|
||||
test-bats:
|
||||
name: 'Test with Bats'
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python 3.10
|
||||
uses: actions/setup-python@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
python-version: '3.10'
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install pytest==7.4.0
|
||||
pip install GitPython==3.1.36
|
||||
- name: Unit test
|
||||
run: make test
|
||||
submodules: recursive
|
||||
- name: Setup Bats
|
||||
id: setup-bats
|
||||
uses: bats-core/bats-action@4.0.0
|
||||
with:
|
||||
bats-version: 'v1.8.1'
|
||||
- name: Test with Bats
|
||||
env:
|
||||
BATS_LIB_PATH: ${{ steps.setup-bats.outputs.lib-path }}
|
||||
TERM: xterm
|
||||
run: bats ./tests
|
||||
|
||||
build:
|
||||
strategy:
|
||||
|
|
@ -65,14 +101,12 @@ jobs:
|
|||
runs-on: ${{ matrix.platform }}
|
||||
steps:
|
||||
- name: Check out code.
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v7
|
||||
- name: Linux Install
|
||||
if: matrix.platform == 'ubuntu-22.04'
|
||||
run: |
|
||||
sudo apt-get install -y bsdmainutils
|
||||
if: matrix.platform == 'ubuntu-latest'
|
||||
run: sudo apt-get install -y bsdmainutils
|
||||
- name: Script
|
||||
run: |
|
||||
./check_integrity.sh $(find bin | cut -b 5- | xargs)
|
||||
run: ./check_integrity.sh
|
||||
- name: Brew release
|
||||
if: matrix.platform == 'macos-latest'
|
||||
run: |
|
||||
|
|
|
|||
18
.github/workflows/stale.yaml
vendored
Normal file
18
.github/workflows/stale.yaml
vendored
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
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
|
||||
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
.venv/
|
||||
__pycache__/
|
||||
coverage/
|
||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[submodule "vendor/bats-all"]
|
||||
path = vendor/bats-all
|
||||
url = https://github.com/hyperupcall/bats-all
|
||||
|
|
@ -2,3 +2,4 @@
|
|||
minversion = 7.4
|
||||
addopts = -ra -q
|
||||
testpaths = tests
|
||||
faulthandler_timeout = 5
|
||||
|
|
|
|||
36
AUTHORS
36
AUTHORS
|
|
@ -1,23 +1,20 @@
|
|||
git-extras is written and maintained by TJ Holowaychuk and
|
||||
various contributors:
|
||||
|
||||
Development Lead
|
||||
````````````````
|
||||
- TJ Holowaychuk <tj@vision-media.ca>
|
||||
git-extras is written and maintained by various contributors:
|
||||
|
||||
Maintainers
|
||||
```````````
|
||||
- TJ Holowaychuk <tj@vision-media.ca>
|
||||
- Hemanth.HM <hemanth.hm@gmail.com>
|
||||
- Nimit Kalra <me@nimit.io>
|
||||
- Nicolai Skogheim <nicolai.skogheim@gmail.com>
|
||||
- spacewander <spacewanderlzx@gmail.com>
|
||||
- Edwin Kofler <edwin@kofler.dev>
|
||||
- Leroy <vanpipy@gmail.com>
|
||||
|
||||
Patches and Suggestions
|
||||
```````````````````````
|
||||
- Jonhnny Weslley
|
||||
- Tobias Fendin
|
||||
- LeeW
|
||||
- Edwin Kofler
|
||||
- timfeirg
|
||||
- Niklas Schlimm
|
||||
- nickl-
|
||||
|
|
@ -42,18 +39,21 @@ Patches and Suggestions
|
|||
- Luke Childs
|
||||
- Sasha Khamkov
|
||||
- equt
|
||||
- oikarinen
|
||||
- vyas
|
||||
- Don Harper
|
||||
- Pierre Ayoub
|
||||
- Robin Winslow
|
||||
- Ross Smith II
|
||||
- Yi EungJun
|
||||
- grindhold
|
||||
- wyattscarpenter
|
||||
- Aggelos Orfanakos
|
||||
- Camille Reynders
|
||||
- Carlos Prado
|
||||
- Chris Hall
|
||||
- Damian Krzeminski
|
||||
- NANRI
|
||||
- vanpipy
|
||||
- Alexander Krasnukhin
|
||||
- Phally
|
||||
- Rico Sta. Cruz
|
||||
|
|
@ -64,11 +64,13 @@ Patches and Suggestions
|
|||
- Dominik Gedon
|
||||
- Hogan Long
|
||||
- Ivan Malopinsky
|
||||
- John Bachir
|
||||
- Jonathan "Duke" Leto
|
||||
- Julio Napurí
|
||||
- Justin Dugger
|
||||
- Nils Winkler
|
||||
- Philipp Klose
|
||||
- Raphael Boidol
|
||||
- Richard Russon
|
||||
- Sam Bostock
|
||||
- Vladimir Jimenez
|
||||
|
|
@ -84,6 +86,7 @@ Patches and Suggestions
|
|||
- Beth Skurrie
|
||||
- Brice Dutheil
|
||||
- Curtis McEnroe
|
||||
- Daniele Paolella
|
||||
- David Rogers
|
||||
- Devin Withers
|
||||
- Domenico Rotiroti
|
||||
|
|
@ -128,6 +131,7 @@ Patches and Suggestions
|
|||
- Andrew Griffiths
|
||||
- Andrew Marcinkevičius
|
||||
- Andrew Starr-Bochicchio
|
||||
- Andrew Sullivan Cant
|
||||
- Andrey Elizarov
|
||||
- Angel Aguilera
|
||||
- Antoine Beaupré
|
||||
|
|
@ -145,6 +149,7 @@ Patches and Suggestions
|
|||
- Christophe Badoit
|
||||
- Ciro Nunes
|
||||
- CleanMachine1
|
||||
- CodeByZach
|
||||
- Craig MacGregor
|
||||
- Dan Goodliffe
|
||||
- Dan Jackson
|
||||
|
|
@ -159,20 +164,24 @@ Patches and Suggestions
|
|||
- Edward Betts
|
||||
- Eli Schwartz
|
||||
- Emil Kjelsrud
|
||||
- Erik Skultety
|
||||
- François M
|
||||
- George Crabtree
|
||||
- Gerrit-K
|
||||
- Greg Allen
|
||||
- Guilhem Saurel
|
||||
- Guillermo Rauch
|
||||
- Gunnlaugur Thor Briem
|
||||
- Hasse Ramlev Hansen
|
||||
- Heiko Becker
|
||||
- Hugo Ruiz-Mireles
|
||||
- Isaac Mungai
|
||||
- J.C. Yamokoski
|
||||
- Jack O. Wasey
|
||||
- James Manning
|
||||
- James Zhu
|
||||
- Jan Krueger
|
||||
- Jared Baur
|
||||
- Jarod Stewart
|
||||
- Jason Young
|
||||
- Jens K. Mueller
|
||||
|
|
@ -184,6 +193,7 @@ Patches and Suggestions
|
|||
- John Evans
|
||||
- John Hoffmann
|
||||
- Jon Ander Peñalba
|
||||
- Josh McKinney
|
||||
- Joshua Appelman
|
||||
- José María Gutiérrez @TheTechOddBug
|
||||
- Katrin Leinweber
|
||||
|
|
@ -199,7 +209,9 @@ Patches and Suggestions
|
|||
- Mathieu D. (MatToufoutu)
|
||||
- Matt
|
||||
- Matt Colyer
|
||||
- Matt Headley
|
||||
- Matthew Avant
|
||||
- Mattias Andersson
|
||||
- Michael Komitee
|
||||
- Michael Matuzak
|
||||
- Michele Bologna
|
||||
|
|
@ -221,9 +233,13 @@ Patches and Suggestions
|
|||
- R. Martinho Fernandes
|
||||
- Raphael Fleischlin
|
||||
- Rasmus Wriedt Larsen
|
||||
- René
|
||||
- Revisor
|
||||
- Ricardo Fernández Serrata
|
||||
- Riceball LEE
|
||||
- Rob Kennedy
|
||||
- Robin von Bülow
|
||||
- Russ
|
||||
- Ryan Bohn
|
||||
- Sachin Gupta
|
||||
- Sam Thursfield
|
||||
|
|
@ -251,6 +267,8 @@ Patches and Suggestions
|
|||
- Vitaly Chikunov
|
||||
- Wei Lee
|
||||
- Wei Wu
|
||||
- Wen Sun
|
||||
- Wiktor Żurawik
|
||||
- Xavier Krantz
|
||||
- Xiaopei Li
|
||||
- Zeeshan Ahmed
|
||||
|
|
@ -259,11 +277,13 @@ Patches and Suggestions
|
|||
- dead-horse
|
||||
- eszabpt
|
||||
- fengkx
|
||||
- johnpyp
|
||||
- jykntr
|
||||
- kang
|
||||
- meza
|
||||
- neydroid
|
||||
- nulltask
|
||||
- phanium
|
||||
- sgleizes
|
||||
- tfendin
|
||||
- tiemonl
|
||||
|
|
|
|||
|
|
@ -1,15 +1,22 @@
|
|||
## Your new git-extra command should support
|
||||
# Contributing
|
||||
|
||||
* OSX, Linux, BSD (You may need to browse their man page)<sup>*</sup>
|
||||
* Bash 3.2+ (If you aren't sure, see [the Bash changelog](https://www.tldp.org/LDP/abs/html/bash2.html))
|
||||
* Git 2.1+
|
||||
Thanks for contributing! Please read this document before you make a PR.
|
||||
|
||||
<sup>*</sup>If you aren't able to test your new command on a platform,
|
||||
make that clear in your PR and someone else may be able to test it on their system.
|
||||
## Supported Platforms
|
||||
|
||||
## To submit a new command, you should
|
||||
Any changes must support the following platforms:
|
||||
|
||||
Let's assume your new command is named `foo`.
|
||||
- macOS
|
||||
- Linux
|
||||
- OpenBSD (You may need to browse their man page)
|
||||
|
||||
Your change must also be compatible with the dependency constraints that we specify in [Installation](./Installation.md). If you aren't sure if a feature is compatible, check the manual or release notes. For example, the Bash changelog is [here](https://git.savannah.gnu.org/cgit/bash.git/tree/NEWS?h=devel).
|
||||
|
||||
If you aren't able to test your new command on a platform, make that clear in your PR; someone else may be able to test it on their system.
|
||||
|
||||
## Adding a New Command
|
||||
|
||||
Let's say you wish to add a new command. Assuming your new command is named `foo`:
|
||||
|
||||
1. Write a bash script under `./bin` called `git-foo`. The script should be started with `#!/usr/bin/env bash`.
|
||||
2. Read `./man/Readme.md` and write documentation for `git-foo`.
|
||||
|
|
@ -17,6 +24,11 @@ Let's assume your new command is named `foo`.
|
|||
4. Update `./etc/git-extras-completion.zsh`. Just follow existing code.
|
||||
5. (Optional) Update `./etc/bash_completion.sh`.
|
||||
6. (Optional) Update `./etc/git-extras.fish`.
|
||||
7. Run `./check_integrity.sh foo` to check if all done.
|
||||
7. (Optional) Add a test under `./tests`.
|
||||
8. Run `./check_integrity.sh foo` to check if all done. (You may also run `./check_integrity.sh` to check all commands.)
|
||||
|
||||
You are welcome to open up an issue to discuss new commands or features before opening a pull request.
|
||||
|
||||
## Submitting a pull request
|
||||
|
||||
Please follow the suggestion in `./.github/PULL_REQUEST_TEMPLATE.md`.
|
||||
|
|
|
|||
162
Commands.md
162
Commands.md
|
|
@ -12,11 +12,13 @@
|
|||
- [`git clear-soft`](#git-clear-soft)
|
||||
- [`git coauthor`](#git-coauthor)
|
||||
- [`git commits-since`](#git-commits-since)
|
||||
- [`git continue`](#git-continue)
|
||||
- [`git contrib`](#git-contrib)
|
||||
- [`git count`](#git-count)
|
||||
- [`git cp`](#git-cp)
|
||||
- [`git create-branch`](#git-create-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-squashed-branches`](#git-delete-squashed-branches)
|
||||
- [`git delete-submodule`](#git-delete-submodule)
|
||||
|
|
@ -52,6 +54,7 @@
|
|||
- [`git rebase-patch`](#git-rebase-patch)
|
||||
- [`git release`](#git-release)
|
||||
- [`git rename-branch`](#git-rename-branch)
|
||||
- [`git rename-file`](#git-rename-file)
|
||||
- [`git rename-tag`](#git-rename-tag)
|
||||
- [`git rename-remote`](#git-rename-remote)
|
||||
- [`git repl`](#git-repl)
|
||||
|
|
@ -73,6 +76,8 @@
|
|||
- [`git undo`](#git-undo)
|
||||
- [`git unlock`](#git-unlock)
|
||||
- [`git utimes`](#git-utimes)
|
||||
- [`git unwip`](#git-unwip)
|
||||
- [`git wip`](#git-wip)
|
||||
|
||||
## git extras
|
||||
|
||||
|
|
@ -224,7 +229,7 @@ project : git-extras
|
|||
The `--line` option can also take a path, which will print a filtered summary for that folder or file.
|
||||
|
||||
The option `--output-style` tries to put as much summary information of the repo into defined styled way as possible.
|
||||
This is how the `tebular` output style and `oneline` output style look like
|
||||
This is how the `tabular` output style and `oneline` output style look like
|
||||
|
||||
```bash
|
||||
$ git summary --output-style tabular
|
||||
|
|
@ -278,11 +283,20 @@ usage: git bulk [-g] ([-a]|[-w <ws-name>]) <git command>
|
|||
git bulk --listall
|
||||
```
|
||||
|
||||
Register a workspace so that `git bulk` knows about it (notice that <ws-root-directory> must be absolute path):
|
||||
Register a workspace so that `git bulk` knows about it (it will be registered in your `.gitconfig`):
|
||||
|
||||
```bash
|
||||
$ 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.
|
||||
|
||||
```bash
|
||||
|
|
@ -359,6 +373,13 @@ $ git brv
|
|||
2020-01-08 master origin/master 265b03e Merge pull request #816 from spacewander/git-sed-pathspec
|
||||
```
|
||||
|
||||
When your repo has many branches, it can be more convenient to see this list in reverse. This can be set as the default by setting the git-extras.brv.reverse git option to true.
|
||||
|
||||
```bash
|
||||
$ git brv --reverse
|
||||
2020-01-08 master origin/master 265b03e Merge pull request #816 from spacewander/git-sed-pathspec
|
||||
2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv
|
||||
```
|
||||
|
||||
## git repl
|
||||
|
||||
|
|
@ -367,14 +388,53 @@ Git read-eval-print-loop. Lets you run `git` commands without typing 'git'.
|
|||
Commands can be prefixed with an exclamation mark (!) to be interpreted as
|
||||
a regular command.
|
||||
|
||||
Type `exit` or `quit` to end the repl session.
|
||||
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
|
||||
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
|
||||
$ git repl
|
||||
git version 2.9.2
|
||||
git-extras version 3.0.0
|
||||
type 'ls' to ls files below current directory,
|
||||
'!command' to execute any command or just 'subcommand' to execute any git subcommand
|
||||
git version 2.34.1
|
||||
git-extras version 7.3.0
|
||||
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.
|
||||
|
||||
git (master)> ls-files
|
||||
History.md
|
||||
|
|
@ -405,9 +465,9 @@ $ git coauthor user user@email.com
|
|||
2 files changed, 145 insertions(+), 0 deletions(-)
|
||||
create mode 100644 README.md
|
||||
create mode 100644 CONTRIBUTING.md
|
||||
|
||||
|
||||
$ git log -1
|
||||
|
||||
|
||||
commit b62ceae2685e6ece071f3c3754e9b77fd0a35c88 (HEAD -> master)
|
||||
Author: user person <userperson@email.com>
|
||||
Date: Sat Aug 17 17:33:53 2019 -0500
|
||||
|
|
@ -552,6 +612,20 @@ $ git rename-branch old-name new-name
|
|||
$ git rename-branch new-name
|
||||
```
|
||||
|
||||
## git rename-file
|
||||
|
||||
Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity.
|
||||
It combines the functionality of the `mv` command and `git mv`. This is particularly useful for renaming files or directories
|
||||
to change only their case, which might not be detected by Git on case-insensitive filesystems.
|
||||
|
||||
```bash
|
||||
# Rename a file
|
||||
git rename-file old_filename new_filename
|
||||
|
||||
# Rename a directory
|
||||
git rename-file old_directory new_directory
|
||||
```
|
||||
|
||||
## git rename-tag
|
||||
|
||||
Rename a tag (locally and remotely).
|
||||
|
|
@ -859,6 +933,21 @@ Delete local and remote tag `name`:
|
|||
$ 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
|
||||
|
||||
Deletes branches that are listed in `git branch --merged`.
|
||||
|
|
@ -953,8 +1042,6 @@ $ git squash HEAD~3 "Work on a feature"
|
|||
|
||||
Populates the file matching `authors|contributors -i` with the authors of commits, according to the number of commits per author.
|
||||
|
||||
Opens the file in `$EDITOR` when set.
|
||||
|
||||
See the ["MAPPING AUTHORS" section](https://git-scm.com/docs/git-shortlog#_mapping_authors) of **git-shortlog**(1) to coalesce together commits by the same person.
|
||||
|
||||
Updating AUTHORS file:
|
||||
|
|
@ -1116,6 +1203,14 @@ 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.
|
||||
|
||||
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
|
||||
|
||||
Copy unstaged files to remote. Useful when you want to make quick test without making any commits
|
||||
|
|
@ -1276,7 +1371,7 @@ Creates a zip archive of the current git repository. The name of the archive wil
|
|||
|
||||
## git missing
|
||||
|
||||
Print out which commits are on one branch or the other but not both.
|
||||
Print out which commits are on one branch or the other but not both. Optionally, you can specify a path to limit the comparison to a specific directory or file.
|
||||
|
||||
```bash
|
||||
$ git missing master
|
||||
|
|
@ -1284,6 +1379,12 @@ $ git missing master
|
|||
> 97ef387 only on master
|
||||
```
|
||||
|
||||
```bash
|
||||
$ git missing master -- src/
|
||||
< ed52989 only on current branch, in src/ directory
|
||||
> 7988c4b only on master, in src/ directory
|
||||
```
|
||||
|
||||
## git lock
|
||||
|
||||
Lock a local file `filename`:
|
||||
|
|
@ -1327,8 +1428,8 @@ $ git reset-file .htaccess dc82b19
|
|||
|
||||
## git mr
|
||||
|
||||
Checks out a merge request from GitLab. Usage: `git mr <ID|URL> [REMOTE]`.
|
||||
Default remote is `origin`.
|
||||
Checks out a merge request from GitLab, or a pull request from Forgejo/Codeberg.
|
||||
Usage: `git mr <ID|URL> [REMOTE]`. Default remote is `origin`.
|
||||
|
||||
``` bash
|
||||
$ git mr 51
|
||||
|
|
@ -1340,12 +1441,21 @@ Switched to branch 'mr/51'
|
|||
With full URL, the head is fetched from a temporary remote pointing to the base URL.
|
||||
|
||||
``` 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
|
||||
* [new ref] refs/merge-requests/51/head -> 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
|
||||
`mr/` branches. Ensure current branch is not one.
|
||||
|
||||
|
|
@ -1595,3 +1705,25 @@ Abort current revert, rebase, merge or cherry-pick, without the need to find exa
|
|||
## git magic
|
||||
|
||||
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
|
||||
```
|
||||
|
|
|
|||
103
History.md
103
History.md
|
|
@ -1,4 +1,107 @@
|
|||
|
||||
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
|
||||
==================
|
||||
|
||||
* Fix stripping trailing forward slash for git-get (#1172)
|
||||
* Change git-cp to use cleaner branch approach (#1169)
|
||||
* Improve warning for `git clear` (#1168)
|
||||
* Enhance `git-repl` (#1160)
|
||||
* Update some documentation that was out of sync (#1164)
|
||||
* Use filetimes in check_integrity (#1162)
|
||||
* Update git-alias.md: add brs to prevent incorrect line behavior (#1161)
|
||||
* Update git-bulk.md: use correct stylization in synopsis (#1163)
|
||||
* Update git-repl.md: typo: "let's" for "lets" (#1158)
|
||||
* Update instructions for the OpenSUSE installation (#1157)
|
||||
* Add pathspec support in `git-missing` (#1156)
|
||||
* feat: add rename-file command (#1149)
|
||||
* Update Commands.md (#1148)
|
||||
* fix: git-summary commit count (#1147)
|
||||
* tests: update dependencies (#1142)
|
||||
* chore(deps): bump masesgroup/retrieve-changed-files from 2 to 3 (#1144)
|
||||
* chore(deps): bump actions/setup-go from 4 to 5 (#1143)
|
||||
* ci: add dependabot update for GitHub actions (#1141)
|
||||
* ci: update actions (#1140)
|
||||
* Bump version to 7.3.0-dev (#1139)
|
||||
|
||||
7.2.0 / 2024-04-21
|
||||
==================
|
||||
|
||||
* refactor: test utils and simplify the case code (#1136)
|
||||
* Add --proceed flag to git-delete-squashed-branches (#1134) (#1135)
|
||||
* test(browse-ci): add unit tests (#1130)
|
||||
* test(git-browse): add unit tests (#1127)
|
||||
* feat: add reverse option to git-brv (#1123)
|
||||
* fix(utimes): change /dev/stdin to -
|
||||
* fix(utimes): Support filenames with backspaces, etc. (#1122)
|
||||
* chore: add poetry to handle the tests of the git extras (#1121)
|
||||
* Fix typo in ci.yml (#1120)
|
||||
* Fix: harden utimes, use single quotes (#1109)
|
||||
* Fix: patch git-utimes (fixes #1118) (#1119)
|
||||
* add pull request manner (#1113)
|
||||
* maintenance: Add my name as maintainer in AUTHORS (#1117)
|
||||
* test(git-authors): add unit test (#1098)
|
||||
* Add more comprensive dependencies (#1111)
|
||||
* fix: git-standup find error (tj#1106) (#1110)
|
||||
* Improve defaults for testing suite (#1104)
|
||||
* feat: Speed up utimes (#1108)
|
||||
* Overhaul CONTRIBUTING document (#1103)
|
||||
* Bump version to 7.2.0-dev (#1099)
|
||||
|
||||
7.1.0 / 2023-10-28
|
||||
==================
|
||||
|
||||
|
|
|
|||
|
|
@ -1,14 +1,20 @@
|
|||
# Installing git-extras
|
||||
# Installation
|
||||
|
||||
## Dependencies
|
||||
|
||||
Some commands require extra dependencies which are unavailable in some platforms.
|
||||
You may need to install them manually.
|
||||
You may need to install them manually. They are:
|
||||
|
||||
Those dependencies are listed below:
|
||||
|
||||
* column
|
||||
* bash 4.0+
|
||||
* Git 2.17+
|
||||
* `column`
|
||||
* `awk`
|
||||
* `find`
|
||||
* `tput`
|
||||
* cURL (only required for `git-fork`, `git-ignore-io`, `git-pull-request`)
|
||||
* `ps` (only required for `git-changelog`)
|
||||
* `rsync` (only required for `git-rscp`, `git-scp`)
|
||||
* `xargs` (only required for `git-delete-merged-branches`, `git-force-clone`, `git-sed`, `git-scp`)
|
||||
|
||||
If `bash --version` shows a lower version, you need to update it.
|
||||
For example, the default bash in Mac is usually too old and you may need to update it via `brew install bash`.
|
||||
|
|
@ -35,9 +41,10 @@ $ sudo dnf install git-extras
|
|||
|
||||
### openSUSE
|
||||
|
||||
Substitute your openSUSE version in the command below (in this case we are considering openSUSE Leap 15.2):
|
||||
Substitute your openSUSE version in the command below (in this case we are considering openSUSE Leap 15.6):
|
||||
|
||||
```bash
|
||||
$ sudo zypper ar https://download.opensuse.org/repositories/devel:/tools:/scm/openSUSE_Leap_15.2/devel:tools:scm.repo
|
||||
$ sudo zypper ar https://download.opensuse.org/repositories/devel:/tools:/scm/15.6/devel:tools:scm.repo
|
||||
```
|
||||
|
||||
and install it:
|
||||
|
|
@ -68,7 +75,6 @@ $ nix-env -i git-extras
|
|||
|
||||
[Abdullah](https://github.com/AWAN) has written a [Pkgfile](https://abdullah.today/ports/git-extras/Pkgfile) for his beloved [distro](https://crux.nu).
|
||||
|
||||
|
||||
### Homebrew
|
||||
|
||||
```bash
|
||||
|
|
@ -77,7 +83,6 @@ $ brew install git-extras
|
|||
|
||||
Installing from Homebrew will not give you the option omit certain `git-extras` if they conflict with existing git aliases. To have this option, build from source.
|
||||
|
||||
|
||||
### Arch Linux
|
||||
|
||||
* [git-extras](https://aur.archlinux.org/packages/git-extras/)
|
||||
|
|
@ -87,6 +92,7 @@ Installing from Homebrew will not give you the option omit certain `git-extras`
|
|||
|
||||
First, please install `Git for Windows 2.x` from 'https://github.com/git-for-windows/git/releases'.
|
||||
Second, clone the `git-extras` repo into any folder you like.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/tj/git-extras.git
|
||||
# checkout the latest tag (optional)
|
||||
|
|
@ -138,7 +144,7 @@ alternate location, specify a `PREFIX` when calling `make`.
|
|||
|
||||
```bash
|
||||
# Non-root users can install under their home directory
|
||||
make install PREFIX=$HOME/software
|
||||
make install PREFIX=$HOME/.local
|
||||
|
||||
# For third-party software kept under /opt
|
||||
make install PREFIX=/opt
|
||||
|
|
@ -148,7 +154,7 @@ If you want to relocate the bulk of the installation but still have configuratio
|
|||
files installed to the system `/etc` dir or other alternate location, you can
|
||||
specify `SYSCONFDIR` in addition to `PREFIX`.
|
||||
|
||||
```
|
||||
```sh
|
||||
$ sudo make install PREFIX=/usr/local SYSCONFDIR=/etc
|
||||
```
|
||||
|
||||
|
|
@ -165,6 +171,7 @@ curl -sSL https://raw.githubusercontent.com/tj/git-extras/main/install.sh | sudo
|
|||
## Installing as Zsh plugin
|
||||
|
||||
[ZInit](https://github.com/zdharma/zinit) can install git-extras by using:
|
||||
|
||||
```zsh
|
||||
zinit ice as"program" pick"$ZPFX/bin/git-*" src"etc/git-extras-completion.zsh" make"PREFIX=$ZPFX"
|
||||
zinit light tj/git-extras
|
||||
|
|
|
|||
2
Makefile
2
Makefile
|
|
@ -141,6 +141,6 @@ docclean:
|
|||
rm -f man/*.html
|
||||
|
||||
test:
|
||||
pytest
|
||||
bats ./tests
|
||||
|
||||
.PHONY: default docs check install uninstall clean docclean test
|
||||
|
|
|
|||
12
Readme.md
12
Readme.md
|
|
@ -18,18 +18,6 @@ Go to the [Commands](Commands.md) page for basic usage and examples.
|
|||
|
||||
__GIT utilities__ -- repo summary, repl, changelog population, author commit percentages and more
|
||||
|
||||
## Test
|
||||
|
||||
Nowaday the continues integrations test is coming and you can access it via the `make test` easily.
|
||||
|
||||
The CI depends on
|
||||
|
||||
* `python==3.10`
|
||||
* `pytest==7.4.0`
|
||||
* `GitPython==3.1.36`
|
||||
|
||||
So the version or higher is recommended.
|
||||
|
||||
## Contributing
|
||||
|
||||
Interested in contributing? Awesome!
|
||||
|
|
|
|||
|
|
@ -1,17 +1,45 @@
|
|||
#!/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
|
||||
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
|
||||
|
||||
if [ "${fcnt}" != 1 ]; then
|
||||
echo "I don't know what to abort" >&2
|
||||
exit 1
|
||||
fi
|
||||
discover_op() {
|
||||
local op
|
||||
for op in cherry_pick merge rebase revert ; do
|
||||
if [ -f "${gitdir}/${op^^}_HEAD" ]; then
|
||||
echo "${op/_/-}"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
git "${opfound}" --abort
|
||||
validate_op() {
|
||||
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"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
LIST=false
|
||||
NO_EMAIL=false
|
||||
FILE=""
|
||||
EDITOR=$(git var GIT_EDITOR)
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
|
|
@ -37,10 +36,10 @@ fi
|
|||
authors() {
|
||||
if $NO_EMAIL; then
|
||||
# email will be used to uniq authors.
|
||||
git shortlog -sne | awk '{$1=""; sub(" ", ""); print}' | awk -F'<' '!x[$1]++' | awk -F'<' '!x[$2]++' \
|
||||
git shortlog HEAD -sne | awk '{$1=""; sub(" ", ""); print}' | awk -F'<' '!x[$1]++' | awk -F'<' '!x[$2]++' \
|
||||
| awk -F'<' '{gsub(/ +$/, "", $1); print $1}'
|
||||
else
|
||||
git shortlog -sne | awk '{$1=""; sub(" ", ""); print}' | awk -F'<' '!x[$1]++' | awk -F'<' '!x[$2]++'
|
||||
git shortlog HEAD -sne | awk '{$1=""; sub(" ", ""); print}' | awk -F'<' '!x[$1]++' | awk -F'<' '!x[$2]++'
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
@ -52,5 +51,4 @@ if $LIST; then
|
|||
authors
|
||||
else
|
||||
authors >> "$FILE"
|
||||
test -n "$EDITOR" && $EDITOR "$FILE"
|
||||
fi
|
||||
|
|
|
|||
21
bin/git-brv
21
bin/git-brv
|
|
@ -7,6 +7,20 @@ if ! (( BASH_VERSINFO[0] > 4 ||
|
|||
exit 1
|
||||
fi
|
||||
|
||||
# allow the user to set a default reverse option in an environment variable
|
||||
reverse=$(git config --get git-extras.brv.reverse || echo false)
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-r | --reverse)
|
||||
reverse=true
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -t 1 ]]; then
|
||||
shopt -s checkwinsize
|
||||
COLUMNS=$(tput cols)
|
||||
|
|
@ -36,9 +50,14 @@ for b in "${!upstream[@]}"; do
|
|||
done
|
||||
|
||||
mapfile -t ordered < <(
|
||||
# the reverse option of git-brv causes the sort to be sorted normally rather than in reverse
|
||||
reverse_opt=""
|
||||
if [[ $reverse = false ]]; then
|
||||
reverse_opt="-r"
|
||||
fi
|
||||
for b in "${!date[@]}"; do
|
||||
printf '%d\t%s\n' "${date[$b]}" "$b"
|
||||
done | sort -rn | cut -f2-
|
||||
done | sort -n $reverse_opt | cut -f2-
|
||||
)
|
||||
|
||||
current=$(git symbolic-ref -q --short HEAD)
|
||||
|
|
|
|||
67
bin/git-bulk
67
bin/git-bulk
|
|
@ -9,12 +9,14 @@ guardedmode=false
|
|||
singlemode=false
|
||||
allwsmode=false
|
||||
quiet=false
|
||||
no_follow_symlinks=false
|
||||
no_follow_hidden=false
|
||||
|
||||
#
|
||||
# print usage message
|
||||
#
|
||||
usage() {
|
||||
echo 1>&2 "usage: git bulk [-q|--quiet] [-g] ([-a]|[-w <ws-name>]) <git command>"
|
||||
echo 1>&2 "usage: git bulk [--no-follow-symlinks] [--no-follow-hidden] [-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 --removeworkspace <ws-name>"
|
||||
echo 1>&2 " git bulk --addcurrent <ws-name>"
|
||||
|
|
@ -28,7 +30,7 @@ cdfail() {
|
|||
}
|
||||
|
||||
# add another workspace to global git config
|
||||
function addworkspace {
|
||||
addworkspace() {
|
||||
git config --global bulkworkspaces."$wsname" "$wsdir";
|
||||
if [ -n "$source" ]; then
|
||||
if [ ! -d "$wsdir" ]; then echo 1>&2 "Path of workspace doesn't exist, make it first."; exit 1; fi
|
||||
|
|
@ -57,19 +59,19 @@ function addworkspace {
|
|||
}
|
||||
|
||||
# add current directory
|
||||
function addcurrent { git config --global bulkworkspaces."$wsname" "$PWD"; }
|
||||
addcurrent() { git config --global bulkworkspaces."$wsname" "$PWD"; }
|
||||
|
||||
# remove workspace from global git config
|
||||
function removeworkspace { checkWSName && git config --global --unset bulkworkspaces."$wsname"; }
|
||||
removeworkspace() { checkWSName && git config --global --unset bulkworkspaces."$wsname"; }
|
||||
|
||||
# remove workspace from global git config
|
||||
function purge { git config --global --remove-section bulkworkspaces; }
|
||||
purge() { git config --global --remove-section bulkworkspaces; }
|
||||
|
||||
# list all current workspace locations defined
|
||||
function listall { git config --global --get-regexp bulkworkspaces; }
|
||||
listall() { git config --global --get-regexp bulkworkspaces; }
|
||||
|
||||
# guarded execution of a git command in one specific repository
|
||||
function guardedExecution () {
|
||||
guardedExecution () {
|
||||
if [ "${quiet?}" != "true" ] || $guardedmode; then
|
||||
echo 1>&2 "${bldred}->${reset} executing ${inverse}git $gitcommand${reset} in repository ${leadingpath%/*}/${bldred}${curdir##*/}${reset}"
|
||||
fi
|
||||
|
|
@ -86,7 +88,7 @@ function guardedExecution () {
|
|||
}
|
||||
|
||||
# check if the passed command is known as a core git command
|
||||
function checkGitCommand () {
|
||||
checkGitCommand () {
|
||||
if git help -a | grep -o -q "\b${corecommand}\b"; then
|
||||
echo 1>&2 "Core command \"$corecommand\" accepted."
|
||||
else
|
||||
|
|
@ -99,7 +101,7 @@ function checkGitCommand () {
|
|||
}
|
||||
|
||||
# check if workspace name is registered
|
||||
function checkWSName () {
|
||||
checkWSName () {
|
||||
while read -r workspace; do
|
||||
parseWsName "$workspace"
|
||||
if [[ $rwsname == "$wsname" ]]; then return; fi
|
||||
|
|
@ -109,14 +111,24 @@ function checkWSName () {
|
|||
}
|
||||
|
||||
# parse out wsname from workspacespec
|
||||
function parseWsName () {
|
||||
parseWsName () {
|
||||
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#* }
|
||||
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%% *}
|
||||
}
|
||||
|
||||
# detects the wsname of the current directory
|
||||
function wsnameToCurrent () {
|
||||
wsnameToCurrent () {
|
||||
while read -r workspace; do
|
||||
if [ -z "$workspace" ]; then continue; fi
|
||||
parseWsName "$workspace"
|
||||
|
|
@ -128,33 +140,44 @@ function wsnameToCurrent () {
|
|||
}
|
||||
|
||||
# helper to check number of arguments.
|
||||
function allowedargcount () {
|
||||
if [ "$paramcount" -ne "$1" ] && [ "$paramcount" -ne "$2" ]; then
|
||||
allowedargcount () {
|
||||
if [ "$paramcount" -ne "${1:-0}" ] && [ "$paramcount" -ne "${2:-0}" ]; then
|
||||
echo 1>&2 "error: wrong number of arguments" && usage;
|
||||
exit 1;
|
||||
fi
|
||||
}
|
||||
|
||||
# execute the bulk operation
|
||||
function executBulkOp () {
|
||||
executBulkOp () {
|
||||
checkGitCommand
|
||||
if ! $allwsmode && ! $singlemode; then wsnameToCurrent; fi # by default git bulk works within the 'current' workspace
|
||||
listall | while read -r workspacespec; do
|
||||
parseWsName "$workspacespec"
|
||||
if [[ -n $wsname ]] && [[ $rwsname != "$wsname" ]]; then continue; fi
|
||||
eval cd "\"$rwsdir\""
|
||||
cd "$rwsdir" || exit 1
|
||||
local actual=$PWD
|
||||
[ "${quiet?}" != "true" ] && echo 1>&2 "Executing bulk operation in workspace ${inverse}$actual${reset}"
|
||||
|
||||
allGitFolders=( $(eval find -L . -name ".git") )
|
||||
# build `find` flags depending on command-line options
|
||||
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
|
||||
local gitrepodir=${line::${#line}-5} # cut the .git part of find results to have the root git directory of that repository
|
||||
eval cd "\"$gitrepodir\"" # into git repo location
|
||||
cd "$gitrepodir" || exit 1 # into git repo location
|
||||
local curdir=$PWD
|
||||
local leadingpath=${curdir#"${actual}"}
|
||||
guardedExecution "$@"
|
||||
eval cd "\"$rwsdir\"" # back to origin location of last find command
|
||||
# do not execute if we do not want to consider a ".git" directory under a hidden directory
|
||||
if [ $no_follow_hidden = false ] || ! [[ "$leadingpath" =~ "/." ]]; then
|
||||
guardedExecution "$@"
|
||||
fi
|
||||
cd "$rwsdir" || exit 1 # back to origin location of last find command
|
||||
done
|
||||
done
|
||||
}
|
||||
|
|
@ -171,7 +194,11 @@ while [ "${#}" -ge 1 ] ; do
|
|||
--listall|--purge)
|
||||
butilcommand="${1:2}" && break ;;
|
||||
--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)
|
||||
allwsmode=true ;;
|
||||
-g)
|
||||
|
|
|
|||
|
|
@ -9,6 +9,15 @@ GIT_MERGELOG_FORMAT="$(git config changelog.mergeformat)"
|
|||
GIT_EDITOR="$(git var GIT_EDITOR)"
|
||||
PROGNAME="git-changelog"
|
||||
|
||||
git_editor() {
|
||||
if test -z "${GIT_EDITOR:+set}"
|
||||
then
|
||||
GIT_EDITOR="$(git var GIT_EDITOR)" || return $?
|
||||
fi
|
||||
|
||||
eval "$GIT_EDITOR" '"$@"'
|
||||
}
|
||||
|
||||
_usage() {
|
||||
cat << EOF
|
||||
usage: $PROGNAME options [file]
|
||||
|
|
@ -574,7 +583,7 @@ main() {
|
|||
rm -f "$tmpfile"
|
||||
|
||||
if [[ -n "$GIT_EDITOR" ]]; then
|
||||
$GIT_EDITOR "$changelog" || _exit
|
||||
git_editor "$changelog" || _exit
|
||||
else
|
||||
less "$changelog" || _exit
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
PROGNAME="git-clear"
|
||||
FORCE=0
|
||||
|
||||
function _usage() {
|
||||
_usage() {
|
||||
cat << EOF
|
||||
usage: $PROGNAME options
|
||||
usage: $PROGNAME -h|help|?
|
||||
|
|
@ -32,12 +32,12 @@ done
|
|||
|
||||
# Only wait for answer if not forced by user
|
||||
if [[ $FORCE == 0 ]]; then
|
||||
echo -n "Sure? - This command may delete files that cannot be recovered, including those in .gitignore [y/N]: "
|
||||
echo -n "Sure? - THIS COMMAND MAY DELETE FILES THAT CANNOT BE RECOVERED, including those in .gitignore [y/N]: "
|
||||
read -r clean
|
||||
else
|
||||
clean=y
|
||||
fi
|
||||
|
||||
if [ "$clean" == "y" ]; then
|
||||
if [ "$clean" = "y" ]; then
|
||||
git clean -d -f -x && git reset --hard
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -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]: "
|
||||
read -r answer
|
||||
if [ "$answer" == "y" ]
|
||||
if [ "$answer" = "y" ]
|
||||
then git clean -d -f && git reset --hard
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -1,6 +1,36 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
SINCE="last week"
|
||||
test $# -ne 0 && SINCE=$*
|
||||
echo "... commits since $SINCE" >&2
|
||||
git log --pretty='%an - %s' --after="@{$SINCE}"
|
||||
REF=""
|
||||
SINCE=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
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
|
||||
|
|
|
|||
1
bin/git-continue
Symbolic link
1
bin/git-continue
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
git-abort
|
||||
40
bin/git-cp
40
bin/git-cp
|
|
@ -50,37 +50,29 @@ else
|
|||
fi
|
||||
fi
|
||||
|
||||
MERGE_OPT=
|
||||
ff=$(git config --get merge.ff || true)
|
||||
if [[ "$ff" == "only" ]]; then
|
||||
MERGE_OPT="--ff"
|
||||
fi
|
||||
|
||||
echo "Copying $CURRENT_FILENAME into $DESTINATION_FILENAME"
|
||||
|
||||
INTERMEDIATE_FILENAME="${CURRENT_FILENAME//\//__}-move-to-${DESTINATION_FILENAME//\//__}"
|
||||
# Pre-check that the source and destination will work
|
||||
git mv --dry-run "${CURRENT_FILENAME}" "${DESTINATION_FILENAME}"
|
||||
|
||||
# We keep the existing file on the side in a commit
|
||||
git mv "${CURRENT_FILENAME}" "${INTERMEDIATE_FILENAME}"
|
||||
git commit -nm "Keep $CURRENT_FILENAME"
|
||||
# Make a new branch and switch to it
|
||||
BRANCH_NAME="git-cp-$(date +%s)"
|
||||
git checkout -b "$BRANCH_NAME"
|
||||
|
||||
# We come back to the previous state and revert that change
|
||||
INTERMEDIATE_SAVED=$(git rev-parse HEAD)
|
||||
git reset --hard HEAD^
|
||||
|
||||
# We move the file to its new destination
|
||||
# Move the original file to the new destination, in this branch
|
||||
git mv "${CURRENT_FILENAME}" "${DESTINATION_FILENAME}"
|
||||
git commit -nm "Copy $CURRENT_FILENAME into $DESTINATION_FILENAME"
|
||||
git commit -nm "--Duplicate $CURRENT_FILENAME history into $DESTINATION_FILENAME"
|
||||
|
||||
# We come back to the previous state and revert that change again
|
||||
DESTINATION_SAVED=$(git rev-parse HEAD)
|
||||
git reset --hard HEAD^
|
||||
# Restore the original file to keep it in the history
|
||||
git checkout HEAD~ "${CURRENT_FILENAME}"
|
||||
git commit -nm "--Restore $CURRENT_FILENAME"
|
||||
|
||||
# We keep both files
|
||||
# shellcheck disable=SC2086
|
||||
git merge $MERGE_OPT "${DESTINATION_SAVED}" "${INTERMEDIATE_SAVED}" -m "Duplicate ${CURRENT_FILENAME} history."
|
||||
# Switch to the original branch and merge this back in.
|
||||
git checkout -
|
||||
git merge --no-ff "$BRANCH_NAME" -m "Copy $CURRENT_FILENAME into $DESTINATION_FILENAME"
|
||||
|
||||
# We get back our original name
|
||||
git mv "${INTERMEDIATE_FILENAME}" "${CURRENT_FILENAME}"
|
||||
git commit -nm "Set back ${CURRENT_FILENAME} file"
|
||||
# We're now done with the branch, so delete it.
|
||||
# We shouldn't need -D here, as we've already merged it back in.
|
||||
git branch -d "$BRANCH_NAME"
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ then
|
|||
REMOTE=origin
|
||||
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 ]]
|
||||
then
|
||||
|
|
|
|||
60
bin/git-delete-gone-branches
Executable file
60
bin/git-delete-gone-branches
Executable file
|
|
@ -0,0 +1,60 @@
|
|||
#!/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
|
||||
|
|
@ -3,5 +3,5 @@
|
|||
branches=$(git branch --no-color --merged | grep -vE "^(\*|\+)" | grep -v "$(git_extra_default_branch)" | grep -v svn)
|
||||
if [ -n "$branches" ]
|
||||
then
|
||||
echo "$branches" | xargs -n 1 git branch -d
|
||||
echo "$branches" | xargs git branch -d
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -2,6 +2,12 @@
|
|||
|
||||
set -euo pipefail
|
||||
|
||||
proceed=false
|
||||
if [[ $# -gt 0 && ("$1" == "--proceed" || "$1" == "-p") ]]; then
|
||||
proceed=true
|
||||
shift
|
||||
fi
|
||||
|
||||
if [[ $# -eq 0 ]]; then
|
||||
targetBranch=$(git rev-parse --abbrev-ref HEAD)
|
||||
else
|
||||
|
|
@ -13,6 +19,10 @@ git for-each-ref refs/heads/ "--format=%(refname:short)" | while read -r branch;
|
|||
mergeBase=$(git merge-base "$targetBranch" "$branch")
|
||||
|
||||
if [[ $(git cherry "$targetBranch" "$(git commit-tree "$(git rev-parse "$branch^{tree}")" -p "$mergeBase" -m _)") == "-"* ]]; then
|
||||
git branch -D "$branch"
|
||||
if [[ $proceed == true ]]; then
|
||||
git branch -D "$branch" || true
|
||||
else
|
||||
git branch -D "$branch"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
VERSION="7.1.0"
|
||||
VERSION="7.6.0-dev"
|
||||
INSTALL_SCRIPT="https://raw.githubusercontent.com/tj/git-extras/main/install.sh"
|
||||
|
||||
update() {
|
||||
|
|
|
|||
|
|
@ -17,9 +17,9 @@ read -r user
|
|||
# personal access token
|
||||
# config name is github-personal-access-token '_' is not allowed in git config
|
||||
|
||||
github_personal_access_token=$(git config git-extras.github-personal-access-token)
|
||||
github_personal_access_token=$(git config --default "$GITHUB_TOKEN" git-extras.github-personal-access-token)
|
||||
|
||||
test -z "$github_personal_access_token" && abort "git config git-extras.github-personal-access-token required"
|
||||
test -z "$github_personal_access_token" && abort "GITHUB_TOKEN, or git config git-extras.github-personal-access-token required"
|
||||
|
||||
# extract owner + project from repo url
|
||||
project=${url##*/}
|
||||
|
|
@ -61,7 +61,7 @@ else
|
|||
# clone forked repo into current dir
|
||||
git clone "${remote_prefix}${user}/${project}.git" "$project"
|
||||
# add reference to origin fork so can merge in upstream changes
|
||||
cd "$project"
|
||||
cd "$project" || exit
|
||||
git remote add upstream "${remote_prefix}${owner}/${project}.git"
|
||||
git fetch upstream
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ if [ -z "$clone_path" ]; then
|
|||
fi
|
||||
|
||||
dirname=${url%/}
|
||||
dirname=${url%.git}
|
||||
dirname=${dirname%.git}
|
||||
dirname=${dirname##*/}
|
||||
|
||||
mkdir -p "$clone_path"
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ do
|
|||
esac
|
||||
done
|
||||
|
||||
cd "$(git-root)" # cd for git blame
|
||||
cd "$(git-root)" || exit # cd for git blame
|
||||
MERGED_LOG=$(git_extra_mktemp)
|
||||
if [[ $EMAIL == '-e' ]]
|
||||
then
|
||||
|
|
@ -44,9 +44,11 @@ for file in $(git diff --name-only "$@")
|
|||
do
|
||||
test -n "$DEBUG" && echo "git blame $file"
|
||||
# $1 - since $2 - until
|
||||
# shellcheck disable=SC2086
|
||||
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"
|
||||
# if $2 not given, use current commit as "until"
|
||||
# shellcheck disable=SC2086
|
||||
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"
|
||||
done
|
||||
|
|
@ -71,7 +73,7 @@ END {
|
|||
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
|
||||
do
|
||||
people=${line#* }
|
||||
|
|
@ -103,7 +105,7 @@ do
|
|||
do
|
||||
printf "-"
|
||||
done
|
||||
printf "(%s)" $num
|
||||
printf "(%s)" "$num"
|
||||
else
|
||||
for (( i = 0; i > num; i-- ))
|
||||
do
|
||||
|
|
|
|||
219
bin/git-ignore
219
bin/git-ignore
|
|
@ -2,7 +2,27 @@
|
|||
|
||||
GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
|
||||
|
||||
function show_contents {
|
||||
# awk script that takes 2 input files. The first one is newline deilmeted
|
||||
# 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}"
|
||||
if [ -f "$file" ]; then
|
||||
echo "$1 gitignore: $2" && cat "$file"
|
||||
|
|
@ -11,7 +31,7 @@ function show_contents {
|
|||
fi
|
||||
}
|
||||
|
||||
function cd_to_git_root {
|
||||
cd_to_git_root() {
|
||||
local error_level="$1"
|
||||
|
||||
if ! git rev-parse --git-dir &>/dev/null; then
|
||||
|
|
@ -29,7 +49,7 @@ function cd_to_git_root {
|
|||
fi
|
||||
}
|
||||
|
||||
function global_ignore() {
|
||||
global_ignore() {
|
||||
if ! git config --global core.excludesFile 2>/dev/null; then
|
||||
if [ -f "$HOME/.gitignore" ]; then
|
||||
echo "$HOME/.gitignore"
|
||||
|
|
@ -39,11 +59,11 @@ function global_ignore() {
|
|||
fi
|
||||
}
|
||||
|
||||
function show_global {
|
||||
show_global() {
|
||||
show_contents Global "$(global_ignore)"
|
||||
}
|
||||
|
||||
function add_global {
|
||||
add_global() {
|
||||
local global_gitignore
|
||||
global_gitignore="$(global_ignore)"
|
||||
if [ -z "$global_gitignore" ]; then
|
||||
|
|
@ -56,28 +76,28 @@ function add_global {
|
|||
fi
|
||||
}
|
||||
|
||||
function show_local {
|
||||
show_local() {
|
||||
cd_to_git_root --warn
|
||||
show_contents Local .gitignore
|
||||
}
|
||||
|
||||
function add_local {
|
||||
add_local() {
|
||||
cd_to_git_root --warn
|
||||
add_patterns .gitignore "$@"
|
||||
}
|
||||
|
||||
function show_private {
|
||||
show_private() {
|
||||
cd_to_git_root --error
|
||||
show_contents Private "${GIT_DIR}/info/exclude"
|
||||
}
|
||||
|
||||
function add_private {
|
||||
add_private() {
|
||||
cd_to_git_root --error
|
||||
test -d "${GIT_DIR}/info" || mkdir -p "${GIT_DIR}/info"
|
||||
add_patterns "${GIT_DIR}/info/exclude" "$@"
|
||||
}
|
||||
|
||||
function add_patterns {
|
||||
add_patterns() {
|
||||
echo "Adding pattern(s) to: $1"
|
||||
local file="${1/#~/$HOME}"
|
||||
dir_name=$(dirname "$file")
|
||||
|
|
@ -94,6 +114,66 @@ function add_patterns {
|
|||
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
|
||||
show_global
|
||||
echo "---------------------------------"
|
||||
|
|
@ -101,22 +181,105 @@ if test $# -eq 0; then
|
|||
echo "---------------------------------"
|
||||
show_private
|
||||
else
|
||||
case "$1" in
|
||||
-l|--local)
|
||||
test $# -gt 1 && add_local "${@:2}" && echo
|
||||
show_local
|
||||
;;
|
||||
-g|--global)
|
||||
test $# -gt 1 && add_global "${@:2}" && echo
|
||||
show_global
|
||||
;;
|
||||
-p|--private)
|
||||
test $# -gt 1 && add_private "${@:2}" && echo
|
||||
show_private
|
||||
;;
|
||||
*)
|
||||
add_local "$@"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
# parse flags and args
|
||||
level="none"
|
||||
action="none"
|
||||
declare -a args
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
_usage
|
||||
exit 0
|
||||
;;
|
||||
-l|--local)
|
||||
level="local"
|
||||
;;
|
||||
-g|--global)
|
||||
level="global"
|
||||
;;
|
||||
-p|--private)
|
||||
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
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ while getopts "m:eapfh" arg; do
|
|||
PUSH=true
|
||||
;;
|
||||
f)
|
||||
FORCE='-f'
|
||||
FORCE='--force-with-lease'
|
||||
;;
|
||||
h)
|
||||
echo "$USAGE"
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ then
|
|||
git stash
|
||||
fi
|
||||
|
||||
if [ "${!#}" == '--ff-only' ]; then
|
||||
if [ "${!#}" = '--ff-only' ]; then
|
||||
case $# in
|
||||
2 ) # dest --ff
|
||||
git push "$(git rev-parse --show-toplevel)" "$cur_branch":"$1";;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
usage() {
|
||||
echo 1>&2 "usage: git missing [<first branch>] <second branch> [<git log options>]"
|
||||
echo 1>&2 "usage: git missing [<first branch>] <second branch> [<git log options>] [[--] <path>...]"
|
||||
}
|
||||
|
||||
if [ "${#}" -lt 1 ]
|
||||
|
|
@ -12,9 +12,20 @@ fi
|
|||
|
||||
declare -a git_log_args=()
|
||||
declare -a branches=()
|
||||
declare -a pathspec=()
|
||||
declare parse_path=false
|
||||
|
||||
for arg in "$@" ; do
|
||||
|
||||
if [[ $parse_path == true ]]; then
|
||||
pathspec+=("$@")
|
||||
break
|
||||
fi
|
||||
|
||||
case "$arg" in
|
||||
--)
|
||||
parse_path=true
|
||||
;;
|
||||
--*)
|
||||
git_log_args+=( "$arg" )
|
||||
;;
|
||||
|
|
@ -38,4 +49,4 @@ else
|
|||
exit 1
|
||||
fi
|
||||
|
||||
git log "${git_log_args[@]}" "$firstbranch"..."$secondbranch" --format="%m %h %s" --left-right
|
||||
git log "${git_log_args[@]}" "$firstbranch"..."$secondbranch" --format="%m %h %s" --left-right -- "${pathspec[@]}"
|
||||
|
|
|
|||
10
bin/git-mr
10
bin/git-mr
|
|
@ -7,6 +7,8 @@ if [ -z "${1-}" ] ; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
remote_ref_kind=merge-requests
|
||||
|
||||
if test "$1" = "clean"; then
|
||||
git for-each-ref refs/heads/mr/* --format='%(refname)' | while read -r ref; do
|
||||
git branch -D "${ref#refs/heads/}"
|
||||
|
|
@ -15,13 +17,19 @@ if test "$1" = "clean"; then
|
|||
elif [[ $1 =~ ^(https?://[^/]+/(.+))/merge_requests/([0-9]+).*$ ]]; then
|
||||
remote=${BASH_REMATCH[1]}.git
|
||||
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
|
||||
id=$1
|
||||
remote=${2:-origin}
|
||||
fi
|
||||
|
||||
branch=mr/$id
|
||||
remote_ref=refs/merge-requests/$id/head
|
||||
remote_ref=refs/$remote_ref_kind/$id/head
|
||||
git fetch -fu "$remote" "$remote_ref:$branch"
|
||||
git checkout "$branch"
|
||||
git config --local --replace "branch.$branch.merge" "$remote_ref"
|
||||
|
|
|
|||
|
|
@ -9,15 +9,15 @@ do
|
|||
file="$file"' '"$i"
|
||||
shift
|
||||
done
|
||||
test -n "$*" && range="$*"
|
||||
test -n "$*" && range=("$@")
|
||||
|
||||
test -z "$file" && echo "file required." 1>&2 && exit 1
|
||||
if [ -z "$range" ]
|
||||
if [ -z "${range[*]}" ]
|
||||
then
|
||||
git filter-branch -f --index-filter "git rm -r --cached ""$file"" --ignore-unmatch" \
|
||||
--prune-empty --tag-name-filter cat -- --all
|
||||
else
|
||||
# don't quote $range so that we can forward multiple rev-list arguments
|
||||
# $range is an array so that we can forward multiple rev-list arguments
|
||||
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
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
set -e
|
||||
set -o pipefail
|
||||
|
||||
if ! command -v pastebinit >/dev/null 2>&1; then
|
||||
if ! command -v pastebinit &>/dev/null; then
|
||||
echo >&2 "To run 'git paste', you need to install pastebinit in your system"
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ SECONDARY_BRANCH=""
|
|||
FF="--ff"
|
||||
CONTINUE="no"
|
||||
|
||||
function current_branch() {
|
||||
current_branch() {
|
||||
git rev-parse --abbrev-ref HEAD
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,9 +31,9 @@ EOF
|
|||
# personal access token
|
||||
# config name is github-personal-access-token '_' is not allowed in git config
|
||||
|
||||
github_personal_access_token=$(git config git-extras.github-personal-access-token)
|
||||
github_personal_access_token=$(git config --default "$GITHUB_TOKEN" git-extras.github-personal-access-token)
|
||||
|
||||
test -z "$github_personal_access_token" && abort "git config git-extras.github-personal-access-token required"
|
||||
test -z "$github_personal_access_token" && abort "GITHUB_TOKEN or git config git-extras.github-personal-access-token required"
|
||||
|
||||
# branch
|
||||
|
||||
|
|
@ -43,7 +43,7 @@ if [ -z "$remote" ]; then
|
|||
echo 'no upstream found, push to origin as default'
|
||||
remote="origin"
|
||||
fi
|
||||
[ "$remote" == "." ] && abort "the upstream should be a remote branch."
|
||||
[ "$remote" = "." ] && abort "the upstream should be a remote branch."
|
||||
|
||||
# make sure it's pushed
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ do
|
|||
GIT_INDEX_FILE=$index git read-tree "$rev"
|
||||
|
||||
# Try to apply the patch.
|
||||
GIT_INDEX_FILE=$index git apply --cached "$1" >/dev/null 2>&1
|
||||
GIT_INDEX_FILE=$index git apply --cached "$1" &>/dev/null
|
||||
patch_failed=$?
|
||||
|
||||
# Do it again, but show the error, if the problem is the patch itself.
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ if test $# -gt 0; then
|
|||
fi
|
||||
|
||||
declare -a sign_args
|
||||
if [ "$sign" == true ]; then
|
||||
if [ "$sign" = true ]; then
|
||||
sign_args=("-s")
|
||||
fi
|
||||
|
||||
|
|
|
|||
101
bin/git-rename-file
Executable file
101
bin/git-rename-file
Executable file
|
|
@ -0,0 +1,101 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Usage function
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage: git rename-file [OPTIONS] <source> <destination>
|
||||
|
||||
Description:
|
||||
Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity.
|
||||
It combines the functionality of the "mv" command and "git mv". This is particularly useful for renaming files or directories
|
||||
to change only their case, which might not be detected by Git on case-insensitive filesystems.
|
||||
|
||||
Options:
|
||||
-h, --help Show this help message and exit.
|
||||
|
||||
Examples:
|
||||
git rename-file old_filename new_filename
|
||||
git rename-file old_directory new_directory
|
||||
EOF
|
||||
}
|
||||
|
||||
# Check for help option
|
||||
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Check for correct number of arguments
|
||||
if [ "$#" -ne 2 ]; then
|
||||
echo "Error: Incorrect number of arguments."
|
||||
echo ""
|
||||
usage >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Assign variables
|
||||
SOURCE="$1"
|
||||
DESTINATION="$2"
|
||||
TEMP_NAME="${SOURCE}.temp"
|
||||
|
||||
# Function to check if a file or directory exists in a case-sensitive manner
|
||||
check_case_sensitive_exists() {
|
||||
local path="$1"
|
||||
local dir
|
||||
local base
|
||||
|
||||
dir=$(dirname "$path")
|
||||
base=$(basename "$path")
|
||||
|
||||
if [ -e "$dir" ]; then
|
||||
if (cd "$dir" && find . -maxdepth 1 -name "$base" | grep -q "$base"); then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Check if source exists and is under version control
|
||||
if ! check_case_sensitive_exists "$SOURCE"; then
|
||||
echo "Error: Source '$SOURCE' does not exist."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! git ls-files --error-unmatch "$SOURCE" > /dev/null 2>&1; then
|
||||
echo "Error: Source '$SOURCE' is not under version control. If file or directory is new, it must at least be staged."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if destination already exists
|
||||
if check_case_sensitive_exists "$DESTINATION"; then
|
||||
echo "Error: Destination '$DESTINATION' already exists."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if the destination directory exists
|
||||
DEST_DIR=$(dirname "$DESTINATION")
|
||||
if ! check_case_sensitive_exists "$DEST_DIR"; then
|
||||
echo "Error: Destination directory '$DEST_DIR' does not exist."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create a rollback function
|
||||
rollback() {
|
||||
echo "Rolling back changes..."
|
||||
if [ -e "$TEMP_NAME" ]; then
|
||||
git mv -f "$TEMP_NAME" "$SOURCE"
|
||||
fi
|
||||
}
|
||||
|
||||
# Trap errors to trigger rollback
|
||||
trap 'rollback' ERR
|
||||
|
||||
# Move the file to a temporary name within the Git repository
|
||||
git mv "$SOURCE" "$TEMP_NAME"
|
||||
|
||||
# Move the temporary file to the desired destination
|
||||
git mv "$TEMP_NAME" "$DESTINATION"
|
||||
|
||||
echo "Successfully renamed '$SOURCE' to '$DESTINATION'."
|
||||
80
bin/git-repl
80
bin/git-repl
|
|
@ -1,8 +1,25 @@
|
|||
#!/usr/bin/env bash
|
||||
shopt -s extglob
|
||||
|
||||
git version
|
||||
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"
|
||||
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
|
||||
# Current branch
|
||||
|
|
@ -10,34 +27,73 @@ while true; do
|
|||
|
||||
# Prompt
|
||||
if test -n "$cur"; then
|
||||
prompt="git ($cur)> "
|
||||
cur_string=" ($cur)"
|
||||
else
|
||||
prompt="git> "
|
||||
cur_string=""
|
||||
fi
|
||||
if test -n "$exit_status" && test "$exit_status" -ne 0; then
|
||||
es_string=$' \e[31m['"$exit_status"$']\e[0m'
|
||||
else
|
||||
es_string=""
|
||||
fi
|
||||
prompt_character=$(git config --get --default '>' git-extras.repl.prompt-character)
|
||||
|
||||
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
|
||||
|
||||
# Readline
|
||||
read -e -r -p "$prompt" cmd
|
||||
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 "
|
||||
|
||||
# EOF
|
||||
test $? -ne 0 && break
|
||||
# Use arguments as a command if any are provided.
|
||||
if [ $# -ne 0 ]; then
|
||||
cmd=$*
|
||||
set --
|
||||
echo "$prompt" "$cmd" # It is as though you had entered a command.
|
||||
else
|
||||
# Readline
|
||||
read -e -r -p "$prompt" cmd
|
||||
# Check for EOF, and end the program if so (handles ^D).
|
||||
test $? -ne 0 && break
|
||||
fi
|
||||
|
||||
# History
|
||||
history -s "$cmd"
|
||||
# Add command to history if it is not all whitespace
|
||||
if [[ ! "$cmd" =~ ^[[:space:]]*$ ]]; then
|
||||
history -s "$cmd"
|
||||
fi
|
||||
|
||||
# Built-in commands
|
||||
case $cmd in
|
||||
ls) cmd=ls-files;;
|
||||
"") continue;;
|
||||
quit|exit) break;;
|
||||
"")
|
||||
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;;
|
||||
esac
|
||||
|
||||
history -a
|
||||
|
||||
if [[ $cmd == !* ]]; then
|
||||
eval ${cmd:1}
|
||||
# shellcheck disable=SC2086
|
||||
eval ${cmd:1}
|
||||
elif [[ $cmd == git* ]]; then
|
||||
# shellcheck disable=SC2086
|
||||
eval $cmd
|
||||
else
|
||||
eval git "$cmd"
|
||||
fi
|
||||
exit_status=$?
|
||||
done
|
||||
|
||||
echo
|
||||
|
|
|
|||
133
bin/git-scp
133
bin/git-scp
|
|
@ -59,7 +59,7 @@ function php_lint()
|
|||
|
||||
function _dos2unix()
|
||||
{
|
||||
command -v dos2unix > /dev/null && dos2unix $@
|
||||
command -v dos2unix > /dev/null && dos2unix "$@"
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
@ -68,8 +68,8 @@ function _sanitize()
|
|||
git config --get-all extras.scp.sanitize | while read -r i
|
||||
do
|
||||
case $i in
|
||||
php_lint) php_lint $@;; # git config --global --add extras.scp.sanitize php_lint
|
||||
dos2unix) _dos2unix $@;; # git config --global --add extras.scp.sanitize dos2unix
|
||||
php_lint) php_lint "$@";; # git config --global --add extras.scp.sanitize php_lint
|
||||
dos2unix) _dos2unix "$@";; # git config --global --add extras.scp.sanitize dos2unix
|
||||
esac
|
||||
done
|
||||
return $?
|
||||
|
|
@ -77,6 +77,17 @@ function _sanitize()
|
|||
|
||||
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"
|
||||
shift
|
||||
|
||||
|
|
@ -94,45 +105,116 @@ function scp_and_stage
|
|||
list=$(git ls-files "$@")" "$(git ls-files -o "$@")
|
||||
elif [ -n "$refhead" ]
|
||||
then
|
||||
git diff --stat "$refhead"
|
||||
[ "$verbose" -eq 1 ] && git --no-pager diff --stat "$refhead"
|
||||
list=$(git diff "$refhead" --name-only)
|
||||
else
|
||||
git diff
|
||||
[ "$verbose" -eq 1 ] && git --no-pager diff
|
||||
list=$(git diff --name-only)
|
||||
fi
|
||||
|
||||
deleted=$(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" ]
|
||||
then
|
||||
local _TMP=${0///}
|
||||
echo "$list" > "$_TMP" &&
|
||||
_sanitize $list &&
|
||||
_info "Pushing to $remote ($(git config "remote.$remote.url"))" &&
|
||||
rsync -rlDv --files-from="$_TMP" ./ "$(git config "remote.$remote.url")/" &&
|
||||
git add --force $list &&
|
||||
# shellcheck disable=SC2086
|
||||
echo "$list" > "$_TMP"
|
||||
if [ "$dry_run" -eq 1 ] || _sanitize $list
|
||||
then
|
||||
_info "Pushing to $remote ($(git config "remote.$remote.url"))"
|
||||
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"
|
||||
fi
|
||||
|
||||
deleted=$(for i in $deleted; do echo "$(git config "remote.$remote.url" | cut -d: -f2)/$i"; done)
|
||||
|
||||
[ -n "$deleted" ] &&
|
||||
COLOR_RED &&
|
||||
echo Deleted remote files &&
|
||||
ssh "$(git config "remote.$remote.url" | cut -d: -f1)" -t "rm $deleted" &&
|
||||
echo "$deleted"
|
||||
COLOR_RESET
|
||||
if [ -n "$deleted" ]
|
||||
then
|
||||
COLOR_RED
|
||||
echo Deleted remote files
|
||||
if [ "$dry_run" -eq 1 ]
|
||||
then
|
||||
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()
|
||||
{
|
||||
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"
|
||||
shift
|
||||
|
||||
local _TMP=${0///}
|
||||
echo $@ > "$_TMP" &&
|
||||
rsync -rlDv --files-from="$_TMP" "$(git config "remote.$remote.url")/" ./ &&
|
||||
echo "$@" > "$_TMP"
|
||||
|
||||
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"
|
||||
}
|
||||
|
||||
|
|
@ -147,9 +229,14 @@ function _usage()
|
|||
{
|
||||
echo "Usage:
|
||||
git scp -h|help|?
|
||||
git scp <remote> [ref|file..] # scp and stage your files to specified remote
|
||||
git scp <remote> [<ref>] # show diff relative to <ref> and upload unstaged files to <remote>
|
||||
git rscp <remote> [<file|directory>] # copy <remote> files to current working directory
|
||||
git scp [options] <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 rscp [options] <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
|
||||
|
|
@ -173,8 +260,8 @@ case $(basename "$0") in
|
|||
git-scp)
|
||||
case $1 in
|
||||
''|-h|'?'|help|--help) shift; _test_git_scp; _usage "$@";;
|
||||
*) scp_and_stage $@;;
|
||||
*) scp_and_stage "$@";;
|
||||
esac
|
||||
;;
|
||||
git-rscp) reverse_scp $@;;
|
||||
git-rscp) reverse_scp "$@";;
|
||||
esac
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
COMMIT_MESSAGE='Initial commit'
|
||||
|
||||
if [ "$1" == "-m" ]; then
|
||||
if [ "$1" = "-m" ]; then
|
||||
COMMIT_MESSAGE=$2
|
||||
shift; shift
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ in_git_repo=$?
|
|||
|
||||
# Use colors, but only if connected to a terminal, and that terminal
|
||||
# supports them.
|
||||
if command -v tput >/dev/null 2>&1; then
|
||||
if command -v tput &>/dev/null; then
|
||||
ncolors=$(tput colors)
|
||||
fi
|
||||
if [[ -t 1 ]] && [[ -n "$ncolors" ]] && [[ "$ncolors" -ge 8 ]] ; then
|
||||
|
|
@ -240,7 +240,8 @@ if [[ $in_git_repo != 0 ]]; then
|
|||
## Set delimiter to newline for the loop
|
||||
IFS=$'\n'
|
||||
## Recursively search for git repositories
|
||||
PROJECT_DIRS=$(find "$INCLUDE_LINKS" . -maxdepth "$MAXDEPTH" -mindepth 0 -name .git)
|
||||
# shellcheck disable=SC2086
|
||||
PROJECT_DIRS=$(find $INCLUDE_LINKS . -maxdepth "$MAXDEPTH" -mindepth 0 -name .git)
|
||||
|
||||
# Fetch the latest commits, if required
|
||||
if [ "$FETCH_LAST_COMMIT" = true ]; then
|
||||
|
|
|
|||
|
|
@ -3,12 +3,16 @@
|
|||
|
||||
cd "$(git root)" || { echo "Can't cd to top level directory";exit 1; }
|
||||
|
||||
PROJECT_FULL_PATH=
|
||||
SUMMARY_BY_LINE=
|
||||
DEDUP_BY_EMAIL=
|
||||
MERGES_ARG=
|
||||
OUTPUT_STYLE=
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--full-path)
|
||||
PROJECT_FULL_PATH=1
|
||||
;;
|
||||
--line)
|
||||
SUMMARY_BY_LINE=1
|
||||
;;
|
||||
|
|
@ -51,7 +55,12 @@ if [ -n "$SUMMARY_BY_LINE" ]; then
|
|||
else
|
||||
[ $# -ne 0 ] && commit=$*
|
||||
fi
|
||||
project=${PWD##*/}
|
||||
|
||||
if [[ -n "$PROJECT_FULL_PATH" ]]; then
|
||||
project=${PWD/${HOME}/\~}
|
||||
else
|
||||
project=${PWD##*/}
|
||||
fi
|
||||
|
||||
#
|
||||
# get date for the given <commit>
|
||||
|
|
@ -77,7 +86,7 @@ active_days() {
|
|||
#
|
||||
commit_count() {
|
||||
# shellcheck disable=SC2086
|
||||
git log $MERGES_ARG --oneline "$commit" | wc -l | tr -d ' '
|
||||
git rev-list $MERGES_ARG --count "$commit"
|
||||
}
|
||||
|
||||
#
|
||||
|
|
@ -197,10 +206,10 @@ COLUMN_CMD_DELIMTER="¬" # Hopefully, this symbol is not used in branch names...
|
|||
SP="$COLUMN_CMD_DELIMTER|"
|
||||
|
||||
print_summary_by_line() {
|
||||
if [ "$OUTPUT_STYLE" == "tabular" ]; then
|
||||
if [ "$OUTPUT_STYLE" = "tabular" ]; then
|
||||
tabular_headers="# Repo $SP Lines"
|
||||
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[@]}")"
|
||||
elif [ -n "$SUMMARY_BY_LINE" ]; then
|
||||
echo
|
||||
|
|
@ -212,10 +221,10 @@ print_summary_by_line() {
|
|||
}
|
||||
|
||||
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"
|
||||
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)"
|
||||
else
|
||||
echo
|
||||
|
|
@ -227,7 +236,7 @@ print_summary() {
|
|||
echo " commits : $(commit_count "$commit")"
|
||||
|
||||
# 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)"
|
||||
fi
|
||||
echo " uncommitted : $(uncommitted_changes_count)"
|
||||
|
|
|
|||
14
bin/git-unwip
Executable file
14
bin/git-unwip
Executable file
|
|
@ -0,0 +1,14 @@
|
|||
#!/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
|
||||
165
bin/git-utimes
165
bin/git-utimes
|
|
@ -2,45 +2,130 @@
|
|||
#
|
||||
# Change files modification time to their last commit date
|
||||
#
|
||||
if [ "$1" = "--touch" ]; then
|
||||
# Internal use option only just to parallelize things.
|
||||
newer_flag=""
|
||||
[ "$2" = "--newer" ] && newer_flag="true"
|
||||
shift 2
|
||||
bsd=$(date -j > /dev/null 2>&1 && echo 'true')
|
||||
if [ -n "$bsd" ]; then
|
||||
stat_flags="-f %m"
|
||||
date_flags="-r"
|
||||
else
|
||||
stat_flags="-c %Y"
|
||||
date_flags="-d@"
|
||||
fi
|
||||
for f; do
|
||||
git_s=$(git --no-pager log --no-renames --pretty=format:%ct -1 @ -- "$f" 2>/dev/null)
|
||||
# shellcheck disable=SC2086
|
||||
mod_s=$(stat $stat_flags "$f" 2>/dev/null)
|
||||
if [ -n "$git_s" ] && [ -n "$mod_s" ] && [ "$mod_s" -ne "$git_s" ]; then
|
||||
if [ "$mod_s" -gt "$git_s" ] || [ -z "$newer_flag" ]; then
|
||||
# shellcheck disable=SC2086
|
||||
t=$(date $date_flags$git_s '+%Y%m%d%H%M.%S')
|
||||
echo "+ touch -h -t $t $f" >&2
|
||||
touch -h -t "$t" "$f"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
opt_r=$(xargs -r false < /dev/null > /dev/null 2>&1 && echo '-r')
|
||||
|
||||
# `-n` should be limited or parallelization will not give effect,
|
||||
# because all args will go into single worker.
|
||||
NPROC=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null)
|
||||
# don't touch files that have been modified in the worktree or index
|
||||
# bsd doesn't have `-z` option for `comm` and `cut`, so use `tr` as work around
|
||||
prefix="$(git rev-parse --show-prefix) "
|
||||
# shellcheck disable=SC2086
|
||||
comm -23 <(git ls-tree -z -r --name-only --full-name @ | tr '\0' '\n' | sort) \
|
||||
<(git status -z --porcelain | tr '\0' '\n' | cut -c 4- | sort) \
|
||||
| cut -c ${#prefix}- \
|
||||
| tr '\n' '\0' \
|
||||
| xargs -0 -P"${NPROC:-1}" -n 24 $opt_r git utimes --touch "$1"
|
||||
# Bash unofficial strict mode
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
if [[ "${1:-}" == "--newer" ]]; then
|
||||
op=le
|
||||
shift
|
||||
else
|
||||
op=eq
|
||||
fi
|
||||
|
||||
# BSD systems
|
||||
if date -j &>/dev/null; then
|
||||
stat_flags="-f %m"
|
||||
date_flags="-r"
|
||||
else
|
||||
# Non-BSD systems
|
||||
stat_flags="-c %Y"
|
||||
date_flags="-d@"
|
||||
fi
|
||||
|
||||
bash_opts=()
|
||||
if bash --help 2>&1 | grep -q -- '--noprofile'; then
|
||||
bash_opts+=(--noprofile)
|
||||
fi
|
||||
if bash --help 2>&1 | grep -q -- '--norc'; then
|
||||
bash_opts+=(--norc)
|
||||
fi
|
||||
|
||||
status_opts=(--porcelain --short)
|
||||
# %ct: committer date, UNIX timestamp / %at: author date, UNIX timestamp
|
||||
log_opts=(--format='%ct')
|
||||
if git status --help 2>&1 | grep -q -- "--no-renames"; then
|
||||
status_opts+=(--no-renames)
|
||||
log_opts+=(--no-renames)
|
||||
fi
|
||||
if git status --help 2>&1 | grep -q -- "--untracked-files"; then
|
||||
status_opts+=(--untracked-files=no)
|
||||
fi
|
||||
if git status --help 2>&1 | grep -q -- "--ignored"; then
|
||||
status_opts+=(--ignored=no)
|
||||
fi
|
||||
|
||||
prefix="$(git rev-parse --show-prefix) "
|
||||
strip="${#prefix}"
|
||||
|
||||
tmpfile=$(mktemp)
|
||||
# shellcheck disable=SC2064
|
||||
trap "rm -f '${tmpfile}'" 0
|
||||
|
||||
awk_flags=(
|
||||
-F'\t'
|
||||
-v date_flags="${date_flags}"
|
||||
-v op="${op}"
|
||||
-v stat_flags="${stat_flags}"
|
||||
-v strip="${strip}"
|
||||
-v tmpfile="${tmpfile}"
|
||||
)
|
||||
|
||||
# sanity check, not required:
|
||||
if awk --help 2>&1 | grep -q -- '--posix'; then
|
||||
awk_flags+=(--posix)
|
||||
fi
|
||||
|
||||
read -r -d '' awk_script <<"EOF" || true
|
||||
BEGIN {
|
||||
seen[""]=1
|
||||
print "#!/usr/bin/env bash"
|
||||
print "set +e"
|
||||
print "t() {"
|
||||
print " test -e \"$2\" || return 0"
|
||||
printf(" test \"$(stat %s \"$2\" 2>/dev/null)\" -%s \"$1\" && return 0\n", stat_flags, op)
|
||||
if (date_flags == "-d@") {
|
||||
print " echo \"+ touch -h -d@$1 $2\""
|
||||
print " touch -h -d@$1 \"$2\""
|
||||
} else {
|
||||
print " t=$(date -r$1 \"+%Y%m%d%H%M.%S\")"
|
||||
print " echo \"+ touch -h -t $t $2\""
|
||||
print " touch -h -t $t \"$2\""
|
||||
}
|
||||
print "}"
|
||||
}
|
||||
FILENAME==tmpfile {
|
||||
skip[$1]=1
|
||||
next
|
||||
}
|
||||
# skip blank lines
|
||||
!/^$/ {
|
||||
# skip deletes
|
||||
if (substr($1, length($1), 1) ~ /D/) {
|
||||
next
|
||||
}
|
||||
if (NF == 1) {
|
||||
ct=$1
|
||||
next
|
||||
}
|
||||
$2 = substr($2, strip, length($2)- strip + 1)
|
||||
if ($2 in seen) {
|
||||
next
|
||||
}
|
||||
if ($2 in skip) {
|
||||
next
|
||||
}
|
||||
seen[$2]=1
|
||||
# remove enclosing double quotes that git adds:
|
||||
if (substr($2, 1, 1) == "\"" && substr($2, length($2), 1) == "\"") {
|
||||
$2 = substr($2, 2, length($2) - 2)
|
||||
# unescape remaining double quotes
|
||||
gsub(/\\"/, "\"", $2)
|
||||
# unescape escaped backslashes
|
||||
gsub(/\\\\/, "\\", $2)
|
||||
}
|
||||
# escape apostrophes: ' => '\''
|
||||
gsub(/'/, "'\\''", $2)
|
||||
printf("t %s '%s'\n", ct, $2)
|
||||
}
|
||||
EOF
|
||||
|
||||
# prefix is stripped:
|
||||
git --no-pager status "${status_opts[@]}" . \
|
||||
| cut -c 4- >"${tmpfile}"
|
||||
|
||||
# prefix is not stripped:
|
||||
git --no-pager log --raw --no-merges "${log_opts[@]}" . \
|
||||
| awk "${awk_flags[@]}" "${awk_script}" "${tmpfile}" - \
|
||||
| BASH_ENV='' bash "${bash_opts[@]}" -
|
||||
|
|
|
|||
8
bin/git-wip
Executable file
8
bin/git-wip
Executable file
|
|
@ -0,0 +1,8 @@
|
|||
#!/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"
|
||||
|
|
@ -6,7 +6,7 @@ err() {
|
|||
}
|
||||
|
||||
make_doc() {
|
||||
echo "'touch man/git-$1.md && make man/git-$1.{1,html}'"
|
||||
echo "touch man/git-$1.md && make man/git-$1.{1,html}"
|
||||
}
|
||||
|
||||
check_bash_script() {
|
||||
|
|
@ -47,6 +47,11 @@ check_documentation() {
|
|||
err "Create man/$cmd.1 and man/$cmd.html via $(make_doc "$1")"
|
||||
fi
|
||||
|
||||
if [ "man/$cmd.md" -nt "man/$cmd.1" ] || [ "man/$cmd.md" -nt "man/$cmd.html" ]
|
||||
then
|
||||
err "man/$cmd.md, man/$cmd.1, and man/$cmd.html all exist, but man/$cmd.md is newer. You should rm man/$cmd.{1,html} && $(make_doc "$1")"
|
||||
fi
|
||||
|
||||
check_git_extras_cmd_list "$@"
|
||||
check_man_page_index "$@"
|
||||
}
|
||||
|
|
@ -77,12 +82,9 @@ check() {
|
|||
check_completion "$1"
|
||||
}
|
||||
|
||||
usage() {
|
||||
echo >&2 "Usage: ./check_integrity.sh <command-name> [<command-name2> ...]"
|
||||
exit 0
|
||||
}
|
||||
test $# == 0 && set -- $(find bin | cut -b 5- | xargs)
|
||||
|
||||
test $# == 0 && usage
|
||||
./bin/git-utimes --newer
|
||||
|
||||
for name in "$@"; do
|
||||
name=${name#git-}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,29 @@
|
|||
# shellcheck shell=bash
|
||||
# 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(){
|
||||
local s_opts=( '-a' '-l' '-t' '-f' '-s' '-n' '-p' '-x' '-h' '?' )
|
||||
local l_opts=(
|
||||
|
|
@ -22,10 +45,6 @@ _git_changelog(){
|
|||
__gitcomp "$merged_opts_str"
|
||||
}
|
||||
|
||||
_git_authors(){
|
||||
__gitcomp "-l --list --no-email"
|
||||
}
|
||||
|
||||
_git_coauthor(){
|
||||
local oldIfs=$IFS
|
||||
IFS=$'\n'
|
||||
|
|
@ -63,6 +82,10 @@ _git_contrib(){
|
|||
COMPREPLY=($(compgen -W "$all" -- "$cur"))
|
||||
}
|
||||
|
||||
_git_commits_since(){
|
||||
__gitcomp "-r --ref"
|
||||
}
|
||||
|
||||
_git_count(){
|
||||
__gitcomp "--all"
|
||||
}
|
||||
|
|
@ -72,7 +95,7 @@ __git_cp(){
|
|||
}
|
||||
|
||||
_git_delete_branch(){
|
||||
__gitcomp "$(__git_heads)"
|
||||
__gitcomp "$(__gitex_heads_unique)"
|
||||
}
|
||||
|
||||
_git_delete_squashed_branches(){
|
||||
|
|
@ -122,16 +145,20 @@ _git_graft(){
|
|||
_git_ignore(){
|
||||
case "$cur" in
|
||||
--*)
|
||||
__gitcomp "--global --local --private"
|
||||
__gitcomp "--global --local --private --edit --remove"
|
||||
return
|
||||
;;
|
||||
-*)
|
||||
__gitcomp "--global --local --private -g -l -p"
|
||||
__gitcomp "--global --local --private --edit --remove -g -l -p -e -r"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_git_info(){
|
||||
__gitcomp "--color -c --no-config"
|
||||
}
|
||||
|
||||
_git_missing(){
|
||||
# Suggest all known refs
|
||||
__gitcomp "$(git for-each-ref --format='%(refname:short)')"
|
||||
|
|
@ -154,34 +181,40 @@ _git_reauthor(){
|
|||
__gitcomp "${comp}"
|
||||
}
|
||||
|
||||
_git_scp(){
|
||||
__git_complete_remote_or_refspec
|
||||
__git_extras_rename(){
|
||||
if ((COMP_CWORD == 2 || COMP_CWORD == 3)); then
|
||||
__gitcomp "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
_git_stamp(){
|
||||
__gitcomp '--replace -r'
|
||||
_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_scp(){
|
||||
__git_complete_remote_or_refspec
|
||||
}
|
||||
|
||||
_git_squash(){
|
||||
__gitcomp "$(__git_heads)"
|
||||
}
|
||||
|
||||
_git_stamp(){
|
||||
__gitcomp '--replace -r'
|
||||
}
|
||||
|
||||
_git_undo(){
|
||||
__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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,6 +72,15 @@ __gitex_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() {
|
||||
local expl
|
||||
declare -a branch_names
|
||||
|
|
@ -92,6 +101,13 @@ __gitex_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() {
|
||||
local expl
|
||||
|
|
@ -117,6 +133,27 @@ _git-authors() {
|
|||
'--no-email[without email]' \
|
||||
}
|
||||
|
||||
_git-brv() {
|
||||
_arguments \
|
||||
'(-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() {
|
||||
_arguments \
|
||||
'(-l --list)'{-l,--list}'[list commits]' \
|
||||
|
|
@ -134,6 +171,11 @@ _git-coauthor() {
|
|||
':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() {
|
||||
_arguments \
|
||||
':author:__gitex_author_names'
|
||||
|
|
@ -168,8 +210,12 @@ _git-create-branch() {
|
|||
}
|
||||
|
||||
_git-delete-branch() {
|
||||
__gitex_branch_names_unique
|
||||
}
|
||||
|
||||
_git-delete-gone-branches() {
|
||||
_arguments \
|
||||
':branch-name:__gitex_branch_names'
|
||||
'(-n --dry-run)'{-n,--dry-run}'[show branches that would be deleted without deleting]'
|
||||
}
|
||||
|
||||
_git-delete-squashed-branches() {
|
||||
|
|
@ -271,9 +317,11 @@ _git-guilt() {
|
|||
|
||||
_git-ignore() {
|
||||
_arguments -C \
|
||||
'(--local -l)'{--local,-l}'[show local gitignore]' \
|
||||
'(--global -g)'{--global,-g}'[show global gitignore]' \
|
||||
'(--private -p)'{--private,-p}'[show repo gitignore]' \
|
||||
'(--local -l)'{--local,-l}'[set context to local gitignore]' \
|
||||
'(--global -g)'{--global,-g}'[set context to global gitignore]' \
|
||||
'(--private -p)'{--private,-p}'[set context to private gitignore]' \
|
||||
'(--edit -e)'{--edit,-e}'[set action to edit]' \
|
||||
'(--remove -r)'{--remove,-r}'[set action to remove]' \
|
||||
'*:filename:_files'
|
||||
}
|
||||
|
||||
|
|
@ -311,6 +359,14 @@ _git-release() {
|
|||
'--[The arguments listed after "--" separator will be passed to pre/post-release hook.]'
|
||||
}
|
||||
|
||||
_git-rename-file() {
|
||||
_arguments -C \
|
||||
'-h[show usage information]' \
|
||||
'--help[show usage information]' \
|
||||
'1:source:__git_files' \
|
||||
'2:destination:__git_files'
|
||||
}
|
||||
|
||||
_git-squash() {
|
||||
_arguments '--squash-msg[commit with the squashed commit messages]'
|
||||
_arguments \
|
||||
|
|
@ -336,6 +392,7 @@ _git-standup() {
|
|||
}
|
||||
|
||||
_git-summary() {
|
||||
_arguments '--full-path[show repository full path]'
|
||||
_arguments '--line[summarize with lines rather than commits]'
|
||||
_arguments '--dedup-by-email[remove duplicate users by the email address]'
|
||||
_arguments '--no-merges[exclude merge commits]'
|
||||
|
|
@ -366,10 +423,12 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \
|
|||
clear:'rigorously clean up a repository' \
|
||||
coauthor:'add a co-author to the last commit' \
|
||||
commits-since:'show commit logs since some date' \
|
||||
continue:'continue current revert, merge, rebase, or cherry-pick process' \
|
||||
contrib:'show user contributions' \
|
||||
count:'show commit count' \
|
||||
create-branch:'create branches' \
|
||||
delete-branch:'delete branches' \
|
||||
delete-gone-branches:'delete branches whose remote is gone' \
|
||||
delete-merged-branches:'delete merged branches' \
|
||||
delete-squashed-branches:'delete squashed branches' \
|
||||
delete-submodule:'delete submodules' \
|
||||
|
|
@ -386,7 +445,7 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \
|
|||
graft:'merge and destroy a given branch' \
|
||||
guilt:'calculate change between two revisions' \
|
||||
ignore-io:'get sample gitignore file' \
|
||||
ignore:'add .gitignore patterns' \
|
||||
ignore:'Modify or display .gitignore files' \
|
||||
info:'returns information on current repository' \
|
||||
local-commits:'list local commits' \
|
||||
lock:'lock a file excluded from version control' \
|
||||
|
|
@ -406,6 +465,7 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \
|
|||
refactor:'create refactor branch' \
|
||||
release:'commit, tag and push changes to the repository' \
|
||||
rename-branch:'rename a branch' \
|
||||
rename-file:'rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity' \
|
||||
rename-tag:'rename a tag' \
|
||||
rename-remote:'rename a remote' \
|
||||
repl:'git read-eval-print-loop' \
|
||||
|
|
@ -425,4 +485,6 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \
|
|||
touch:'touch and add file to the index' \
|
||||
undo:'remove latest commits' \
|
||||
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'
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ set __fish_git_extras_commands \
|
|||
"graft:Merge and destroy a given branch" \
|
||||
"guilt:calculate change between two revisions" \
|
||||
"ignore-io:Get sample gitignore file" \
|
||||
"ignore:Add .gitignore patterns" \
|
||||
"ignore:Modify or display .gitignore files" \
|
||||
"info:Returns information on current repository" \
|
||||
"local-commits:List local commits" \
|
||||
"lock:Lock a file excluded from version control" \
|
||||
|
|
@ -50,6 +50,7 @@ set __fish_git_extras_commands \
|
|||
"rebase-patch:Rebases a patch" \
|
||||
"release:Commit, tag and push changes to the repository" \
|
||||
"rename-branch:rename local branch and push to remote" \
|
||||
"rename-file:rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity" \
|
||||
"rename-remote:Rename a remote" \
|
||||
"rename-tag:Rename a tag" \
|
||||
"repl:git read-eval-print-loop" \
|
||||
|
|
@ -82,6 +83,8 @@ complete -c git -n __fish_git_needs_command -a "$__fish_git_extras_commands"
|
|||
# authors
|
||||
complete -c git -f -n '__fish_git_using_command authors' -s l -l list -d 'show authors'
|
||||
complete -c git -f -n '__fish_git_using_command authors' -l no-email -d 'without email'
|
||||
# brv
|
||||
complete -c git -f -n '__fish_git_using_command brv' -s r -l reverse -d 'reverse the sort order'
|
||||
# bulk
|
||||
complete -c git -n '__fish_git_using_command bulk' -s a -d 'Run a git command on all workspaces and their repositories'
|
||||
complete -c git -n '__fish_git_using_command bulk' -s g -d 'Ask the user for confirmation on every execution'
|
||||
|
|
@ -128,6 +131,8 @@ function __fish_git_extra_coauthor_email
|
|||
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 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
|
||||
complete -c git -f -n '__fish_git_using_command count' -l all -d 'detailed commit count'
|
||||
# create-branch
|
||||
|
|
@ -157,9 +162,11 @@ 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 h -d 'output usage information'
|
||||
# ignore
|
||||
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 'show global 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 l -l local -d 'set context to 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 p -l private -d 'set context to private 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
|
||||
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
|
||||
|
|
@ -178,6 +185,8 @@ complete -c git -n '__fish_git_using_command merge-into' -l ff-only -d 'merge on
|
|||
complete -c git -x -n '__fish_git_using_command merge-into' -a '(__fish_git_branches)'
|
||||
# missing
|
||||
complete -c git -x -n '__fish_git_using_command missing' -a '(__fish_git_branches)'
|
||||
# rename-file
|
||||
complete -c git -f -n '__fish_git_using_command rename-file' -s h -l help -d 'Show usage information'
|
||||
# squash
|
||||
complete -c git -x -n '__fish_git_using_command squash' -a '(__fish_git_branches)'
|
||||
complete -c git -x -n '__fish_git_using_command squash' -l squash-msg -d 'commit with the squashed commit messages'
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
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)'
|
||||
|
|
@ -3,7 +3,9 @@
|
|||
#
|
||||
|
||||
is_git_repo() {
|
||||
git rev-parse --show-toplevel > /dev/null 2>&1
|
||||
# --git-dir succeeds for both normal and bare repositories, whereas
|
||||
# --show-toplevel fails inside a bare repository (it has no working tree).
|
||||
git rev-parse --git-dir > /dev/null 2>&1
|
||||
result=$?
|
||||
if test $result != 0; then
|
||||
>&2 echo 'Not a git repo!'
|
||||
|
|
|
|||
47
install.cmd
47
install.cmd
|
|
@ -39,13 +39,34 @@ goto :defaultpath
|
|||
rem remove the last slash
|
||||
SET bindir=%bindir:~0,-1%
|
||||
for %%G in ("%bindir%") do set installdir=%%~dpG
|
||||
set PREFIX=%installdir%mingw64
|
||||
rem strip a trailing slash so we can inspect the leaf directory name
|
||||
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
|
||||
|
||||
:defaultpath
|
||||
:: default for Git for Windows 2.x
|
||||
if exist "%ProgramFiles%\Git" (
|
||||
set PREFIX=%ProgramFiles%\Git\mingw64
|
||||
if exist "%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
|
||||
|
|
@ -55,9 +76,11 @@ IF NOT "%~1"=="" (
|
|||
REM just supplying the git dir is enough...
|
||||
if exist "%~1\mingw64" (
|
||||
set PREFIX=%~1\mingw64
|
||||
) else if exist "%~1\clangarm64" (
|
||||
set PREFIX=%~1\clangarm64
|
||||
) else (
|
||||
echo Using git install path "%~1" as PREFIX, please make sure it's really a
|
||||
echo path to the mingw64 directory...
|
||||
echo path to the mingw64 or clangarm64 directory...
|
||||
echo.
|
||||
SET PREFIX=%~1
|
||||
)
|
||||
|
|
@ -72,12 +95,14 @@ set GIT_INSTALL_DIR=!GIT_INSTALL_DIR:"=!
|
|||
IF %GIT_INSTALL_DIR:~-1%==\ SET GIT_INSTALL_DIR=%GIT_INSTALL_DIR:~0,-1%
|
||||
|
||||
if not exist "%GIT_INSTALL_DIR%\mingw64" (
|
||||
echo No mingw64 folder found in %GIT_INSTALL_DIR%.
|
||||
echo.
|
||||
echo Please supply a proper "Git for Windows 2.x" install path:
|
||||
echo "install.cmd c:\[git-install-path]"
|
||||
set ERROR=1
|
||||
goto :exit
|
||||
if not exist "%GIT_INSTALL_DIR%\clangarm64" (
|
||||
echo No mingw64 or clangarm64 folder found in %GIT_INSTALL_DIR%.
|
||||
echo.
|
||||
echo Please supply a proper "Git for Windows 2.x" install path:
|
||||
echo "install.cmd c:\[git-install-path]"
|
||||
set ERROR=1
|
||||
goto :exit
|
||||
)
|
||||
)
|
||||
|
||||
echo Installing to %PREFIX%
|
||||
|
|
@ -116,7 +141,7 @@ FOR /R "%GITEXTRAS%\bin" %%i in (*.*) DO (
|
|||
TYPE "%GITEXTRAS%\helper\reset-env" >> "%PREFIX%\bin\%%~ni"
|
||||
TYPE "%GITEXTRAS%\helper\git-extra-utility" >> "%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
|
||||
MORE /E +2 "%GITEXTRAS%\bin\%%~ni" >> "%PREFIX%\bin\%%~ni"
|
||||
)
|
||||
|
|
@ -127,7 +152,7 @@ FOR %%i in (%COMMANDS_WITHOUT_REPO%) DO (
|
|||
ECHO #^^!/usr/bin/env bash > "%PREFIX%\bin\%%i"
|
||||
TYPE "%GITEXTRAS%\helper\reset-env" >> "%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
|
||||
MORE /E +2 "%GITEXTRAS%\bin\%%i" >> "%PREFIX%\bin\%%i"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,10 +1,27 @@
|
|||
.\" generated with Ronn-NG/v0.9.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1
|
||||
.TH "GIT\-ALIAS" "1" "September 2023" "" "Git Extras"
|
||||
.TH "GIT\-ALIAS" "1" "September 2024" "" "Git Extras"
|
||||
.SH "NAME"
|
||||
\fBgit\-alias\fR \- Define, search and show aliases
|
||||
.SH "SYNOPSIS"
|
||||
\fBgit\-alias\fR \fBgit\-alias\fR <search\-pattern> \fBgit\-alias\fR <alias\-name> <command> \fBgit\-alias\fR [\-\-global] \fBgit\-alias\fR [\-\-local] \fBgit\-alias\fR [\-\-global] <search\-pattern> \fBgit\-alias\fR [\-\-local] <search\-pattern> \fBgit\-alias\fR [\-\-global] <alias\-name> <command> \fBgit\-alias\fR [\-\-local] <alias\-name> <command>
|
||||
\fBgit\-alias\fR
|
||||
.br
|
||||
\fBgit\-alias\fR <search\-pattern>
|
||||
.br
|
||||
\fBgit\-alias\fR <alias\-name> <command>
|
||||
.br
|
||||
\fBgit\-alias\fR [\-\-global]
|
||||
.br
|
||||
\fBgit\-alias\fR [\-\-local]
|
||||
.br
|
||||
\fBgit\-alias\fR [\-\-global] <search\-pattern>
|
||||
.br
|
||||
\fBgit\-alias\fR [\-\-local] <search\-pattern>
|
||||
.br
|
||||
\fBgit\-alias\fR [\-\-global] <alias\-name> <command>
|
||||
.br
|
||||
\fBgit\-alias\fR [\-\-local] <alias\-name> <command>
|
||||
.br
|
||||
.SH "DESCRIPTION"
|
||||
List all aliases, show one alias, or set one (global or local) alias\.
|
||||
.SH "OPTIONS"
|
||||
|
|
@ -50,8 +67,8 @@ $ git alias
|
|||
s = status
|
||||
amend = commit \-\-amend
|
||||
rank = shortlog \-sn \-\-no\-merges
|
||||
whatis = show \-s \-\-pretty=\'tformat:%h (%s, %ad)\' \-\-date=short
|
||||
whois = !sh \-c \'git log \-i \-1 \-\-pretty="format:%an <%ae>
|
||||
whatis = show \-s \-\-pretty='tformat:%h (%s, %ad)' \-\-date=short
|
||||
whois = !sh \-c 'git log \-i \-1 \-\-pretty="format:%an <%ae>
|
||||
.fi
|
||||
.IP "" 0
|
||||
.SH "AUTHOR"
|
||||
|
|
|
|||
|
|
@ -77,15 +77,15 @@
|
|||
</p>
|
||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<p><code>git-alias</code>
|
||||
<code>git-alias</code> <search-pattern>
|
||||
<code>git-alias</code> <alias-name> <command>
|
||||
<code>git-alias</code> [--global]
|
||||
<code>git-alias</code> [--local]
|
||||
<code>git-alias</code> [--global] <search-pattern>
|
||||
<code>git-alias</code> [--local] <search-pattern>
|
||||
<code>git-alias</code> [--global] <alias-name> <command>
|
||||
<code>git-alias</code> [--local] <alias-name> <command></p>
|
||||
<p><code>git-alias</code> <br>
|
||||
<code>git-alias</code> <search-pattern> <br>
|
||||
<code>git-alias</code> <alias-name> <command> <br>
|
||||
<code>git-alias</code> [--global] <br>
|
||||
<code>git-alias</code> [--local] <br>
|
||||
<code>git-alias</code> [--global] <search-pattern> <br>
|
||||
<code>git-alias</code> [--local] <search-pattern> <br>
|
||||
<code>git-alias</code> [--global] <alias-name> <command> <br>
|
||||
<code>git-alias</code> [--local] <alias-name> <command> <br></p>
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
|
|
@ -150,7 +150,7 @@ whois = !sh -c 'git log -i -1 --pretty="format:%an <%ae>
|
|||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>September 2023</li>
|
||||
<li class='tc'>September 2024</li>
|
||||
<li class='tr'>git-alias(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -3,15 +3,15 @@ git-alias(1) -- Define, search and show aliases
|
|||
|
||||
## SYNOPSIS
|
||||
|
||||
`git-alias`
|
||||
`git-alias` <search-pattern>
|
||||
`git-alias` <alias-name> <command>
|
||||
`git-alias` [--global]
|
||||
`git-alias` [--local]
|
||||
`git-alias` [--global] <search-pattern>
|
||||
`git-alias` [--local] <search-pattern>
|
||||
`git-alias` [--global] <alias-name> <command>
|
||||
`git-alias` [--local] <alias-name> <command>
|
||||
`git-alias` <br>
|
||||
`git-alias` <search-pattern> <br>
|
||||
`git-alias` <alias-name> <command> <br>
|
||||
`git-alias` [--global] <br>
|
||||
`git-alias` [--local] <br>
|
||||
`git-alias` [--global] <search-pattern> <br>
|
||||
`git-alias` [--local] <search-pattern> <br>
|
||||
`git-alias` [--global] <alias-name> <command> <br>
|
||||
`git-alias` [--local] <alias-name> <command> <br>
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
.\" generated with Ronn-NG/v0.9.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1
|
||||
.TH "GIT\-ARCHIVE\-FILE" "1" "May 2020" "" "Git Extras"
|
||||
.\" generated with Ronn-NG/v0.10.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
||||
.TH "GIT\-ARCHIVE\-FILE" "1" "March 2026" "" "Git Extras"
|
||||
.SH "NAME"
|
||||
\fBgit\-archive\-file\fR \- Export the current HEAD of the git repository to an archive
|
||||
.SH "SYNOPSIS"
|
||||
|
|
@ -14,11 +14,11 @@ Archive naming conventions:
|
|||
.P
|
||||
On any branch: \fBgit\-extras\.1\.7\.0\-110\-gafefba7\.branch\-name\.zip\fR
|
||||
.P
|
||||
On master branch: \fBgit\-extras\.1\.7\.0\-110\-gafefba7\.zip\fR
|
||||
On the default branch: \fBgit\-extras\.1\.7\.0\-110\-gafefba7\.zip\fR
|
||||
.P
|
||||
On a detached HEAD (e\.g\. a tag): \fBgit\-extras\.1\.7\.0\.zip\fR
|
||||
.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"
|
||||
Written by Philipp Klose <\fIme@thehippo\.de\fR>
|
||||
.SH "REPORTING BUGS"
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv='content-type' content='text/html;charset=utf8'>
|
||||
<meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>
|
||||
<meta http-equiv='content-type' content='text/html;charset=utf-8'>
|
||||
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>
|
||||
<title>git-archive-file(1) - Export the current HEAD of the git repository to an archive</title>
|
||||
<style type='text/css' media='all'>
|
||||
/* 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 master branch: <code>git-extras.1.7.0-110-gafefba7.zip</code></p>
|
||||
<p>On the default 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>
|
||||
|
||||
|
|
@ -113,7 +113,7 @@
|
|||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>May 2020</li>
|
||||
<li class='tc'>March 2026</li>
|
||||
<li class='tr'>git-archive-file(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ Archive naming conventions:
|
|||
|
||||
On any branch: `git-extras.1.7.0-110-gafefba7.branch-name.zip`
|
||||
|
||||
On master branch: `git-extras.1.7.0-110-gafefba7.zip`
|
||||
On the default branch: `git-extras.1.7.0-110-gafefba7.zip`
|
||||
|
||||
On a detached HEAD (e.g. a tag): `git-extras.1.7.0.zip`
|
||||
|
||||
|
|
|
|||
|
|
@ -1,87 +1,59 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "GIT\-AUTHORS" "1" "October 2017" "" "Git Extras"
|
||||
.
|
||||
.\" generated with Ronn-NG/v0.9.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1
|
||||
.TH "GIT\-AUTHORS" "1" "November 2023" "" "Git Extras"
|
||||
.SH "NAME"
|
||||
\fBgit\-authors\fR \- Generate authors report
|
||||
.
|
||||
.SH "SYNOPSIS"
|
||||
\fBgit\-authors\fR [\-l, \-\-list] [\-\-no\-email]
|
||||
.
|
||||
.SH "DESCRIPTION"
|
||||
Populates the file matching \fIauthors|contributors \-i\fR with the authors of commits, according to the number of commits per author\. Opens the file in \fB$EDITOR\fR when set\.
|
||||
.
|
||||
.TS
|
||||
allbox;
|
||||
Populates the file matching _authors contributors \-i_ with the authors of commits, according to the number of commits per author\.
|
||||
.TE
|
||||
.P
|
||||
See the "MAPPING AUTHORS" section of \fBgit\-shortlog\fR(1) to coalesce together commits by the same person\.
|
||||
.
|
||||
.SH "OPTIONS"
|
||||
\-l, \-\-list
|
||||
.
|
||||
.P
|
||||
Show authors\.
|
||||
.
|
||||
.P
|
||||
\-\-no\-email
|
||||
.
|
||||
.P
|
||||
Don\'t show authors\' email\.
|
||||
.
|
||||
.SH "EXAMPLES"
|
||||
.
|
||||
.TP
|
||||
Updating AUTHORS file:
|
||||
.
|
||||
.IP
|
||||
$ git authors
|
||||
.
|
||||
.TP
|
||||
Listing authors:
|
||||
.
|
||||
.IP
|
||||
$ git authors \-\-list
|
||||
.
|
||||
.IP "" 4
|
||||
.
|
||||
.nf
|
||||
|
||||
$ git authors
|
||||
.fi
|
||||
.IP "" 0
|
||||
.P
|
||||
Listing authors:
|
||||
.IP "" 4
|
||||
.nf
|
||||
$ git authors \-\-list
|
||||
TJ Holowaychuk <tj@vision\-media\.ca>
|
||||
hemanth\.hm <hemanth\.hm@gmail\.com>
|
||||
Jonhnny Weslley <jw@jonhnnyweslley\.net>
|
||||
nickl\- <github@jigsoft\.co\.za>
|
||||
Leila Muhtasib <muhtasib@gmail\.com>
|
||||
.
|
||||
.fi
|
||||
.
|
||||
.IP "" 0
|
||||
|
||||
.
|
||||
.TP
|
||||
.P
|
||||
Listing authors without email:
|
||||
.
|
||||
.IP
|
||||
$ git authors \-\-list \-\-no\-email
|
||||
.
|
||||
.IP "" 4
|
||||
.
|
||||
.nf
|
||||
|
||||
$ git authors \-\-list \-\-no\-email
|
||||
TJ Holowaychuk
|
||||
hemanth\.hm
|
||||
Jonhnny Weslley
|
||||
nickl\-
|
||||
Leila Muhtasib
|
||||
.
|
||||
.fi
|
||||
.
|
||||
.IP "" 0
|
||||
|
||||
.
|
||||
.SH "AUTHOR"
|
||||
Written by Titus Wormer <\fItituswormer@gmail\.com\fR>
|
||||
.
|
||||
.SH "REPORTING BUGS"
|
||||
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
|
||||
.
|
||||
.SH "SEE ALSO"
|
||||
<\fIhttps://github\.com/tj/git\-extras\fR>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<!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)'>
|
||||
<meta http-equiv='content-type' content='text/html;charset=utf8'>
|
||||
<meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>
|
||||
<title>git-authors(1) - Generate authors report</title>
|
||||
<style type='text/css' media='all'>
|
||||
/* style: man */
|
||||
|
|
@ -69,64 +69,69 @@
|
|||
<li class='tr'>git-authors(1)</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
<p class="man-name">
|
||||
<code>git-authors</code> - <span class="man-whatis">Generate authors report</span>
|
||||
</p>
|
||||
|
||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<p><code>git-authors</code> [-l, --list] [--no-email]</p>
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p> Populates the file matching <em>authors|contributors -i</em> with the authors of commits, according to the number of commits per author.
|
||||
Opens the file in <strong>$EDITOR</strong> when set.</p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Populates the file matching _authors</td>
|
||||
<td>contributors -i_ with the authors of commits, according to the number of commits per author.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p> See the "MAPPING AUTHORS" section of <strong>git-shortlog</strong>(1) to coalesce together commits by the same person.</p>
|
||||
<p>See the "MAPPING AUTHORS" section of <strong>git-shortlog</strong>(1) to coalesce together commits by the same person.</p>
|
||||
|
||||
<h2 id="OPTIONS">OPTIONS</h2>
|
||||
|
||||
<p> -l, --list</p>
|
||||
<p>-l, --list</p>
|
||||
|
||||
<p> Show authors.</p>
|
||||
<p>Show authors.</p>
|
||||
|
||||
<p> --no-email</p>
|
||||
<p>--no-email</p>
|
||||
|
||||
<p> Don't show authors' email.</p>
|
||||
<p>Don't show authors' email.</p>
|
||||
|
||||
<h2 id="EXAMPLES">EXAMPLES</h2>
|
||||
|
||||
<dl>
|
||||
<dt>Updating AUTHORS file:</dt><dd><p></p>
|
||||
<p>Updating AUTHORS file:</p>
|
||||
|
||||
<p>$ git authors</p></dd>
|
||||
<dt>Listing authors:</dt><dd><p></p>
|
||||
<pre><code>$ git authors
|
||||
</code></pre>
|
||||
|
||||
<p>$ git authors --list</p>
|
||||
<p>Listing authors:</p>
|
||||
|
||||
<pre><code>TJ Holowaychuk <tj@vision-media.ca>
|
||||
<pre><code>$ git authors --list
|
||||
TJ Holowaychuk <tj@vision-media.ca>
|
||||
hemanth.hm <hemanth.hm@gmail.com>
|
||||
Jonhnny Weslley <jw@jonhnnyweslley.net>
|
||||
nickl- <github@jigsoft.co.za>
|
||||
Leila Muhtasib <muhtasib@gmail.com>
|
||||
</code></pre></dd>
|
||||
<dt>Listing authors without email:</dt><dd><p></p>
|
||||
</code></pre>
|
||||
|
||||
<p>$ git authors --list --no-email</p>
|
||||
<p>Listing authors without email:</p>
|
||||
|
||||
<pre><code>TJ Holowaychuk
|
||||
<pre><code>$ git authors --list --no-email
|
||||
TJ Holowaychuk
|
||||
hemanth.hm
|
||||
Jonhnny Weslley
|
||||
nickl-
|
||||
Leila Muhtasib
|
||||
</code></pre></dd>
|
||||
</dl>
|
||||
|
||||
</code></pre>
|
||||
|
||||
<h2 id="AUTHOR">AUTHOR</h2>
|
||||
|
||||
<p>Written by Titus Wormer <<a href="mailto:tituswormer@gmail.com" data-bare-link="true">tituswormer@gmail.com</a>></p>
|
||||
<p>Written by Titus Wormer <<a href="mailto:tituswormer@gmail.com" data-bare-link="true">tituswormer@gmail.com</a>></p>
|
||||
|
||||
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
|
||||
|
||||
|
|
@ -136,10 +141,9 @@ Leila Muhtasib
|
|||
|
||||
<p><<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>></p>
|
||||
|
||||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>October 2017</li>
|
||||
<li class='tc'>November 2023</li>
|
||||
<li class='tr'>git-authors(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ git-authors(1) -- Generate authors report
|
|||
## DESCRIPTION
|
||||
|
||||
Populates the file matching _authors|contributors -i_ with the authors of commits, according to the number of commits per author.
|
||||
Opens the file in **$EDITOR** when set.
|
||||
|
||||
See the "MAPPING AUTHORS" section of **git-shortlog**(1) to coalesce together commits by the same person.
|
||||
|
||||
|
|
@ -24,33 +23,27 @@ git-authors(1) -- Generate authors report
|
|||
|
||||
## EXAMPLES
|
||||
|
||||
* Updating AUTHORS file:
|
||||
Updating AUTHORS file:
|
||||
|
||||
$ git authors
|
||||
|
||||
* Listing authors:
|
||||
Listing authors:
|
||||
|
||||
$ git authors --list
|
||||
|
||||
```
|
||||
TJ Holowaychuk <tj@vision-media.ca>
|
||||
hemanth.hm <hemanth.hm@gmail.com>
|
||||
Jonhnny Weslley <jw@jonhnnyweslley.net>
|
||||
nickl- <github@jigsoft.co.za>
|
||||
Leila Muhtasib <muhtasib@gmail.com>
|
||||
```
|
||||
|
||||
* Listing authors without email:
|
||||
Listing authors without email:
|
||||
|
||||
$ git authors --list --no-email
|
||||
|
||||
```
|
||||
TJ Holowaychuk
|
||||
hemanth.hm
|
||||
Jonhnny Weslley
|
||||
nickl-
|
||||
Leila Muhtasib
|
||||
```
|
||||
|
||||
## AUTHOR
|
||||
|
||||
|
|
|
|||
|
|
@ -1,34 +1,23 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "GIT\-BROWSE\-CI" "1" "March 2022" "" "Git Extras"
|
||||
.
|
||||
.\" generated with Ronn-NG/v0.10.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
||||
.TH "GIT\-BROWSE\-CI" "1" "March 2026" "" "Git Extras"
|
||||
.SH "NAME"
|
||||
\fBgit\-browse\-ci\fR \-
|
||||
.
|
||||
\fBgit\-browse\-ci\fR \- View the CI page for the current repository
|
||||
.SH "SYNOPSIS"
|
||||
\fBgit\-browse\-ci\fR [remote_name]
|
||||
.
|
||||
\fBgit\-browse\-ci\fR [<remote_name>]
|
||||
.SH "DESCRIPTION"
|
||||
Opens the current git repository CI page in your default web browser\.
|
||||
.
|
||||
.SH "OPTIONS"
|
||||
<remote_name>
|
||||
.
|
||||
.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 current branch's configured remote, or \fBorigin\fR if not specified\.
|
||||
.SH "EXAMPLES"
|
||||
$ git browse\-ci
|
||||
.
|
||||
.P
|
||||
$ git browse\-ci upstream
|
||||
.
|
||||
.SH "AUTHOR"
|
||||
Written by Peter Benjamin <\fIhttps://github\.com/pbnj\fR>
|
||||
.
|
||||
.SH "REPORTING BUGS"
|
||||
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
|
||||
.
|
||||
.SH "SEE ALSO"
|
||||
<\fIhttps://github\.com/tj/git\-extras\fR>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
<!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-browse-ci(1) - <View the web page for the current repository></title>
|
||||
<meta http-equiv='content-type' content='text/html;charset=utf-8'>
|
||||
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>
|
||||
<title>git-browse-ci(1) - View the CI page for the current repository</title>
|
||||
<style type='text/css' media='all'>
|
||||
/* style: man */
|
||||
body#manpage {margin:0}
|
||||
|
|
@ -69,14 +69,15 @@
|
|||
<li class='tr'>git-browse-ci(1)</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
<p class="man-name">
|
||||
<code>git-browse-ci</code> - <span class="man-whatis"><view the web page for current repository /></span>
|
||||
</p>
|
||||
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
<p class="man-name">
|
||||
<code>git-browse-ci</code> - <span class="man-whatis">View the CI page for the current repository</span>
|
||||
</p>
|
||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<p><code>git-browse-ci</code> [remote_name]</p>
|
||||
<p><code>git-browse-ci</code> [<remote_name>]</p>
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
|
|
@ -86,14 +87,14 @@
|
|||
|
||||
<p><remote_name></p>
|
||||
|
||||
<p>The name of the remote you wish to browse to. Defaults to
|
||||
the first remote if not specified.</p>
|
||||
<p>The name of the remote you wish to browse to. Defaults to the current
|
||||
branch's configured remote, or <code>origin</code> if not specified.</p>
|
||||
|
||||
<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>
|
||||
|
||||
|
|
@ -107,10 +108,9 @@ the first remote if not specified.</p>
|
|||
|
||||
<p><<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>></p>
|
||||
|
||||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>March 2022</li>
|
||||
<li class='tc'>March 2026</li>
|
||||
<li class='tr'>git-browse-ci(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
git-browse-ci(1) -- <View the web page for the current repository>
|
||||
git-browse-ci(1) -- View the CI page for the current repository
|
||||
================================
|
||||
|
||||
## SYNOPSIS
|
||||
|
||||
`git-browse-ci` [remote_name]
|
||||
`git-browse-ci` [<remote_name>]
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
|
|
@ -13,8 +13,8 @@ Opens the current git repository CI page in your default web browser.
|
|||
|
||||
<remote_name>
|
||||
|
||||
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 current
|
||||
branch's configured remote, or `origin` if not specified.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
|
|
|
|||
|
|
@ -1,61 +1,41 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "GIT\-BROWSE" "1" "June 2022" "" "Git Extras"
|
||||
.
|
||||
.\" generated with Ronn-NG/v0.10.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
||||
.TH "GIT\-BROWSE" "1" "March 2026" "" "Git Extras"
|
||||
.SH "NAME"
|
||||
\fBgit\-browse\fR \-
|
||||
.
|
||||
\fBgit\-browse\fR \- View the web page for the current repository
|
||||
.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"
|
||||
Opens the current git repository website in your default web browser\.
|
||||
.
|
||||
.SH "OPTIONS"
|
||||
<remote_name>
|
||||
.
|
||||
REMOTE\-NAME
|
||||
.P
|
||||
The name of the remote you wish to browse to\. Defaults to the first remote if not specified\.
|
||||
.
|
||||
.P
|
||||
<file_name>
|
||||
.
|
||||
FILE\-NAME
|
||||
.P
|
||||
The name of the file you wish to browse to\.
|
||||
.
|
||||
.P
|
||||
<line_1>
|
||||
.
|
||||
LINE\-1
|
||||
.P
|
||||
The line number of the file you wish to browse to\.
|
||||
.
|
||||
.P
|
||||
<line_2>
|
||||
.
|
||||
LINE\-2
|
||||
.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"
|
||||
$ git browse
|
||||
.
|
||||
.P
|
||||
$ git browse upstream
|
||||
.
|
||||
.P
|
||||
$ git browse upstream bin/git\-browse
|
||||
.
|
||||
.P
|
||||
$ git browse upstream bin/git\-browse 42
|
||||
.
|
||||
.P
|
||||
$ git browse upstream bin/git\-browse 1 42
|
||||
.
|
||||
.SH "AUTHOR"
|
||||
Written by Mark Pitman <\fIhttps://github\.com/mapitman\fR>
|
||||
.
|
||||
.SH "REPORTING BUGS"
|
||||
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
|
||||
.
|
||||
.SH "SEE ALSO"
|
||||
<\fIhttps://github\.com/tj/git\-extras\fR>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
<!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-browse(1) - <View the web page for the current repository></title>
|
||||
<meta http-equiv='content-type' content='text/html;charset=utf-8'>
|
||||
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>
|
||||
<title>git-browse(1) - View the web page for the current repository</title>
|
||||
<style type='text/css' media='all'>
|
||||
/* style: man */
|
||||
body#manpage {margin:0}
|
||||
|
|
@ -69,14 +69,15 @@
|
|||
<li class='tr'>git-browse(1)</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
<p class="man-name">
|
||||
<code>git-browse</code> - <span class="man-whatis"><view the web page for current repository /></span>
|
||||
</p>
|
||||
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
<p class="man-name">
|
||||
<code>git-browse</code> - <span class="man-whatis">View the web page for the current repository</span>
|
||||
</p>
|
||||
<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>
|
||||
|
||||
|
|
@ -84,35 +85,35 @@
|
|||
|
||||
<h2 id="OPTIONS">OPTIONS</h2>
|
||||
|
||||
<p><remote_name></p>
|
||||
<p>REMOTE-NAME</p>
|
||||
|
||||
<p>The name of the remote you wish to browse to. Defaults to
|
||||
the first remote if not specified.</p>
|
||||
|
||||
<p><file_name></p>
|
||||
<p>FILE-NAME</p>
|
||||
|
||||
<p>The name of the file you wish to browse to.</p>
|
||||
|
||||
<p><line_1></p>
|
||||
<p>LINE-1</p>
|
||||
|
||||
<p>The line number of the file you wish to browse to.</p>
|
||||
|
||||
<p><line_2></p>
|
||||
<p>LINE-2</p>
|
||||
|
||||
<p>The line range (from <line_1> to <line_2>) of the file you wish to
|
||||
<p>The line range (from LINE-1 to LINE-2) of the file you wish to
|
||||
browse to.</p>
|
||||
|
||||
<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>
|
||||
|
||||
|
|
@ -126,10 +127,9 @@ browse to.</p>
|
|||
|
||||
<p><<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>></p>
|
||||
|
||||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>June 2022</li>
|
||||
<li class='tc'>March 2026</li>
|
||||
<li class='tr'>git-browse(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
`git-browse` [remote_name] [file_name] [line_1] [line_2]
|
||||
`git-browse` [REMOTE-NAME] [FILE-NAME] [LINE-1] [LINE-2]
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
|
|
@ -11,22 +11,22 @@ Opens the current git repository website in your default web browser.
|
|||
|
||||
## OPTIONS
|
||||
|
||||
<remote_name>
|
||||
REMOTE-NAME
|
||||
|
||||
The name of the remote you wish to browse to. Defaults to
|
||||
the first remote if not specified.
|
||||
|
||||
<file_name>
|
||||
FILE-NAME
|
||||
|
||||
The name of the file you wish to browse to.
|
||||
|
||||
<line_1>
|
||||
LINE-1
|
||||
|
||||
The line number of the file you wish to browse to.
|
||||
|
||||
<line_2>
|
||||
LINE-2
|
||||
|
||||
The line range (from <line_1> to <line_2>) of the file you wish to
|
||||
The line range (from LINE-1 to LINE-2) of the file you wish to
|
||||
browse to.
|
||||
|
||||
## EXAMPLES
|
||||
|
|
|
|||
|
|
@ -1,17 +1,23 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "GIT\-BRV" "1" "January 2020" "" "Git Extras"
|
||||
.TH "GIT\-BRV" "1" "December 2023" "" "Git Extras"
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBgit\-brv\fR \- List branches sorted by their last commit date
|
||||
.
|
||||
.SH "SYNOPSIS"
|
||||
\fBgit\-brv\fR
|
||||
\fBgit\-brv\fR [\-r|\-\-reverse]
|
||||
.
|
||||
.SH "DESCRIPTION"
|
||||
Pretty listing of branches sorted by the date of their last commit\.
|
||||
.
|
||||
.SH "OPTIONS"
|
||||
\-r | \-\-reverse
|
||||
.
|
||||
.P
|
||||
Reverses the output to put the most recent branch at the bottom of the list\. This is useful when there are large amount of branches as the most recent branch is shown just above the next prompt\. This can be configured as the default by setting \fBgit\-extras\.brv\.reverse\fR to true in your git options\.
|
||||
.
|
||||
.SH "EXAMPLES"
|
||||
Simply run \fBgit brv\fR
|
||||
.
|
||||
|
|
@ -27,6 +33,21 @@ $ git brv
|
|||
.
|
||||
.IP "" 0
|
||||
.
|
||||
.P
|
||||
To display the rows in reverse order: \fBgit brv \-\-reverse\fR
|
||||
.
|
||||
.IP "" 4
|
||||
.
|
||||
.nf
|
||||
|
||||
$ git brv \-\-reverse
|
||||
2020\-01\-08 master origin/master 265b03e Merge pull request #816 from spacewander/git\-sed\-pathspec
|
||||
2020\-01\-14 adds\-git\-brv fork/adds\-git\-brv 1ca0d76 Fixes #700: Adds git\-brv
|
||||
.
|
||||
.fi
|
||||
.
|
||||
.IP "" 0
|
||||
.
|
||||
.SH "AUTHOR"
|
||||
Written by Øsse <\fIhttps://github\.com/Osse\fR>
|
||||
.
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@
|
|||
<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>
|
||||
|
|
@ -75,12 +76,18 @@
|
|||
|
||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<p><code>git-brv</code></p>
|
||||
<p><code>git-brv</code> [-r|--reverse]</p>
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p> Pretty listing of branches sorted by the date of their last commit.</p>
|
||||
|
||||
<h2 id="OPTIONS">OPTIONS</h2>
|
||||
|
||||
<p> -r | --reverse</p>
|
||||
|
||||
<p> Reverses the output to put the most recent branch at the bottom of the list. This is useful when there are large amount of branches as the most recent branch is shown just above the next prompt. This can be configured as the default by setting <code>git-extras.brv.reverse</code> to true in your git options.</p>
|
||||
|
||||
<h2 id="EXAMPLES">EXAMPLES</h2>
|
||||
|
||||
<p> Simply run <code>git brv</code></p>
|
||||
|
|
@ -90,6 +97,13 @@
|
|||
2020-01-08 master origin/master 265b03e Merge pull request #816 from spacewander/git-sed-pathspec
|
||||
</code></pre>
|
||||
|
||||
<p> To display the rows in reverse order: <code>git brv --reverse</code></p>
|
||||
|
||||
<pre><code>$ git brv --reverse
|
||||
2020-01-08 master origin/master 265b03e Merge pull request #816 from spacewander/git-sed-pathspec
|
||||
2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv
|
||||
</code></pre>
|
||||
|
||||
<h2 id="AUTHOR">AUTHOR</h2>
|
||||
|
||||
<p>Written by Øsse <<a href="https://github.com/Osse" data-bare-link="true">https://github.com/Osse</a>></p>
|
||||
|
|
@ -105,7 +119,7 @@
|
|||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>January 2020</li>
|
||||
<li class='tc'>December 2023</li>
|
||||
<li class='tr'>git-brv(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -3,12 +3,18 @@ git-brv(1) -- List branches sorted by their last commit date
|
|||
|
||||
## SYNOPSIS
|
||||
|
||||
`git-brv`
|
||||
`git-brv` [-r|--reverse]
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
Pretty listing of branches sorted by the date of their last commit.
|
||||
|
||||
## OPTIONS
|
||||
|
||||
-r | --reverse
|
||||
|
||||
Reverses the output to put the most recent branch at the bottom of the list. This is useful when there are large amount of branches as the most recent branch is shown just above the next prompt. This can be configured as the default by setting `git-extras.brv.reverse` to true in your git options.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
Simply run `git brv`
|
||||
|
|
@ -17,6 +23,11 @@ git-brv(1) -- List branches sorted by their last commit date
|
|||
2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv
|
||||
2020-01-08 master origin/master 265b03e Merge pull request #816 from spacewander/git-sed-pathspec
|
||||
|
||||
To display the rows in reverse order: `git brv --reverse`
|
||||
|
||||
$ git brv --reverse
|
||||
2020-01-08 master origin/master 265b03e Merge pull request #816 from spacewander/git-sed-pathspec
|
||||
2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv
|
||||
|
||||
## AUTHOR
|
||||
|
||||
|
|
|
|||
100
man/git-bulk.1
100
man/git-bulk.1
|
|
@ -1,108 +1,82 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "GIT\-BULK" "1" "August 2020" "" "Git Extras"
|
||||
.
|
||||
.\" generated with Ronn-NG/v0.10.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
||||
.TH "GIT\-BULK" "1" "March 2026" "" "Git Extras"
|
||||
.SH "NAME"
|
||||
\fBgit\-bulk\fR \- Run git commands on multiple repositories
|
||||
.
|
||||
.SH "SYNOPSIS"
|
||||
git bulk [\-g] ([\-a]|[\-w <ws\-name>]) <git command>
|
||||
.
|
||||
.br
|
||||
git bulk \-\-addworkspace <ws\-name> <ws\-root\-directory> (\-\-from <URL or file>)
|
||||
.
|
||||
.br
|
||||
git bulk \-\-removeworkspace <ws\-name>
|
||||
.
|
||||
.br
|
||||
git bulk \-\-addcurrent <ws\-name>
|
||||
.
|
||||
.br
|
||||
git bulk \-\-purge
|
||||
.
|
||||
.br
|
||||
git bulk \-\-listall
|
||||
.
|
||||
.nf
|
||||
git\-bulk [\-q|\-\-quiet] [\-g] [\-\-no\-follow\-symlinks] [\-\-no\-follow\-hidden] ([\-a]|[\-w WS\-NAME]) GIT\-COMMAND
|
||||
git\-bulk \-\-addworkspace WS\-NAME WS\-ROOT\-DIRECTORY (\-\-from URL\-OR\-FILE)
|
||||
git\-bulk \-\-removeworkspace WS\-NAME
|
||||
git\-bulk \-\-addcurrent WS\-NAME
|
||||
git\-bulk \-\-purge
|
||||
git\-bulk \-\-listall
|
||||
.fi
|
||||
.SH "DESCRIPTION"
|
||||
git bulk adds convenient support for operations that you want to execute on multiple git repositories\.
|
||||
.
|
||||
.IP "\(bu" 4
|
||||
simply register workspaces that contain multiple git repos in their directory structure
|
||||
.
|
||||
.IP "\(bu" 4
|
||||
run any git command on the repositories of the registered workspaces in one command to \fBgit bulk\fR
|
||||
.
|
||||
.IP "\(bu" 4
|
||||
use the "guarded mode" to check on each execution
|
||||
.
|
||||
.IP "" 0
|
||||
.
|
||||
.SH "OPTIONS"
|
||||
\-a
|
||||
.
|
||||
.P
|
||||
Run a git command on all workspaces and their repositories\.
|
||||
.
|
||||
.P
|
||||
\-g
|
||||
.
|
||||
.P
|
||||
Ask the user for confirmation on every execution\.
|
||||
.
|
||||
.P
|
||||
\-w <ws\-name>
|
||||
.
|
||||
\-\-no\-follow\-symlinks
|
||||
.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
|
||||
Run the git command on the specified workspace\. The workspace must be registered\.
|
||||
.
|
||||
.P
|
||||
<git command>
|
||||
.
|
||||
GIT\-COMMAND
|
||||
.P
|
||||
Any git Command you wish to execute on the repositories\.
|
||||
.
|
||||
.P
|
||||
\-\-addworkspace <ws\-name> <ws\-root\-directory> (\-\-from <URL or file&rt;gt;)
|
||||
.
|
||||
\-\-addworkspace WS\-NAME WS\-ROOT\-DIRECTORY (\-\-from URL\-OR\-FILE)
|
||||
.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 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 an absolute path\.
|
||||
.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
|
||||
\-\-removeworkspace <ws\-name>
|
||||
.
|
||||
\-\-removeworkspace WS\-NAME
|
||||
.P
|
||||
Remove the workspace with the logical name <ws\-name>\.
|
||||
.
|
||||
Remove the workspace with the logical name WS\-NAME\.
|
||||
.P
|
||||
\-\-addcurrent <ws\-name>
|
||||
.
|
||||
\-\-addcurrent WS\-NAME
|
||||
.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
|
||||
git bulk \-\-purge
|
||||
.
|
||||
.P
|
||||
Removes all defined repository locations\.
|
||||
.
|
||||
.P
|
||||
git bulk \-\-listall
|
||||
.
|
||||
.P
|
||||
List all registered repositories\.
|
||||
.
|
||||
.SH "EXAMPLES"
|
||||
.
|
||||
.nf
|
||||
|
||||
Register a workspace so that git bulk knows about it:
|
||||
Register a workspace so that git bulk knows about it using an absolute path:
|
||||
|
||||
$ 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
|
||||
|
||||
$ git bulk \-\-addworkspace personal ~/workspaces/personal \-\-from https://github\.com/tj/git\-extras\.git
|
||||
|
|
@ -142,14 +116,14 @@ $ git bulk \-\-removeworkspace personal
|
|||
Remove all registered workspaces:
|
||||
|
||||
$ git bulk \-\-purge
|
||||
.
|
||||
.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"
|
||||
Written by Niklas Schlimm <\fIns103@hotmail\.de\fR>
|
||||
.
|
||||
.SH "REPORTING BUGS"
|
||||
<https://github\.com/nschlimm/git\-bulk>
|
||||
.
|
||||
.SH "SEE ALSO"
|
||||
<\fIhttps://github\.com/tj/git\-extras\fR>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<!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)'>
|
||||
<meta http-equiv='content-type' content='text/html;charset=utf-8'>
|
||||
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>
|
||||
<title>git-bulk(1) - Run git commands on multiple repositories</title>
|
||||
<style type='text/css' media='all'>
|
||||
/* style: man */
|
||||
|
|
@ -58,6 +58,7 @@
|
|||
<a href="#DESCRIPTION">DESCRIPTION</a>
|
||||
<a href="#OPTIONS">OPTIONS</a>
|
||||
<a href="#EXAMPLES">EXAMPLES</a>
|
||||
<a href="#FILES">FILES</a>
|
||||
<a href="#AUTHOR">AUTHOR</a>
|
||||
<a href="#REPORTING-BUGS">REPORTING BUGS</a>
|
||||
<a href="#SEE-ALSO">SEE ALSO</a>
|
||||
|
|
@ -69,77 +70,91 @@
|
|||
<li class='tr'>git-bulk(1)</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
<p class="man-name">
|
||||
<code>git-bulk</code> - <span class="man-whatis">Run git commands on multiple repositories</span>
|
||||
</p>
|
||||
|
||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<p>git bulk [-g] ([-a]|[-w <ws-name>]) <git command> <br />
|
||||
git bulk --addworkspace <ws-name> <ws-root-directory> (--from <URL or file>) <br />
|
||||
git bulk --removeworkspace <ws-name> <br />
|
||||
git bulk --addcurrent <ws-name> <br />
|
||||
git bulk --purge <br />
|
||||
git bulk --listall</p>
|
||||
<pre><code>git-bulk [-q|--quiet] [-g] [--no-follow-symlinks] [--no-follow-hidden] ([-a]|[-w WS-NAME]) GIT-COMMAND
|
||||
git-bulk --addworkspace WS-NAME WS-ROOT-DIRECTORY (--from URL-OR-FILE)
|
||||
git-bulk --removeworkspace WS-NAME
|
||||
git-bulk --addcurrent WS-NAME
|
||||
git-bulk --purge
|
||||
git-bulk --listall
|
||||
</code></pre>
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>git bulk adds convenient support for operations that you want to execute on multiple git repositories.</p>
|
||||
|
||||
<ul>
|
||||
<li>simply register workspaces that contain multiple git repos in their directory structure</li>
|
||||
<li>run any git command on the repositories of the registered workspaces in one command to <code>git bulk</code></li>
|
||||
<li>use the "guarded mode" to check on each execution</li>
|
||||
<li>simply register workspaces that contain multiple git repos in their directory structure</li>
|
||||
<li>run any git command on the repositories of the registered workspaces in one command to <code>git bulk</code>
|
||||
</li>
|
||||
<li>use the "guarded mode" to check on each execution</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2 id="OPTIONS">OPTIONS</h2>
|
||||
|
||||
<p> -a</p>
|
||||
<p>-a</p>
|
||||
|
||||
<p> Run a git command on all workspaces and their repositories.</p>
|
||||
<p>Run a git command on all workspaces and their repositories.</p>
|
||||
|
||||
<p> -g</p>
|
||||
<p>-g</p>
|
||||
|
||||
<p> Ask the user for confirmation on every execution.</p>
|
||||
<p>Ask the user for confirmation on every execution.</p>
|
||||
|
||||
<p> -w <ws-name></p>
|
||||
<p>--no-follow-symlinks</p>
|
||||
|
||||
<p> Run the git command on the specified workspace. The workspace must be registered.</p>
|
||||
<p>Do not traverse symbolic links under the workspace when searching for git repositories.</p>
|
||||
|
||||
<p> <git command></p>
|
||||
<p>--no-follow-hidden</p>
|
||||
|
||||
<p> Any git Command you wish to execute on the repositories.</p>
|
||||
<p>Do not traverse hidden (dotted) directories under the workspace when searching for git repositories.</p>
|
||||
|
||||
<p> --addworkspace <ws-name> <ws-root-directory> (--from <URL or file&rt;gt;)</p>
|
||||
<p>-w 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 absolute path.</p>
|
||||
<p>Run the git command on the specified workspace. The workspace must be registered.</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>GIT-COMMAND</p>
|
||||
|
||||
<p> --removeworkspace <ws-name></p>
|
||||
<p>Any git Command you wish to execute on the repositories.</p>
|
||||
|
||||
<p> Remove the workspace with the logical name <ws-name>.</p>
|
||||
<p>--addworkspace WS-NAME WS-ROOT-DIRECTORY (--from URL-OR-FILE)</p>
|
||||
|
||||
<p> --addcurrent <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> Adds the current directory as workspace to git bulk operations. The workspace is referenced with its logical name <ws-name>.</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> git bulk --purge</p>
|
||||
<p>--removeworkspace WS-NAME</p>
|
||||
|
||||
<p> Removes all defined repository locations.</p>
|
||||
<p>Remove the workspace with the logical name WS-NAME.</p>
|
||||
|
||||
<p> git bulk --listall</p>
|
||||
<p>--addcurrent WS-NAME</p>
|
||||
|
||||
<p> List all registered repositories.</p>
|
||||
<p>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</p>
|
||||
|
||||
<p>Removes all defined repository locations.</p>
|
||||
|
||||
<p>git bulk --listall</p>
|
||||
|
||||
<p>List all registered repositories.</p>
|
||||
|
||||
<h2 id="EXAMPLES">EXAMPLES</h2>
|
||||
|
||||
<pre><code>Register a workspace so that git bulk knows about it:
|
||||
<pre><code>Register a workspace so that git bulk knows about it using an absolute path:
|
||||
|
||||
$ 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
|
||||
|
||||
$ git bulk --addworkspace personal ~/workspaces/personal --from https://github.com/tj/git-extras.git
|
||||
|
|
@ -181,9 +196,16 @@ Remove all registered workspaces:
|
|||
$ git bulk --purge
|
||||
</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>
|
||||
|
||||
<p>Written by Niklas Schlimm <<a href="mailto:ns103@hotmail.de" data-bare-link="true">ns103@hotmail.de</a>></p>
|
||||
<p>Written by Niklas Schlimm <<a href="mailto:ns103@hotmail.de" data-bare-link="true">ns103@hotmail.de</a>></p>
|
||||
|
||||
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
|
||||
|
||||
|
|
@ -193,10 +215,9 @@ $ git bulk --purge
|
|||
|
||||
<p><<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>></p>
|
||||
|
||||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>August 2020</li>
|
||||
<li class='tc'>March 2026</li>
|
||||
<li class='tr'>git-bulk(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@ git-bulk(1) -- Run git commands on multiple repositories
|
|||
|
||||
## SYNOPSIS
|
||||
|
||||
git bulk [-g] ([-a]|[-w <ws-name>]) <git command> <br/>
|
||||
git bulk --addworkspace <ws-name> <ws-root-directory> (--from <URL or file>) <br/>
|
||||
git bulk --removeworkspace <ws-name> <br/>
|
||||
git bulk --addcurrent <ws-name> <br/>
|
||||
git bulk --purge <br/>
|
||||
git bulk --listall
|
||||
git-bulk [-q|--quiet] [-g] [--no-follow-symlinks] [--no-follow-hidden] ([-a]|[-w WS-NAME]) GIT-COMMAND
|
||||
git-bulk --addworkspace WS-NAME WS-ROOT-DIRECTORY (--from URL-OR-FILE)
|
||||
git-bulk --removeworkspace WS-NAME
|
||||
git-bulk --addcurrent WS-NAME
|
||||
git-bulk --purge
|
||||
git-bulk --listall
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
|
|
@ -28,27 +28,35 @@ git bulk adds convenient support for operations that you want to execute on mult
|
|||
|
||||
Ask the user for confirmation on every execution.
|
||||
|
||||
-w <ws-name>
|
||||
--no-follow-symlinks
|
||||
|
||||
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.
|
||||
|
||||
<git command>
|
||||
GIT-COMMAND
|
||||
|
||||
Any git Command you wish to execute on the repositories.
|
||||
|
||||
--addworkspace <ws-name> <ws-root-directory> (--from <URL or file&rt;gt;)
|
||||
--addworkspace WS-NAME WS-ROOT-DIRECTORY (--from URL-OR-FILE)
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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 WS-NAME
|
||||
|
||||
Remove the workspace with the logical name <ws-name>.
|
||||
Remove the workspace with the logical name WS-NAME.
|
||||
|
||||
--addcurrent <ws-name>
|
||||
--addcurrent WS-NAME
|
||||
|
||||
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.
|
||||
|
||||
git bulk --purge
|
||||
|
||||
|
|
@ -60,10 +68,14 @@ git bulk adds convenient support for operations that you want to execute on mult
|
|||
|
||||
## EXAMPLES
|
||||
|
||||
Register a workspace so that git bulk knows about it:
|
||||
Register a workspace so that git bulk knows about it using an absolute path:
|
||||
|
||||
$ 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
|
||||
|
||||
$ git bulk --addworkspace personal ~/workspaces/personal --from https://github.com/tj/git-extras.git
|
||||
|
|
@ -104,6 +116,10 @@ git bulk adds convenient support for operations that you want to execute on mult
|
|||
|
||||
$ git bulk --purge
|
||||
|
||||
## FILES
|
||||
|
||||
- `.gitconfig`: Store the `git-bulk` registered workspaces under the `bulkworkspaces` key.
|
||||
|
||||
## AUTHOR
|
||||
|
||||
Written by Niklas Schlimm <<ns103@hotmail.de>>
|
||||
|
|
|
|||
|
|
@ -1,57 +1,52 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "GIT\-COMMITS\-SINCE" "1" "October 2017" "" "Git Extras"
|
||||
.
|
||||
.\" generated with Ronn-NG/v0.9.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1
|
||||
.TH "GIT\-COMMITS\-SINCE" "1" "January 2026" "" "Git Extras"
|
||||
.SH "NAME"
|
||||
\fBgit\-commits\-since\fR \- Show commit logs since some date
|
||||
.
|
||||
.SH "SYNOPSIS"
|
||||
\fBgit\-commits\-since\fR [<date>]
|
||||
.
|
||||
.TS
|
||||
allbox;
|
||||
\fBgit\-commits\-since\fR [\-r \-\-ref <ref>] [<date>]
|
||||
.TE
|
||||
.SH "DESCRIPTION"
|
||||
List of commits since the given \fIdate\fR\.
|
||||
.
|
||||
List of commits since the given \fIdate\fR or \fIref\fR\.
|
||||
.SH "OPTIONS"
|
||||
<date>
|
||||
.
|
||||
.P
|
||||
Show commits more recent than \fIdate\fR\. 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"\.
|
||||
.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"
|
||||
It is really flexible and these are only 3 of the options, go ahead give it a try:
|
||||
.
|
||||
.IP "" 4
|
||||
.
|
||||
.nf
|
||||
|
||||
$ git commits\-since yesterday
|
||||
\.\.\. commits since yesterday
|
||||
nickl\- \- Merge branch upstream master\.
|
||||
nickl\- \- Rebase bolshakov with master
|
||||
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\.
|
||||
aa084d9 TweeKane \- Add global gitignore to git\-ignore output
|
||||
515e94a TJ Holowaychuk \- Merge pull request #128 from nickl\-/git\-extras\-html\-hyperlinks
|
||||
5f86b54 TJ Holowaychuk \- Merge pull request #129 from nickl\-/develop
|
||||
7398d10 nickl\- \- Fix #127 git\-ignore won\'t add duplicates\.
|
||||
|
||||
$ git commits\-since 3 o clock pm
|
||||
\.\.\. commits since 3 o clock pm
|
||||
nickl\- \- Merge branch upstream master\.
|
||||
aa084d9 TweeKane \- Add global gitignore to git\-ignore output
|
||||
|
||||
$ git commits\-since 2 hour ago
|
||||
\.\.\. commits since 2 hour ago
|
||||
nickl\- \- Merge branch upstream master\.
|
||||
TJ Holowaychuk \- Merge pull request #128 from nickl\-/git\-extras\-html\-hyperlinks
|
||||
TJ Holowaychuk \- Merge pull request #129 from nickl\-/develop
|
||||
.
|
||||
aa084d9 TweeKane \- Add global gitignore to git\-ignore output
|
||||
515e94a TJ Holowaychuk \- Merge pull request #128 from nickl\-/git\-extras\-html\-hyperlinks
|
||||
5f86b54 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
|
||||
.
|
||||
.IP "" 0
|
||||
.
|
||||
.SH "AUTHOR"
|
||||
Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR>
|
||||
.
|
||||
.SH "REPORTING BUGS"
|
||||
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
|
||||
.
|
||||
.SH "SEE ALSO"
|
||||
<\fIhttps://github\.com/tj/git\-extras\fR>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<!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)'>
|
||||
<meta http-equiv='content-type' content='text/html;charset=utf8'>
|
||||
<meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>
|
||||
<title>git-commits-since(1) - Show commit logs since some date</title>
|
||||
<style type='text/css' media='all'>
|
||||
/* style: man */
|
||||
|
|
@ -69,51 +69,67 @@
|
|||
<li class='tr'>git-commits-since(1)</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
<p class="man-name">
|
||||
<code>git-commits-since</code> - <span class="man-whatis">Show commit logs since some date</span>
|
||||
</p>
|
||||
|
||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<p><code>git-commits-since</code> [<date>]</p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<code>git-commits-since</code> [-r</td>
|
||||
<td>--ref <ref>] [<date>]</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p> List of commits since the given <em>date</em>.</p>
|
||||
<p>List of commits since the given <em>date</em> or <em>ref</em>.</p>
|
||||
|
||||
<h2 id="OPTIONS">OPTIONS</h2>
|
||||
|
||||
<p> <date></p>
|
||||
<p><date></p>
|
||||
|
||||
<p> Show commits more recent than <var>date</var>. By default, the command shows the commit logs since "last week".</p>
|
||||
<p>Show commits more recent than <date>. By default, the command shows the commit logs since "last week".</p>
|
||||
|
||||
<p>-r, --ref <ref></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>
|
||||
|
||||
<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
|
||||
... commits since yesterday
|
||||
nickl- - Merge branch upstream master.
|
||||
nickl- - Rebase bolshakov with master
|
||||
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.
|
||||
aa084d9 TweeKane - Add global gitignore to git-ignore output
|
||||
515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks
|
||||
5f86b54 TJ Holowaychuk - Merge pull request #129 from nickl-/develop
|
||||
7398d10 nickl- - Fix #127 git-ignore won't add duplicates.
|
||||
|
||||
$ git commits-since 3 o clock pm
|
||||
... commits since 3 o clock pm
|
||||
nickl- - Merge branch upstream master.
|
||||
aa084d9 TweeKane - Add global gitignore to git-ignore output
|
||||
|
||||
$ git commits-since 2 hour ago
|
||||
... commits since 2 hour ago
|
||||
nickl- - Merge branch upstream master.
|
||||
TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks
|
||||
TJ Holowaychuk - Merge pull request #129 from nickl-/develop
|
||||
aa084d9 TweeKane - Add global gitignore to git-ignore output
|
||||
515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks
|
||||
5f86b54 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>
|
||||
|
||||
<h2 id="AUTHOR">AUTHOR</h2>
|
||||
|
||||
<p>Written by Tj Holowaychuk <<a href="mailto:tj@vision-media.ca" data-bare-link="true">tj@vision-media.ca</a>></p>
|
||||
<p>Written by Tj Holowaychuk <<a href="mailto:tj@vision-media.ca" data-bare-link="true">tj@vision-media.ca</a>></p>
|
||||
|
||||
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
|
||||
|
||||
|
|
@ -123,10 +139,9 @@ TJ Holowaychuk - Merge pull request #129 from nickl-/develop
|
|||
|
||||
<p><<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>></p>
|
||||
|
||||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>October 2017</li>
|
||||
<li class='tc'>January 2026</li>
|
||||
<li class='tr'>git-commits-since(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -3,40 +3,46 @@ git-commits-since(1) -- Show commit logs since some date
|
|||
|
||||
## SYNOPSIS
|
||||
|
||||
`git-commits-since` [<date>]
|
||||
`git-commits-since` [-r|--ref <ref>] [<date>]
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
List of commits since the given _date_.
|
||||
List of commits since the given _date_ or _ref_.
|
||||
|
||||
## OPTIONS
|
||||
|
||||
<date>
|
||||
|
||||
Show commits more recent than <date>. 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 <ref>
|
||||
|
||||
Show commits since the given ref (tag, branch, or commit). When specified, the command uses `ref..HEAD` instead of date-based filtering.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
It is really flexible and these are only 3 of the options, go ahead give it a try:
|
||||
|
||||
$ git commits-since yesterday
|
||||
... commits since yesterday
|
||||
nickl- - Merge branch upstream master.
|
||||
nickl- - Rebase bolshakov with master
|
||||
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.
|
||||
aa084d9 TweeKane - Add global gitignore to git-ignore output
|
||||
515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks
|
||||
5f86b54 TJ Holowaychuk - Merge pull request #129 from nickl-/develop
|
||||
7398d10 nickl- - Fix #127 git-ignore won't add duplicates.
|
||||
|
||||
$ git commits-since 3 o clock pm
|
||||
... commits since 3 o clock pm
|
||||
nickl- - Merge branch upstream master.
|
||||
aa084d9 TweeKane - Add global gitignore to git-ignore output
|
||||
|
||||
$ git commits-since 2 hour ago
|
||||
... commits since 2 hour ago
|
||||
nickl- - Merge branch upstream master.
|
||||
TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks
|
||||
TJ Holowaychuk - Merge pull request #129 from nickl-/develop
|
||||
aa084d9 TweeKane - Add global gitignore to git-ignore output
|
||||
515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks
|
||||
5f86b54 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
|
||||
|
||||
|
|
|
|||
19
man/git-continue.1
Normal file
19
man/git-continue.1
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
.\" 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>
|
||||
114
man/git-continue.html
Normal file
114
man/git-continue.html
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
<!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><<a href="https://github.com/tj/git-extras/issues" data-bare-link="true">https://github.com/tj/git-extras/issues</a>></p>
|
||||
|
||||
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
||||
|
||||
<p><<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>></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>
|
||||
30
man/git-continue.md
Normal file
30
man/git-continue.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
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
|
||||
|
||||
<<https://github.com/tj/git-extras/issues>>
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
<<https://github.com/tj/git-extras>>
|
||||
54
man/git-delete-gone-branches.1
Normal file
54
man/git-delete-gone-branches.1
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
.\" 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>
|
||||
135
man/git-delete-gone-branches.html
Normal file
135
man/git-delete-gone-branches.html
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
<!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 <<a href="mailto:utsav.sabharwal@sysdig.com" data-bare-link="true">utsav.sabharwal@sysdig.com</a>></p>
|
||||
|
||||
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
|
||||
|
||||
<p><<a href="https://github.com/tj/git-extras/issues" data-bare-link="true">https://github.com/tj/git-extras/issues</a>></p>
|
||||
|
||||
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
||||
|
||||
<p><<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>></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>
|
||||
50
man/git-delete-gone-branches.md
Normal file
50
man/git-delete-gone-branches.md
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
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 <<https://github.com/codersofthedark>>
|
||||
|
||||
## REPORTING BUGS
|
||||
|
||||
<<https://github.com/tj/git-extras/issues>>
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
<<https://github.com/tj/git-extras>>
|
||||
|
|
@ -1,30 +1,19 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "GIT\-DELETE\-MERGED\-BRANCHES" "1" "October 2017" "" "Git Extras"
|
||||
.
|
||||
.\" generated with Ronn-NG/v0.10.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
||||
.TH "GIT\-DELETE\-MERGED\-BRANCHES" "1" "March 2026" "" "Git Extras"
|
||||
.SH "NAME"
|
||||
\fBgit\-delete\-merged\-branches\fR \- Delete merged branches
|
||||
.
|
||||
.SH "SYNOPSIS"
|
||||
\fBgit\-delete\-merged\-branches\fR
|
||||
.
|
||||
.SH "DESCRIPTION"
|
||||
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\.
|
||||
.
|
||||
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\.
|
||||
.SH "EXAMPLES"
|
||||
.
|
||||
.nf
|
||||
|
||||
$ git delete\-merged\-branches
|
||||
.
|
||||
.fi
|
||||
.
|
||||
.SH "AUTHOR"
|
||||
Written by Jesús Espino <\fIjespinog@gmail\.com\fR>
|
||||
.
|
||||
.SH "REPORTING BUGS"
|
||||
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
|
||||
.
|
||||
.SH "SEE ALSO"
|
||||
<\fIhttps://github\.com/tj/git\-extras\fR>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<!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)'>
|
||||
<meta http-equiv='content-type' content='text/html;charset=utf-8'>
|
||||
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>
|
||||
<title>git-delete-merged-branches(1) - Delete merged branches</title>
|
||||
<style type='text/css' media='all'>
|
||||
/* style: man */
|
||||
|
|
@ -68,19 +68,20 @@
|
|||
<li class='tr'>git-delete-merged-branches(1)</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
<p class="man-name">
|
||||
<code>git-delete-merged-branches</code> - <span class="man-whatis">Delete merged branches</span>
|
||||
</p>
|
||||
|
||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<p><code>git-delete-merged-branches</code></p>
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<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 <em>master</em>.</p>
|
||||
<p>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.</p>
|
||||
|
||||
<h2 id="EXAMPLES">EXAMPLES</h2>
|
||||
|
||||
|
|
@ -89,7 +90,7 @@
|
|||
|
||||
<h2 id="AUTHOR">AUTHOR</h2>
|
||||
|
||||
<p>Written by Jesús Espino <<a href="mailto:jespinog@gmail.com" data-bare-link="true">jespinog@gmail.com</a>></p>
|
||||
<p>Written by Jesús Espino <<a href="mailto:jespinog@gmail.com" data-bare-link="true">jespinog@gmail.com</a>></p>
|
||||
|
||||
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
|
||||
|
||||
|
|
@ -99,10 +100,9 @@
|
|||
|
||||
<p><<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>></p>
|
||||
|
||||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>October 2017</li>
|
||||
<li class='tc'>March 2026</li>
|
||||
<li class='tr'>git-delete-merged-branches(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ git-delete-merged-branches(1) -- Delete merged branches
|
|||
|
||||
## DESCRIPTION
|
||||
|
||||
Deletes all branches merged in to current HEAD. Does not delete *master*, even if run from a branch that is
|
||||
a descendant of *master*.
|
||||
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.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,24 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "GIT\-DELETE\-SQUASHED\-BRANCHES" "1" "May 2021" "" "Git Extras"
|
||||
.TH "GIT\-DELETE\-SQUASHED\-BRANCHES" "1" "February 2024" "" "Git Extras"
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBgit\-delete\-squashed\-branches\fR \- Delete branches that were squashed
|
||||
.
|
||||
.SH "SYNOPSIS"
|
||||
\fBgit\-delete\-squashed\-branches\fR [<branch\-name>]
|
||||
\fBgit\-delete\-squashed\-branches\fR [\-\-proceed, \-p] [<branch\-name>]
|
||||
.
|
||||
.SH "DESCRIPTION"
|
||||
Deletes all git branches that have been "squash\-merged" into \fBbranch\-name\fR\.
|
||||
.
|
||||
.SH "OPTIONS"
|
||||
\-\-proceed, \-p
|
||||
.
|
||||
.P
|
||||
Proceed with the next branch even if the current branch cannot be deleted (e\.g\. because it is checked out in a worktree)
|
||||
.
|
||||
.P
|
||||
<branch\-name>
|
||||
.
|
||||
.P
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
|
||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<p><code>git-delete-squashed-branches</code> [<branch-name>]</p>
|
||||
<p><code>git-delete-squashed-branches</code> [--proceed, -p] [<branch-name>]</p>
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
|
|
@ -84,6 +84,10 @@
|
|||
|
||||
<h2 id="OPTIONS">OPTIONS</h2>
|
||||
|
||||
<p> --proceed, -p</p>
|
||||
|
||||
<p> Proceed with the next branch even if the current branch cannot be deleted (e.g. because it is checked out in a worktree)</p>
|
||||
|
||||
<p> <branch-name></p>
|
||||
|
||||
<p> The target branch were the "squashed-merged" branches were committed to. If no value is given, then the current checked out branch will be used.</p>
|
||||
|
|
@ -102,7 +106,7 @@
|
|||
|
||||
<h2 id="AUTHOR">AUTHOR</h2>
|
||||
|
||||
<p>Written by Teddy Katz <<a href="mailto:teddy.katz@gmail.com" data-bare-link="true">teddy.katz@gmail.com</a>> and Vladimir Jimenez <<a href="mailto:me@allejo.io" data-bare-link="true">me@allejo.io</a>></p>
|
||||
<p>Written by Teddy Katz <<a href="mailto:teddy.katz@gmail.com" data-bare-link="true">teddy.katz@gmail.com</a>> and Vladimir Jimenez <<a href="mailto:me@allejo.io" data-bare-link="true">me@allejo.io</a>></p>
|
||||
|
||||
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
|
||||
|
||||
|
|
@ -115,7 +119,7 @@
|
|||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>May 2021</li>
|
||||
<li class='tc'>February 2024</li>
|
||||
<li class='tr'>git-delete-squashed-branches(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ git-delete-squashed-branches(1) -- Delete branches that were squashed
|
|||
|
||||
## SYNOPSIS
|
||||
|
||||
`git-delete-squashed-branches` [<branch-name>]
|
||||
`git-delete-squashed-branches` [--proceed, -p] [<branch-name>]
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
|
|
@ -11,6 +11,10 @@ Deletes all git branches that have been "squash-merged" into `branch-name`.
|
|||
|
||||
## OPTIONS
|
||||
|
||||
--proceed, -p
|
||||
|
||||
Proceed with the next branch even if the current branch cannot be deleted (e.g. because it is checked out in a worktree)
|
||||
|
||||
<branch-name>
|
||||
|
||||
The target branch were the "squashed-merged" branches were committed to. If no value is given, then the current checked out branch will be used.
|
||||
|
|
|
|||
|
|
@ -1,48 +1,29 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "GIT\-DELTA" "1" "October 2017" "" "Git Extras"
|
||||
.
|
||||
.\" generated with Ronn-NG/v0.10.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
||||
.TH "GIT\-DELTA" "1" "March 2026" "" "Git Extras"
|
||||
.SH "NAME"
|
||||
\fBgit\-delta\fR \- Lists changed files
|
||||
.
|
||||
.SH "SYNOPSIS"
|
||||
\fBgit\-delta\fR [<branch>] [<filter>]
|
||||
.
|
||||
.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 \fBmaster\fR branch\.
|
||||
.
|
||||
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\.
|
||||
.SH "EXAMPLES"
|
||||
Lists all modified and renamed files vs\. \fBmaster\fR:
|
||||
.
|
||||
Lists all modified and renamed files vs\. \fBmain\fR:
|
||||
.IP "" 4
|
||||
.
|
||||
.nf
|
||||
|
||||
$ git delta master MR
|
||||
.
|
||||
$ git delta main MR
|
||||
.fi
|
||||
.
|
||||
.IP "" 0
|
||||
.
|
||||
.P
|
||||
Lists all deleted files vs\. \fBexample\fR:
|
||||
.
|
||||
.IP "" 4
|
||||
.
|
||||
.nf
|
||||
|
||||
$ git delta example D
|
||||
.
|
||||
.fi
|
||||
.
|
||||
.IP "" 0
|
||||
.
|
||||
.SH "AUTHOR"
|
||||
Written by Ivan Malopinsky <\fIhello@imsky\.co\fR>
|
||||
.
|
||||
.SH "REPORTING BUGS"
|
||||
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
|
||||
.
|
||||
.SH "SEE ALSO"
|
||||
<\fIhttps://github\.com/tj/git\-extras\fR>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<!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)'>
|
||||
<meta http-equiv='content-type' content='text/html;charset=utf-8'>
|
||||
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>
|
||||
<title>git-delta(1) - Lists changed files</title>
|
||||
<style type='text/css' media='all'>
|
||||
/* style: man */
|
||||
|
|
@ -68,34 +68,35 @@
|
|||
<li class='tr'>git-delta(1)</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
|
||||
|
||||
<h2 id="NAME">NAME</h2>
|
||||
<p class="man-name">
|
||||
<code>git-delta</code> - <span class="man-whatis">Lists changed files</span>
|
||||
</p>
|
||||
|
||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<p><code>git-delta</code> [<branch>] [<filter>]</p>
|
||||
|
||||
<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 <code>master</code> 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 configured default branch.</p>
|
||||
|
||||
<h2 id="EXAMPLES">EXAMPLES</h2>
|
||||
|
||||
<p> Lists all modified and renamed files vs. <code>master</code>:</p>
|
||||
<p>Lists all modified and renamed files vs. <code>main</code>:</p>
|
||||
|
||||
<pre><code>$ git delta master MR
|
||||
<pre><code>$ git delta main MR
|
||||
</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
|
||||
</code></pre>
|
||||
|
||||
<h2 id="AUTHOR">AUTHOR</h2>
|
||||
|
||||
<p>Written by Ivan Malopinsky <<a href="mailto:hello@imsky.co" data-bare-link="true">hello@imsky.co</a>></p>
|
||||
<p>Written by Ivan Malopinsky <<a href="mailto:hello@imsky.co" data-bare-link="true">hello@imsky.co</a>></p>
|
||||
|
||||
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
|
||||
|
||||
|
|
@ -105,10 +106,9 @@
|
|||
|
||||
<p><<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>></p>
|
||||
|
||||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>October 2017</li>
|
||||
<li class='tc'>March 2026</li>
|
||||
<li class='tr'>git-delta(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -7,13 +7,13 @@ git-delta(1) -- Lists changed files
|
|||
|
||||
## DESCRIPTION
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
Lists all modified and renamed files vs. `master`:
|
||||
Lists all modified and renamed files vs. `main`:
|
||||
|
||||
$ git delta master MR
|
||||
$ git delta main MR
|
||||
|
||||
Lists all deleted files vs. `example`:
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue