<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Fri, Nov 9, 2018 at 11:41 AM Roman Lebedev via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Fri, Nov 9, 2018 at 10:33 PM Louis Dionne via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> At the LLVM dev meeting, some people discussed the possibility of having pre-push and/or pre-commit hooks to avoid messing up the history when we move on to the monorepo. One of the concerns was about people starting to push merge commits and unsquashed commits upstream, resulting in a messy history.<br>
><br>
> I had volunteered to write a hook that would check for the absence of merge commits in the set of commits being pushed upstream, which I did. The hook is available here: <a href="https://gist.github.com/ldionne/2c260ce2081db74206e074e09cff71d0" rel="noreferrer" target="_blank">https://gist.github.com/ldionne/2c260ce2081db74206e074e09cff71d0</a>.<br>
><br>
> If there is any interest for something like this, the code’s there.<br>
I would like to note that it is a client-side hook. So every one would<br>
need to install it.<br>
To be actually able to prevent such things, it needs to be<br>
centralized, server-side hook.<br>
(I don't think you can have server-side hooks on github, so if that is required,<br>
the master (as in, not a mirror, but the one you commit things into)<br>
git monorepo can't be located on github..)<br></blockquote><div><br></div><div>Github has the notion of protected branches.  This is the same way you disable the ability to force push to a branch, which I dare say is absolute mandatory that we enable for master, and probably every other branch as well, except for perhaps 1-2 admins.</div><div><br></div><div>I haven't studied the API in detail, but I believe it should be possible to create a required check that a commit is not a merge commit (among other things), and reject it if it is.</div></div></div>