Даю readonly доступ к репе только в том случает, если клиент проверенный или в случае полной предоплаты. В других случаях не даю в виду описаных вами причин.
Если вы работаете поэтапно с отдельной оплатой каждого этапа, то можно сделать так: завести отдельную ветку и дать доступ к ней. И сливать в нее новый код, после оплаты. Получается, клиент отлатил, скажем, личный кабинет - слили его в эту ветку. И так для каждой итерации.
Полный доступ, я бы поостерегся давать.