threads / discuss / 47142

[Query] Separate hooks for Git worktrees

Subject: [Query] Separate hooks for Git worktrees

## tl;dr

6 messages between Nov 9, 2017 and Nov 13, 2017.

replies: 5people: 3as markdown or json

Viresh Kumar· Nov 9, 2017, 10:58 UTC · lore
Hi,

I have a typical use case, where I am using the same repository for both Android and Linux kernel branches.

Android needs us to keep a special hook "commit-msg" which adds a "Change-Id" to every commit we create.

While this works fine with Android, the behavior doesn't change by simply changing to a upstream kernel branch and eventually by mistake I may end up sending patch with Change-Id to upstream kernel as well. And I want to avoid that.

I am looking at ways to make this configuration work for me by applying the hook only for Android branches.

I tried using the "git worktrees" command to create a separate linked tree for my android branch, but it doesn't have a .git directory but just a file linking to the main repository.

Any idea how I can get around this problem without having separate repositories for kernel and android ?

Thanks in advance.

-- viresh

Stefan Beller· Nov 9, 2017, 19:14 UTC · re: Viresh Kumar · lore

Re: [Query] Separate hooks for Git worktrees

On Thu, Nov 9, 2017 at 2:58 AM, Viresh Kumar <viresh.kumar@linaro.org> wrote:
Show 7 quoted lines
> Hi,
>
> I have a typical use case, where I am using the same
> repository for both Android and Linux kernel branches.
>
> Android needs us to keep a special hook "commit-msg"
> which adds a "Change-Id" to every commit we create.
The standard hook for Gerrit can be {en,dis}-abled via
  git config gerrit.createChangeId {true, false}
Show 11 quoted lines
> While this works fine with Android, the behavior doesn't change
> by simply changing to a upstream kernel branch and eventually
> by mistake I may end up sending patch with Change-Id to upstream
> kernel as well. And I want to avoid that.
>
> I am looking at ways to make this configuration work for me by
> applying the hook only for Android branches.
>
> I tried using the "git worktrees" command to create a separate
> linked tree for my android branch, but it doesn't have a .git directory
> but just a file linking to the main repository.

We have no worktree specific config yet, though patches for this were floated on the mailing list.

Though recent versions of git learned to conditionally include config files. (look for includeIf in man git-config), which I think could be used to set the option gerrit.createChangeId depending on the worktree you are in.

> Any idea how I can get around this problem without having separate
> repositories for kernel and android ?

The proposed approach above might be hacky but sounds as if it should work?

Thanks, Stefan

Viresh Kumar· Nov 10, 2017, 03:38 UTC · re: Stefan Beller · lore

Re: [Query] Separate hooks for Git worktrees

On 09-11-17, 11:14, Stefan Beller wrote:
> The proposed approach above might be hacky but sounds as if
> it should work?

Yeah its hacky for sure, but it solved my problem. Thanks for your help Stefan :)

-- 
viresh
Junio C Hamano· Nov 10, 2017, 05:00 UTC · re: Stefan Beller · lore

Re: [Query] Separate hooks for Git worktrees

Stefan Beller <sbeller@google.com> writes:
Show 13 quoted lines
> We have no worktree specific config yet, though patches for
> this were floated on the mailing list.
>
> Though recent versions of git learned to conditionally include
> config files. (look for includeIf in man git-config), which I think
> could be used to set the option gerrit.createChangeId  depending
> on the worktree you are in.
>
>> Any idea how I can get around this problem without having separate
>> repositories for kernel and android ?
>
> The proposed approach above might be hacky but sounds as if
> it should work?

If you meant "conditional include" by "proposed approach above", I do not see which part you found possibly hacky. It is to allow different set of configurations to apply depending on where you are working at, which I think was invented exactly for something like this.

It certainly is not any hackier than using the same repository to house separately manged projects even if they may be related projects.

Where does the aversion of "having separate repositories" primarily come from? Is it bad due to disk consumption? Is it bad because you cannot do "git diff android-branch kernel-branch"? Something else?

If it is purely disk consumption that is an issue, perhaps the real solution is to make it easier to maintain separate repositories while sharing as much disk space as possible. GC may have to be made a lot more robust in the presense of alternate object stores, for example.

Stefan Beller· Nov 10, 2017, 18:00 UTC · re: Junio C Hamano · lore

Re: [Query] Separate hooks for Git worktrees

On Thu, Nov 9, 2017 at 9:00 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 18 quoted lines
> Stefan Beller <sbeller@google.com> writes:
>
>> We have no worktree specific config yet, though patches for
>> this were floated on the mailing list.
>>
>> Though recent versions of git learned to conditionally include
>> config files. (look for includeIf in man git-config), which I think
>> could be used to set the option gerrit.createChangeId  depending
>> on the worktree you are in.
>>
>>> Any idea how I can get around this problem without having separate
>>> repositories for kernel and android ?
>>
>> The proposed approach above might be hacky but sounds as if
>> it should work?
>
> If you meant "conditional include" by "proposed approach above", I
> do not see which part you found possibly hacky.
Compared to a per-worktree configuration that you can setup via
    git config --for-worktree=X key value

the setup using conditional includes seems hacky to me. (I just realize that these conditional includes can be set using regular git-config, so maybe it is not as hacky as I thought.)

>  It is to allow
> different set of configurations to apply depending on where you are
> working at, which I think was invented exactly for something like
> this.

From a UX perspective, I can imagine a way easier workflow, but the data model seems to make sense.

> It certainly is not any hackier than using the same repository to
> house separately manged projects even if they may be related
> projects.

Well it is the same project with different upstream workflows. For example I would imagine that Viresh wants to cherry-pick from one branch to another, or even send the same patch (just with different commit messages, with or without the ChangeId) to the different upstreams?

> Where does the aversion of "having separate repositories" primarily
> come from?  Is it bad due to disk consumption?  Is it bad because
> you cannot do "git diff android-branch kernel-branch"?  Something
> else?

Yeah, that is an interesting question! (I suspect workflow related things, diff/cherry-pick)

Show 5 quoted lines
> If it is purely disk consumption that is an issue, perhaps the real
> solution is to make it easier to maintain separate repositories
> while sharing as much disk space as possible.  GC may have to be
> made a lot more robust in the presense of alternate object stores,
> for example.
Viresh Kumar· Nov 13, 2017, 03:16 UTC · re: Stefan Beller · lore

Re: [Query] Separate hooks for Git worktrees

On 10-11-17, 10:00, Stefan Beller wrote:
Show 5 quoted lines
> Well it is the same project with different upstream workflows.
> For example I would imagine that Viresh wants to cherry-pick
> from one branch to another, or even send the same patch
> (just with different commit messages, with or without the
> ChangeId) to the different upstreams?
Right.
-- 
viresh

← back to recent threads