What are the pros and cons of each of the following ways of collaboration flow on github?
The first method is easier to maintain a unique reference, controller by a maintainer in charge of accepting PRs (pull requests)
You don't have to protect branches, since the collaborators are working in their own forks.
But: it is more complex to set up for collaborators: in addition to their fork, they neeed to add the original repository as an "upstream" repository, in order to fetch and rebase their PR branches on top of an up-to-date upstream master branch, if they want their PRs to apply cleanly.
The second method is easier for collaborator, but involve a strict branch protection, in order to control who can push to where.