felipec / git-completion Goto Github PK
View Code? Open in Web Editor NEWGit completion stuff
Git completion stuff
Hello,
I added a Git alias with
$ git config --global alias.foo '!echo foo'
However, typing git
followed by <TAB>
only prints out what's defined in __git_zsh_cmd_common()
.
Is there a way to make Git aliases completion work?
Alternatively, is there a way to add a custom completion for git foo
when git-foo()
is a custom command of mine that doesn't come with upstream Git?
This might be the same issue as #5 but I installed git-completion from the AUR and didn't do any manual configurations. It used to work for me in the past. When I run a system update, I now get the following errors:
/bin/sh prompt.t
Initialized empty Git repository in /home/tai/.cache/paru/clone/git-completion/src/git-completion/test/trash directory.prompt/.git/
ok 1 - setup for prompt tests
not ok 2 - prompt - branch name
#
# printf " (master)" >expected &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
not ok 3 - prompt - branch name - symlink symref
#
# printf " (master)" >expected &&
# test_when_finished "git checkout master" &&
# test_config core.preferSymlinkRefs true &&
# git checkout master &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
not ok 4 - prompt - unborn branch
#
# printf " (unborn)" >expected &&
# git checkout --orphan unborn &&
# test_when_finished "git checkout master" &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
not ok 5 - prompt - with newline in path
#
# repo_with_newline="repo
# with
# newline" &&
# mkdir "$repo_with_newline" &&
# printf " (master)" >expected &&
# git init "$repo_with_newline" &&
# test_when_finished "rm -rf \"$repo_with_newline\"" &&
# mkdir "$repo_with_newline"/subdir &&
# (
# cd "$repo_with_newline/subdir" &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 6 - prompt - detached head
#
# printf " ((%s...))" $(git log -1 --format="%h" --abbrev=13 b1^) >expected &&
# test_config core.abbrev 13 &&
# git checkout b1^ &&
# test_when_finished "git checkout master" &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
not ok 7 - prompt - describe detached head - contains
#
# printf " ((t2~1))" >expected &&
# git checkout b1^ &&
# test_when_finished "git checkout master" &&
# (
# GIT_PS1_DESCRIBE_STYLE=contains &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 8 - prompt - describe detached head - branch
#
# printf " ((tags/t2~1))" >expected &&
# git checkout b1^ &&
# test_when_finished "git checkout master" &&
# (
# GIT_PS1_DESCRIBE_STYLE=branch &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 9 - prompt - describe detached head - describe
#
# printf " ((t1-1-g%s))" $(git log -1 --format="%h" b1^) >expected &&
# git checkout b1^ &&
# test_when_finished "git checkout master" &&
# (
# GIT_PS1_DESCRIBE_STYLE=describe &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 10 - prompt - describe detached head - default
#
# printf " ((t2))" >expected &&
# git checkout --detach b1 &&
# test_when_finished "git checkout master" &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
ok 11 - prompt - inside .git directory
ok 12 - prompt - deep inside .git directory
ok 13 - prompt - inside bare repository
not ok 14 - prompt - interactive rebase
#
# printf " (b1|REBASE 2/3)" >expected &&
# write_script fake_editor.sh <<-\EOF &&
# echo "exec echo" >"$1"
# echo "edit $(git log -1 --format="%h")" >>"$1"
# echo "exec echo" >>"$1"
# EOF
# test_when_finished "rm -f fake_editor.sh" &&
# test_set_editor "$TRASH_DIRECTORY/fake_editor.sh" &&
# git checkout b1 &&
# test_when_finished "git checkout master" &&
# git rebase -i HEAD^ &&
# test_when_finished "git rebase --abort" &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
not ok 15 - prompt - rebase merge
#
# printf " (b2|REBASE 1/3)" >expected &&
# git checkout b2 &&
# test_when_finished "git checkout master" &&
# test_must_fail git rebase --merge b1 b2 &&
# test_when_finished "git rebase --abort" &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
not ok 16 - prompt - rebase am # TODO known breakage
not ok 17 - prompt - merge
#
# printf " (b1|MERGING)" >expected &&
# git checkout b1 &&
# test_when_finished "git checkout master" &&
# test_must_fail git merge b2 &&
# test_when_finished "git reset --hard" &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
not ok 18 - prompt - cherry-pick
#
# printf " (master|CHERRY-PICKING)" >expected &&
# test_must_fail git cherry-pick b1 b1^ &&
# test_when_finished "git cherry-pick --abort" &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual" &&
# git reset --merge &&
# test_must_fail git rev-parse CHERRY_PICK_HEAD &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
not ok 19 - prompt - revert
#
# printf " (master|REVERTING)" >expected &&
# test_must_fail git revert b1^ b1 &&
# test_when_finished "git revert --abort" &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual" &&
# git reset --merge &&
# test_must_fail git rev-parse REVERT_HEAD &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
not ok 20 - prompt - bisect
#
# printf " (master|BISECTING)" >expected &&
# git bisect start &&
# test_when_finished "git bisect reset" &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
not ok 21 - prompt - dirty status indicator - clean
#
# printf " (master)" >expected &&
# (
# GIT_PS1_SHOWDIRTYSTATE=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 22 - prompt - dirty status indicator - dirty worktree
#
# printf " (master *)" >expected &&
# echo "dirty" >file &&
# test_when_finished "git reset --hard" &&
# (
# GIT_PS1_SHOWDIRTYSTATE=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 23 - prompt - dirty status indicator - dirty index
#
# printf " (master +)" >expected &&
# echo "dirty" >file &&
# test_when_finished "git reset --hard" &&
# git add -u &&
# (
# GIT_PS1_SHOWDIRTYSTATE=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 24 - prompt - dirty status indicator - dirty index and worktree
#
# printf " (master *+)" >expected &&
# echo "dirty index" >file &&
# test_when_finished "git reset --hard" &&
# git add -u &&
# echo "dirty worktree" >file &&
# (
# GIT_PS1_SHOWDIRTYSTATE=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 25 - prompt - dirty status indicator - orphan branch - clean
#
# printf " (orphan #)" >expected &&
# test_when_finished "git checkout master" &&
# git checkout --orphan orphan &&
# git reset --hard &&
# (
# GIT_PS1_SHOWDIRTYSTATE=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 26 - prompt - dirty status indicator - orphan branch - dirty index
#
# printf " (orphan +)" >expected &&
# test_when_finished "git checkout master" &&
# git checkout --orphan orphan &&
# (
# GIT_PS1_SHOWDIRTYSTATE=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 27 - prompt - dirty status indicator - orphan branch - dirty index and worktree
#
# printf " (orphan *+)" >expected &&
# test_when_finished "git checkout master" &&
# git checkout --orphan orphan &&
# >file &&
# (
# GIT_PS1_SHOWDIRTYSTATE=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 28 - prompt - dirty status indicator - shell variable unset with config disabled
#
# printf " (master)" >expected &&
# echo "dirty" >file &&
# test_when_finished "git reset --hard" &&
# test_config bash.showDirtyState false &&
# (
# sane_unset GIT_PS1_SHOWDIRTYSTATE &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 29 - prompt - dirty status indicator - shell variable unset with config enabled
#
# printf " (master)" >expected &&
# echo "dirty" >file &&
# test_when_finished "git reset --hard" &&
# test_config bash.showDirtyState true &&
# (
# sane_unset GIT_PS1_SHOWDIRTYSTATE &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 30 - prompt - dirty status indicator - shell variable set with config disabled
#
# printf " (master)" >expected &&
# echo "dirty" >file &&
# test_when_finished "git reset --hard" &&
# test_config bash.showDirtyState false &&
# (
# GIT_PS1_SHOWDIRTYSTATE=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 31 - prompt - dirty status indicator - shell variable set with config enabled
#
# printf " (master *)" >expected &&
# echo "dirty" >file &&
# test_when_finished "git reset --hard" &&
# test_config bash.showDirtyState true &&
# (
# GIT_PS1_SHOWDIRTYSTATE=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
ok 32 - prompt - dirty status indicator - not shown inside .git directory
not ok 33 - prompt - stash status indicator - no stash
#
# printf " (master)" >expected &&
# (
# GIT_PS1_SHOWSTASHSTATE=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 34 - prompt - stash status indicator - stash
#
# printf " (master $)" >expected &&
# echo 2 >file &&
# git stash &&
# test_when_finished "git stash drop" &&
# git pack-refs --all &&
# (
# GIT_PS1_SHOWSTASHSTATE=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
ok 35 - prompt - stash status indicator - not shown inside .git directory
not ok 36 - prompt - untracked files status indicator - no untracked files
#
# printf " (master)" >expected &&
# (
# GIT_PS1_SHOWUNTRACKEDFILES=y &&
# cd otherrepo &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
ok 37 - prompt - untracked files status indicator - untracked files
not ok 38 - prompt - untracked files status indicator - empty untracked dir
#
# printf " (master)" >expected &&
# mkdir otherrepo/untracked-dir &&
# test_when_finished "rm -rf otherrepo/untracked-dir" &&
# (
# GIT_PS1_SHOWUNTRACKEDFILES=y &&
# cd otherrepo &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 39 - prompt - untracked files status indicator - non-empty untracked dir
#
# printf " (master %%)" >expected &&
# mkdir otherrepo/untracked-dir &&
# test_when_finished "rm -rf otherrepo/untracked-dir" &&
# >otherrepo/untracked-dir/untracked-file &&
# (
# GIT_PS1_SHOWUNTRACKEDFILES=y &&
# cd otherrepo &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
ok 40 - prompt - untracked files status indicator - untracked files outside cwd
ok 41 - prompt - untracked files status indicator - shell variable unset with config disabled
ok 42 - prompt - untracked files status indicator - shell variable unset with config enabled
ok 43 - prompt - untracked files status indicator - shell variable set with config disabled
ok 44 - prompt - untracked files status indicator - shell variable set with config enabled
ok 45 - prompt - untracked files status indicator - not shown inside .git directory
not ok 46 - prompt - format string starting with dash
#
# printf -- "-master" >expected &&
# __git_ps1 "-%s" >"$actual" &&
# test_cmp expected "$actual"
#
not ok 47 - prompt - pc mode
#
# printf "BEFORE: (\${__git_ps1_branch_name}):AFTER\\nmaster" >expected &&
# (
# __git_ps1 "BEFORE:" ":AFTER" >"$actual" &&
# test_must_be_empty "$actual" &&
# printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 48 - prompt - bash color pc mode - branch name
#
# printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear}):AFTER\\nmaster" >expected &&
# (
# GIT_PS1_SHOWCOLORHINTS=y &&
# __git_ps1 "BEFORE:" ":AFTER" >"$actual" &&
# printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 49 - prompt - bash color pc mode - detached head
#
# printf "BEFORE: (${c_red}\${__git_ps1_branch_name}${c_clear}):AFTER\\n(%s...)" $(git log -1 --format="%h" b1^) >expected &&
# git checkout b1^ &&
# test_when_finished "git checkout master" &&
# (
# GIT_PS1_SHOWCOLORHINTS=y &&
# __git_ps1 "BEFORE:" ":AFTER" &&
# printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 50 - prompt - bash color pc mode - dirty status indicator - dirty worktree
#
# printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_red}*${c_clear}):AFTER\\nmaster" >expected &&
# echo "dirty" >file &&
# test_when_finished "git reset --hard" &&
# (
# GIT_PS1_SHOWDIRTYSTATE=y &&
# GIT_PS1_SHOWCOLORHINTS=y &&
# __git_ps1 "BEFORE:" ":AFTER" &&
# printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 51 - prompt - bash color pc mode - dirty status indicator - dirty index
#
# printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_green}+${c_clear}):AFTER\\nmaster" >expected &&
# echo "dirty" >file &&
# test_when_finished "git reset --hard" &&
# git add -u &&
# (
# GIT_PS1_SHOWDIRTYSTATE=y &&
# GIT_PS1_SHOWCOLORHINTS=y &&
# __git_ps1 "BEFORE:" ":AFTER" &&
# printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 52 - prompt - bash color pc mode - dirty status indicator - dirty index and worktree
#
# printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_red}*${c_clear}${c_green}+${c_clear}):AFTER\\nmaster" >expected &&
# echo "dirty index" >file &&
# test_when_finished "git reset --hard" &&
# git add -u &&
# echo "dirty worktree" >file &&
# (
# GIT_PS1_SHOWCOLORHINTS=y &&
# GIT_PS1_SHOWDIRTYSTATE=y &&
# __git_ps1 "BEFORE:" ":AFTER" &&
# printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
# ) &&
# test_cmp expected "$actual"
#
ok 53 - prompt - bash color pc mode - dirty status indicator - before root commit
ok 54 - prompt - bash color pc mode - inside .git directory
not ok 55 - prompt - bash color pc mode - stash status indicator
#
# printf "BEFORE: (${c_green}\${__git_ps1_branch_name}${c_clear} ${c_lblue}\$${c_clear}):AFTER\\nmaster" >expected &&
# echo 2 >file &&
# git stash &&
# test_when_finished "git stash drop" &&
# (
# GIT_PS1_SHOWSTASHSTATE=y &&
# GIT_PS1_SHOWCOLORHINTS=y &&
# __git_ps1 "BEFORE:" ":AFTER" &&
# printf "%s\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"
# ) &&
# test_cmp expected "$actual"
#
ok 56 - prompt - bash color pc mode - untracked files status indicator
not ok 57 - prompt - zsh color pc mode
#
# printf "BEFORE: (%%F{green}master%%f):AFTER" >expected &&
# (
# ZSH_VERSION=5.0.0 &&
# GIT_PS1_SHOWCOLORHINTS=y &&
# __git_ps1 "BEFORE:" ":AFTER" &&
# printf "%s" "$PS1" >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 58 - prompt - hide if pwd ignored - env var unset, config disabled
#
# printf " (master)" >expected &&
# test_config bash.hideIfPwdIgnored false &&
# (
# cd ignored_dir &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 59 - prompt - hide if pwd ignored - env var unset, config disabled, pc mode
#
# printf "BEFORE: (\${__git_ps1_branch_name}):AFTER" >expected &&
# test_config bash.hideIfPwdIgnored false &&
# (
# cd ignored_dir &&
# __git_ps1 "BEFORE:" ":AFTER" &&
# printf "%s" "$PS1" >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 60 - prompt - hide if pwd ignored - env var unset, config unset
#
# printf " (master)" >expected &&
# (
# cd ignored_dir &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 61 - prompt - hide if pwd ignored - env var unset, config unset, pc mode
#
# printf "BEFORE: (\${__git_ps1_branch_name}):AFTER" >expected &&
# (
# cd ignored_dir &&
# __git_ps1 "BEFORE:" ":AFTER" &&
# printf "%s" "$PS1" >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 62 - prompt - hide if pwd ignored - env var set, config disabled
#
# printf " (master)" >expected &&
# test_config bash.hideIfPwdIgnored false &&
# (
# cd ignored_dir &&
# GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
# __git_ps1 >"$actual"
# ) &&
# test_cmp expected "$actual"
#
not ok 63 - prompt - hide if pwd ignored - env var set, config disabled, pc mode
#
# printf "BEFORE: (\${__git_ps1_branch_name}):AFTER" >expected &&
# test_config bash.hideIfPwdIgnored false &&
# (
# cd ignored_dir &&
# GIT_PS1_HIDE_IF_PWD_IGNORED=y &&
# __git_ps1 "BEFORE:" ":AFTER" &&
# printf "%s" "$PS1" >"$actual"
# ) &&
# test_cmp expected "$actual"
#
ok 64 - prompt - hide if pwd ignored - env var set, config unset
ok 65 - prompt - hide if pwd ignored - env var set, config unset, pc mode
ok 66 - prompt - hide if pwd ignored - inside gitdir
# still have 1 known breakage(s)
# failed 46 among remaining 65 test(s)
1..66
make[1]: *** [Makefile:11: prompt.t] Error 1
make[1]: Leaving directory '/home/tai/.cache/paru/clone/git-completion/src/git-completion/test'
make: *** [Makefile:8: test] Error 2
==> ERROR: A failure occurred in check().
Aborting...
error: failed to build 'git-completion-1.3.7-1':
error: packages failed to build: git-completion-1.3.7-1
My config
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
core.editor=nvim
I've I tried deleting ~/.cache/paru/clone/git-completion
.
Please let me know if I can provide any additional information.
I'd like to reboot ohmyzsh/ohmyzsh#8767 and get this properly upstreamed here. Would you accept a contribution for this? Should this be configurable?
Failures:
Result of:
cd test
dash completion.t -v -i
ok 53 - setup for ref completion
expecting success:
cat >expected <<-EOF &&
HEAD
main
matching-branch
other/branch-in-other
other/main-in-other
matching-tag
EOF
(
cur= &&
__git_refs >"$actual"
) &&
test_cmp expected "$actual"
--- expected 2022-02-10 15:26:56.628681536 +0000
+++ "/home/ruifm/repos/git-completion/test/trash directory.completion/actual" 2022-02-10 15:26:56.632014829 +0000
@@ -3,4 +3,4 @@
matching-branch
other/branch-in-other
other/main-in-other
-matching-tag
+tag-in-other
not ok 54 - __git_refs - simple
#
# cat >expected <<-EOF &&
# HEAD
# main
# matching-branch
# other/branch-in-other
# other/main-in-other
# matching-tag
# EOF
# (
# cur= &&
# __git_refs >"$actual"
# ) &&
# test_cmp expected "$actual"
#
Hi @felipec !
Thanks for putting this project together. I have two comments:
git
command itself. It would be nice to mention that the trick for Bash aliases also works for Git aliases that shell out, like this:$ git config --get alias.logv
!f() { git -C "$GIT_PREFIX" --work-tree=$PWD -c color.ui=always log --abbrev-commit --decorate --format=format:"%C(yellow)%h%C(reset) %C(normal)%s%C(reset) %C(dim white)%an%C(reset) %C(dim blue)(%ad)%C(reset) %C(auto)%d%C(reset) %C(green)%H%C(reset)" "$@" | git -p name-rev --stdin --name-only --tags; }; f
$ git logv --[TAB][TAB] # nothing happens
$ __git_complete 'git logv' _git_log
$ git logv --[TAB][TAB]
Display all 121 possibilities? (y or n)
--abbrev --dense --ignore-cr-at-eol --no-max-parents --reverse
# ...
Cheers!
Hi, thanks for making this. I tried the official file for zsh and it didn't work, then I found this on your answer on SO.
It is not very clear to me how to install this. I made it work by just copying the git-completion.zsh
and adding fpath=(~/.zsh $fpath)
to the .zshrsc
. Thus I am not able to use the configurations described in the wiki.
It would be great if you could explain the installation a bit more, eg make file
is not clear to me. Should I copy the folder, cd to the folder and then run make file
?
Also in git-completion.zsh there are some additional instructions on installing this (from the official file) but I guess they are not applicable to your method. There is also stated that "You need git's bash completion script installed..." which is also not applicable since it shows a message that this method is deprecated. Maybe they could be removed to avoid confusion.
Cheers!
Putting this here to rubber duck this failure I am seeing installing from the Arch User Repository (AUR).
https://aur.archlinux.org/packages/git-completion/ (also posted comment here)
[elijah@archlinux]$ bash --version
GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)
# failed 1 among 66 test(s)
1..66
make[1]: *** [Makefile:11: prompt.t] Error 1
make[1]: Leaving directory '/home/elijah/.cache/yay/git-completion/src/git-completion/test'
make: *** [Makefile:8: test] Error 2
==> ERROR: A failure occurred in check().
Aborting...
error making: git-completion
ok 13 - prompt - inside bare repository
not ok 14 - prompt - interactive rebase
#
# printf " (b1|REBASE 2/3)" >expected &&
# write_script fake_editor.sh <<-\EOF &&
# echo "exec echo" >"$1"
# echo "edit $(git log -1 --format="%h")" >>"$1"
# echo "exec echo" >>"$1"
# EOF
# test_when_finished "rm -f fake_editor.sh" &&
# test_set_editor "$TRASH_DIRECTORY/fake_editor.sh" &&
# git checkout b1 &&
# test_when_finished "git checkout master" &&
# git rebase -i HEAD^ &&
# test_when_finished "git rebase --abort" &&
# __git_ps1 >"$actual" &&
# test_cmp expected "$actual"
#
ok 15 - prompt - rebase merge
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.