threads / discuss / 50056

Git hooks don't run while commiting in worktree via git-gui

Subject: Git hooks don't run while commiting in worktree via git-gui

## tl;dr

3 messages between Dec 18, 2018 and Dec 19, 2018.

replies: 2people: 3as markdown or json

Иван Могиш· Dec 18, 2018, 13:46 UTC · lore

Hello. There is a little difference in behavior when you are committing to the worktree from CLI or some git client (tortoisegit/sourcetree) and embedded git gui.

If you configure git hooks in your repository and then add a worktree (via git worktree add), hooks from main repository works well both in main directory and in worktree, if you are using CLI/third-party GUI. Committing in the main directory via embedded git-gui works fine too, hooks are running. But when you try to commit in the worktree directory from git-gui, hooks don't work.

I think I've found the cause of this: https://github.com/git/git/blob/master/git-gui/lib/commit.tcl#L238 variable fd equals {} because proc githook_read calls proc gitdir to determine path to hooks. https://github.com/git/git/blob/master/git-gui/git-gui.sh#L626 This proc use variable _gitdir for calculating result. This var equals the result of executing git rev-parse --git-dir https://github.com/git/git/blob/master/git-gui/git-gui.sh#L1245 So, the path to hooks for worktree is path_to_main_repo/.git/worktrees/my_worktree/hooks, but there are no hooks. Hooks are in path_to_main_repo/.git/hooks, from where they are correctly (or not?) executed by git cli, while running from worktree directory.

If we put hooks to path_to_main_repo/.git/worktrees/my_worktree/hooks too, they will work both in git citool and CLI/third-party GUI. But they will execute different files, and it may cause some problems.

-- 
Ivan Mogish
Support Engineer
Phone: +9115212057
Johannes Schindelin· Dec 18, 2018, 21:56 UTC · re: Иван Могиш · lore

Re: Git hooks don't run while commiting in worktree via git-gui

Hi Ivan,
On Tue, 18 Dec 2018, Иван Могиш wrote:
Show 29 quoted lines
> Hello.
> There is a little difference in behavior when you are committing to
> the worktree from CLI or some git client (tortoisegit/sourcetree) and
> embedded git gui.
> 
> If you configure git hooks in your repository and then add a worktree
> (via git worktree add), hooks from main repository works well both in
> main directory and in worktree, if you are using CLI/third-party GUI.
> Committing in the main directory via embedded git-gui works fine too,
> hooks are running. But when you try to commit in the worktree
> directory from git-gui, hooks don't work.
> 
> I think I've found the cause of this:
> https://github.com/git/git/blob/master/git-gui/lib/commit.tcl#L238
> variable fd equals {} because proc githook_read calls proc gitdir to
> determine path to hooks.
> https://github.com/git/git/blob/master/git-gui/git-gui.sh#L626
> This proc use variable _gitdir for calculating result. This var equals
> the result of executing git rev-parse --git-dir
> https://github.com/git/git/blob/master/git-gui/git-gui.sh#L1245
> So, the path to hooks for worktree is
> path_to_main_repo/.git/worktrees/my_worktree/hooks, but there are no
> hooks. Hooks are in path_to_main_repo/.git/hooks, from where they are
> correctly (or not?) executed by git cli, while running from worktree
> directory.
> 
> If we put hooks to path_to_main_repo/.git/worktrees/my_worktree/hooks
> too, they will work both in git citool and CLI/third-party GUI. But
> they will execute different files, and it may cause some problems.

Sounds like you need https://github.com/git-for-windows/git/pull/1757 (we do not currently have a responsive maintainer for Git GUI, unfortunately, otherwise this patch would have made it into an official Git version already).

That patch also has the benefit of heeding core.hooksPath.

Ciao, Johannes

Show 5 quoted lines
> -- 
> Ivan Mogish
> Support Engineer
> Phone: +9115212057
> 
Stephen P. Smith· Dec 19, 2018, 18:09 UTC · re: Johannes Schindelin · lore

Re: Git hooks don't run while commiting in worktree via git-gui

On Tuesday, December 18, 2018 2:56:43 PM MST Johannes Schindelin wrote:
> Sounds like you need https://github.com/git-for-windows/git/pull/1757
> (we do not currently have a responsive maintainer for Git GUI,
> unfortunately, otherwise this patch would have made it into an official
> Git version already).

Are you talking about the version that is shipped with git for windows or the version that is shipped with the main (Junio's) version?

Too bad I only get bits and pieces of time to contribute

← back to recent threads