4 ms·
meta-tip: you can also put your aliases that start with '!' into stand-alone shell scripts named `git-fza` (e.g.) and then call it as `git fza` which will searc
by js2 3y ago
meta-tip: you can also put your aliases that start with '!' into stand-alone shell scripts named `git-fza` (e.g.) and then call it as `git fza` which will search your PATH for `git-fza` and invoke it as if it's built-in.
I do this for some of my more complicated aliases because I generally think it's poor form to embed shell scripts into configuration languages. (Looking at you, yaml.)
- bloopernova 3y agoOh nice, I didn't know that! For git fza I override an oh-my-zsh alias "ga" to run it.
- svieira 3y agoI have several scripts like that in my PATH, but Git on Mac can never find them. What am I doing wrong?
- js2 3y agoThe scripts have to be in your `PATH` and be executable from wherever you're running `git`. Say you have a script named `git-foo`. At the shell prompt, all of these should work: $ which git-foo $ git-foo $ git foo If the first or second commands fail, then `git-foo` is not in your PATH or is not executable. If those both work but the third command fails, I have no explanation. Here's the code which runs commands: https://github.com/git/git/blob/2996f11c1d11ab68823f0939b6469dedc2b9ab90/exec-cmd.c#L310-L327 https://github.com/git/git/blob/2996f11c1d11ab68823f0939b646... It basically prefixes your `PATH` (or a suitable default if `PATH` isn't set) with `GIT_EXEC_PATH` (defaulting to a compiled in value if not set) and then uses the normal Unix execvp machinery to run the command. You can try: $ GIT_TRACE=1 git foo But I'm not sure that will tell you anything helpful.
- svieira 3y agoWell, this is fun: $ which git-foo $ type git-foo git-foo is /Users/my.user/.local/bin/git-foo $ git-foo --help Help output from git-foo $ GIT_TRACE=1 git foo 14:26:18.849078 git.c:749 trace: exec: git-foo 14:26:18.849815 run-command.c:657 trace: run_command: git-foo git: 'foo' is not a git command. See 'git --help'. I can't say I've ever seen `which` and `type` disagree before ... And today-I-learned that while bash expands `~` in PATH entries other programs do not. The fix was changing my PATH from: PATH=~/.local/bin:other:paths to: PATH=$HOME/.local/bin:other:paths Thanks so much for the help!
- deleted 3y ago[deleted]
- bloopernova 3y agoWhat version of git do you have? If it came with macOS and wasn't installed via homebrew, it's possible that it's old enough to cause problems.
- js2 3y agogit has had this behavior for at least a decade. As well, macOS does not ship with git - it's installed as part of either the Command Line Tools package and/or Xcode and is reasonably up to date. For many years now, macOS has included what are effectively wrappers in /usr/bin for the various development tools and that use the xcode-select mechanism to run the actual command. If neither Xcode nor the CLT package are installed, you'll get a prompt to install the CLT package.