threads / discuss / 16376

git-submodule/before-rebase hook

Subject: git-submodule/before-rebase hook

## tl;dr

2 messages between Nov 18, 2008 and Nov 18, 2008.

replies: 1people: 2as markdown or json

justin· Nov 18, 2008, 03:59 UTC · lore

I just discovered git-submodule today, and already I can see it making my life a lot easier. I develop several modules that are used in two different projects, and being able to check in changes from the submodule in either project is something I have been wanting to do for a while. But there is one shortcoming in git-submodule that I haven't figured out how to overcome... yet.

When I make a change to a submodule and push that change to the parent repository, the change appears to all other users of the repository as a modification to the submodule commit version. A few people at our company use 'git ci -a' to add all of their changes, and I'm afraid they are going to unknowingly revert the submodule back to a previous version. So my plan was to add a post-pull hook that does 'git submodule update --init', so that people who don't do development on the submodule will get updates every time they pull. Unfortunately though, there is no such hook in git. I thought post-merge was going to work, but most people at our company use 'git pull --rebase', and post-merge isn't called in that case. The post-checkout hook is called, but the pull hasn't been completed at that point, so updating the submodule doesn't work. Alas, if only there was a post-rebase hook.

Any ideas other than patching every employee's git source to add a post-rebase hook?

Thanks, Justin

Andreas Ericsson· Nov 18, 2008, 07:47 UTC · re: justin · lore

Re: git-submodule/before-rebase hook

justin wrote:
Show 10 quoted lines
> I just discovered git-submodule today, and already I can see it making 
> my life a lot easier. I develop several modules that are used in two 
> different projects, and being able to check in changes from the 
> submodule in either project is something I have been wanting to do for a 
> while. But there is one shortcoming in git-submodule that I haven't 
> figured out how to overcome... yet.
> 
> When I make a change to a submodule and push that change to the parent 
> repository, the change appears to all other users of the repository as a 
> modification to the submodule commit version.

It shouldn't, unless you push the change into a non-bare copy of a checked out submodule, but that would be rather insane as the submodule rather than the superproject then gets to decide which version of the submodule to use.

> A few people at our 
> company use 'git ci -a' to add all of their changes, and I'm afraid they 
> are going to unknowingly revert the submodule back to a previous 
> version.

Ah, now I see where you're coming from. After you issue "git pull" in the submodule you have to sync the new version of the submodule to the superproject using "git submodule sync".

> So my plan was to add a post-pull hook that does 'git submodule 
> update --init', so that people who don't do development on the submodule 
> will get updates every time they pull.

Ok, I didn't. Why do you pull into the submodules if you don't want to sync the code so the superproject gets the benefit of the changes?

Show 10 quoted lines
> Unfortunately though, there is no 
> such hook in git. I thought post-merge was going to work, but most 
> people at our company use 'git pull --rebase', and post-merge isn't 
> called in that case. The post-checkout hook is called, but the pull 
> hasn't been completed at that point, so updating the submodule doesn't 
> work. Alas, if only there was a post-rebase hook.
> 
> Any ideas other than patching every employee's git source to add a 
> post-rebase hook?
> 
Yes. Only pull in submodules if you intend to sync them afterwards.
-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

← back to recent threads