Псевдоним Git, который переключается в определенный репозиторий Git, а затем запускает предоставленную команду Git, то есть:
[alias]
repo1 = "!f() { cd /path/to/repo1 && git \"$@\" ; } ; f"
не работает с Git 2.16.2, если выполняется внутри рабочего дерева Git.В Git 2.12.0 он работал нормально.
Независимо от того, какая команда Git передается псевдониму, она выполняется в исходном каталоге рабочего дерева, а не в целевом каталоге назначения.
Шаги для воспроизведения:
$ mkdir -p /tmp/git
$ cd /tmp/git
$ mkdir repo1 repo2
$ cd repo1
$ git init
Initialized empty Git repository in /private/tmp/git/repo1/.git/
$ touch foo
$ git add foo
$ git commit -m"git log should show this"
[master (root-commit) 6c366be] git log should show this
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 foo
$ cd ../repo2
$ git init
Initialized empty Git repository in /private/tmp/git/repo2/.git/
$ touch bar
$ git add bar
$ git commit -m"git log should NOT show this"
[master (root-commit) 27f9a83] git log should NOT show this
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bar
$ git branch new
$ mkdir ../repo2worktrees
$ git worktree add ../repo2worktrees/new new
Preparing ../repo2worktrees/new (identifier new)
HEAD is now at 27f9a83 git log should NOT show this
$ git config --global alias.cdg '!f() { cd /tmp/git/repo1 && git "$@" ; } ; f'
# From inside normal Git repo, works as expected:
$ git cdg log
commit 6c366be9188da3c8f9308ccfe1682c605ff6fed2 (HEAD -> master)
Author: msleigh
Date: Tue Jun 12 22:22:06 2018 +0100
git log should show this
# From outside Git repo, works as expected:
$ cd .. ; git cdg log
commit 6c366be9188da3c8f9308ccfe1682c605ff6fed2 (HEAD -> master)
Author: msleigh
Date: Tue Jun 12 22:22:06 2018 +0100
git log should show this
# From inside worktree:
$ cd repo2worktrees/new ; git cdg log
commit 27f9a83b7f62830b43277517b237e9b22cb9df9c (HEAD -> new, master)
Author: msleigh
Date: Tue Jun 12 22:22:42 2018 +0100
git log should NOT show this
Ошибка Git?Если да, то есть ли идеи, как мне переписать псевдонимы для достижения правильного результата?
Обновление
Я должен добавить, что если я использую git -C <destination> <command>
в псевдониме вместо cd <destination> ; git <command>
эффект тот же.