From: Neal Kreitzinger Date: Fri, 02 Dec 2011 01:37:14 GMT Subject: Re: Anyone have a commit hook for forbidding old branches from being merged in? Message-ID: <4ED82BCA.5080909@gmail.com> In-Reply-To: On 12/1/2011 9:34 AM, Ævar Arnfjörð Bjarmason wrote: > I work on a web application that due to underlying database schema > changes etc only even compiles and runs for a given 2 week moving > window. > > Thus if someone started a branch say 1 month ago, works on it one and > off, and then merges it back into the mainline it becomes impossible > to bisect that code if it has a problem. You either have to: > > * Revert the whole merge * Manually eyeball the code to see where > the error might be * Brute-force manually bisect it by checking out > only the files altered in those commits instead of the commit at a > given data. Usually individual files are still compatible with the > new code. > > But the whole reason this is a problem is because people don't rebase > their branches before merging them in, unintentionally causing > problems. > > So before I write a hook to do this, is there anything that > implements a hook that: > > * Checks if you're pushing a merge commit * If so, is that merge > based off and old version of $MAINBRANCH * Is the base of that > branch more than N days old? * If so reject the push It sounds like you're saying that people should rebase before merging to main. That means their merge would be a fast-forward. You could just reject anyone who has not done a current rebase. Then you could use this technique from the pre-rebase.sample hook to enforce up-to-date rebases: only_in_main='git rev-list "^$topic" main' if test -z "$only-in-main" then exit 0 else echo >&2 "error: please rebase on main before merging to main." exit 1 fi v/r, neal