Skip to content

Commit

Permalink
feat: Implement git-get command (#1045)
Browse files Browse the repository at this point in the history
* feat: Add `git-get` command

* Update Commands.md

Co-authored-by: 罗泽轩 <[email protected]>

* fix: Use Git config to store value

* improve `git-get` description

* fix: Add `--global` to git invocation

* Enable passing options to `git clone`

* fix: Ordering of checks

---------

Co-authored-by: 罗泽轩 <[email protected]>
  • Loading branch information
hyperupcall and spacewander authored Aug 12, 2023
1 parent 34609bd commit 8af4389
Show file tree
Hide file tree
Showing 12 changed files with 252 additions and 6 deletions.
10 changes: 10 additions & 0 deletions Commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
- [`git force-clone`](#git-force-clone)
- [`git fork`](#git-fork)
- [`git fresh-branch`](#git-fresh-branch)
- [`git get`](#git-get)
- [`git gh-pages`](#git-gh-pages)
- [`git graft`](#git-graft)
- [`git guilt`](#git-guilt)
Expand Down Expand Up @@ -889,6 +890,15 @@ Create empty local branch `docs`:
$ git fresh-branch docs
```
## git get
Clone repository into a subdirectory of the configured path, `"$HOME/some-dir"`:
```bash
$ git config --global --add git-extras.get.clone-path "$HOME/some-dir"
$ git get 'https://github.com/hyperupcall/bake'
```
## git guilt
Calculate the change in blame between two revisions
Expand Down
40 changes: 40 additions & 0 deletions bin/git-get
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/usr/bin/env bash

_usage() {
printf '%s\n' "usage: ${0##*/} <url>
usage: ${0##*/} --help
Clone a repository in a particular directory."
}

if (( $# == 0 )); then
_usage
exit 0
fi

for arg; do
if [ "$arg" = '-h' ] || [ "$arg" = '--help' ]; then
_usage
exit 0
fi
done

url=$1
if ! shift; then
printf 'ERROR: Failed to shift' >&2
exit 1
fi

clone_path=$(git config --get git-extras.get.clone-path)

if [ -z "$clone_path" ]; then
printf 'ERROR: %s\n' "Git configuration key 'git-extras.get.clone-path' must be set to a directory to clone under" >&2
exit 1
fi

dirname=${url%/}
dirname=${url%.git}
dirname=${dirname##*/}

mkdir -p "$clone_path"
git clone "$url" "$clone_path/$dirname" "$@"
1 change: 1 addition & 0 deletions etc/git-extras-completion.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \
force-clone:'overwrite local repositories with clone' \
fork:'fork a repo on GitHub' \
fresh-branch:'create fresh branches' \
get:'clone a repository in a directory' \
gh-pages:'create the GitHub pages branch' \
graft:'merge and destroy a given branch' \
guilt:'calculate change between two revisions' \
Expand Down
1 change: 1 addition & 0 deletions etc/git-extras.fish
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ set __fish_git_extras_commands \
"force-clone:overwrite local repositories with clone" \
"fork:Fork a repo on github" \
"fresh-branch:Create fresh branches" \
"get:Clone a repository in a directory" \
"gh-pages:Create the GitHub Pages branch" \
"graft:Merge and destroy a given branch" \
"guilt:calculate change between two revisions" \
Expand Down
14 changes: 9 additions & 5 deletions man/git-extras.1
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
.\" generated with Ronn-NG/v0.9.1
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1
.TH "GIT\-EXTRAS" "1" "December 2021" "" "Git Extras"
.TH "GIT\-EXTRAS" "1" "May 2023" "" "Git Extras"
.SH "NAME"
\fBgit\-extras\fR \- Awesome GIT utilities
.SH "SYNOPSIS"
Expand All @@ -20,7 +20,7 @@ Self update\.
.SH "ENVIRONMENT AND CONFIGURATION VARIABLES"
\fBgit config \-\-add git\-extras\.default\-branch $BRANCH\fR
.P
Change the default branch to \fB$BRANCH\fR\. If \fBgit\-extras\.default\-branch\fR isn\'t set, \fBinit\.defaultBranch\fR is used instead\. If none of them are set it defaults to \fBmain\fR\.
Change the default branch to \fB$BRANCH\fR\. If \fBgit\-extras\.default\-branch\fR isn't set, \fBinit\.defaultBranch\fR is used instead\. If none of them are set it defaults to \fBmain\fR\.
.SH "COMMANDS"
.IP "\[ci]" 4
\fBgit\-abort(1)\fR Abort current git operation
Expand All @@ -31,6 +31,8 @@ Change the default branch to \fB$BRANCH\fR\. If \fBgit\-extras\.default\-branch\
.IP "\[ci]" 4
\fBgit\-authors(1)\fR Generate authors report
.IP "\[ci]" 4
\fBgit\-browse\-ci(1)\fR \fIView the web page for the current repository\fR
.IP "\[ci]" 4
\fBgit\-browse(1)\fR \fIView the web page for the current repository\fR
.IP "\[ci]" 4
\fBgit\-brv(1)\fR List branches sorted by their last commit date
Expand All @@ -47,7 +49,7 @@ Change the default branch to \fB$BRANCH\fR\. If \fBgit\-extras\.default\-branch\
.IP "\[ci]" 4
\fBgit\-commits\-since(1)\fR Show commit logs since some date
.IP "\[ci]" 4
\fBgit\-contrib(1)\fR Show user\'s contributions
\fBgit\-contrib(1)\fR Show user's contributions
.IP "\[ci]" 4
\fBgit\-count(1)\fR Show commit count
.IP "\[ci]" 4
Expand Down Expand Up @@ -77,6 +79,8 @@ Change the default branch to \fB$BRANCH\fR\. If \fBgit\-extras\.default\-branch\
.IP "\[ci]" 4
\fBgit\-fresh\-branch(1)\fR Create fresh branches
.IP "\[ci]" 4
\fBgit\-get(1)\fR Clone a Git repository under a configured directory
.IP "\[ci]" 4
\fBgit\-gh\-pages(1)\fR Create the GitHub Pages branch
.IP "\[ci]" 4
\fBgit\-graft(1)\fR Merge and destroy a given branch
Expand Down Expand Up @@ -115,7 +119,7 @@ Change the default branch to \fB$BRANCH\fR\. If \fBgit\-extras\.default\-branch\
.IP "\[ci]" 4
\fBgit\-pull\-request(1)\fR Create pull request for GitHub project
.IP "\[ci]" 4
\fBgit\-reauthor(1)\fR Rewrite history to change author\'s identity
\fBgit\-reauthor(1)\fR Rewrite history to change author's identity
.IP "\[ci]" 4
\fBgit\-rebase\-patch(1)\fR Rebases a patch
.IP "\[ci]" 4
Expand Down Expand Up @@ -145,7 +149,7 @@ Change the default branch to \fB$BRANCH\fR\. If \fBgit\-extras\.default\-branch\
.IP "\[ci]" 4
\fBgit\-show\-unmerged\-branches(1)\fR Show unmerged branches
.IP "\[ci]" 4
\fBgit\-squash(1)\fR squash N last changes up to a ref\'ed commit
\fBgit\-squash(1)\fR squash N last changes up to a ref'ed commit
.IP "\[ci]" 4
\fBgit\-stamp(1)\fR Stamp the last commit message
.IP "\[ci]" 4
Expand Down
7 changes: 6 additions & 1 deletion man/git-extras.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/git-extras.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ git-extras(1) -- Awesome GIT utilities
- **git-force-clone(1)** overwrite local repositories with clone
- **git-fork(1)** Fork a repo on github
- **git-fresh-branch(1)** Create fresh branches
- **git-get(1)** Clone a Git repository under a configured directory
- **git-gh-pages(1)** Create the GitHub Pages branch
- **git-graft(1)** Merge and destroy a given branch
- **git-guilt(1)** calculate change between two revisions
Expand Down
28 changes: 28 additions & 0 deletions man/git-get.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
.\" generated with Ronn-NG/v0.9.1
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1
.TH "GIT\-GET" "1" "May 2023" "" "Git Extras"
.SH "NAME"
\fBgit\-get\fR \- Clone a Git repository under a directory
.SH "SYNOPSIS"
\fBgit\-get\fR
.SH "DESCRIPTION"
Clones a Git repository under the directory specified by the Git configuration \fBgit\-extras\.get\.clone\-path\fR
.SH "EXAMPLES"
.nf
$ git config \-\-add git\-extras\.get\.clone\-path "$HOME/some\-dir"
$ git get 'https://github\.com/hyperupcall/bake'
Cloning into '/home/<user>/some\-dir/bake'\|\.\|\.\|\.
remote: Enumerating objects: 1199, done\.
remote: Counting objects: 100% (378/378), done\.
remote: Compressing objects: 100% (174/174), done\.
remote: Total 1199 (delta 163), reused 357 (delta 146), pack\-reused 821
Receiving objects: 100% (1199/1199), 3\.05 MiB | 9\.85 MiB/s, done\.
Resolving deltas: 100% (515/515), done\.
$
.fi
.SH "AUTHOR"
Written by Edwin Kofler <\fIedwin@kofler\.dev\fR>
.SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
.SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR>
119 changes: 119 additions & 0 deletions man/git-get.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 35 additions & 0 deletions man/git-get.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
git-get(1) -- Clone a Git repository under a configured directory
=================================================

## SYNOPSIS

`git-get`

## DESCRIPTION

Clones a Git repository under the directory specified by the Git configuration `git-extras.get.clone-path`

## EXAMPLES

$ git config --add git-extras.get.clone-path "$HOME/some-dir"
$ git get 'https://github.com/hyperupcall/bake'
Cloning into '/home/<user>/some-dir/bake'...
remote: Enumerating objects: 1199, done.
remote: Counting objects: 100% (378/378), done.
remote: Compressing objects: 100% (174/174), done.
remote: Total 1199 (delta 163), reused 357 (delta 146), pack-reused 821
Receiving objects: 100% (1199/1199), 3.05 MiB | 9.85 MiB/s, done.
Resolving deltas: 100% (515/515), done.
$

## AUTHOR

Written by Edwin Kofler &lt;<[email protected]>&gt;

## REPORTING BUGS

&lt;<https://github.com/tj/git-extras/issues>&gt;

## SEE ALSO

&lt;<https://github.com/tj/git-extras>&gt;
1 change: 1 addition & 0 deletions man/index.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ git-feature(1) git-feature
git-force-clone(1) git-force-clone
git-fork(1) git-fork
git-fresh-branch(1) git-fresh-branch
git-get(1) git-get
git-gh-pages(1) git-gh-pages
git-graft(1) git-graft
git-guilt(1) git-guilt
Expand Down
1 change: 1 addition & 0 deletions not_need_git_repo
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ git-bulk
git-extras
git-force-clone
git-fork
git-get
git-ignore
git-setup
git-standup

0 comments on commit 8af4389

Please sign in to comment.