8

I have a repository hosted on GitHub which has several forks.

How can I set up the config of the main repository to set the receive.denyNonFastForwards flag so that the main repository can only accept pushes which are fast forwards and will reject any non fast forwards even if they are --forced

Sam Holder
  • 31,788
  • 13
  • 99
  • 173

2 Answers2

9

GitHub does not expose this functionality, though there are two options:

  • GitHub support can set this on a repository.

  • You can emulate this by setting the GitHub repository as a mirror of another repository that you have more control over. Only give write access to the GitHub account to a minimal set of responsible individuals, and to an account used to do the mirroring. The non-GitHub repository would be where you would set receive.denyNonFastForwards, and have everyone push. The mirroring could then be done by a post-receive hook, cron job, or a combination of the two. A reason to go with both would be to get a minimal time lag between the two repositories, and still make sure everything is up to date even if the post-receive hook failed to update GitHub (if GitHub was down, for example).

Jacob Helwig
  • 763
  • 4
  • 8
0

Github enterprise edition now has a feature for disabling force pushes. For the ones not using the enterprise edition you can configure a pre-push hook.

It is a good practice to never force-push to master unless absolutely necessary.

kristianp
  • 5,069
  • 33
  • 54
tejasbubane
  • 796
  • 1
  • 7
  • 10