Definitely PropertySources and DataSources. EventSources are difficult to build out of the box since the thing you want to alarm on varies greatly from environment to environment (which is why there isn't that much diversity in the ESs out of the box).
That said, any LogicModule can be updated from the repo by any portal administrator, which overwrites any changes made to that repo and reset the entire thing to the newly updated values. When you pull down from repo, you can see a diff between the two XML files (kill me now) to see what's changes and what you'll have to reset.
For complex datasources, I've started building a git pull into the script so that it pulls down a script from a github repo and then the groovy script executes the downloaded script. That way, I can update the collection script all I want and it doesn't change the DS. Ansible tower does this for its scheduled jobs really cleanly. My version is potentially overly complex since it requires git to be available on the collector. I do this by having docker installed on the collector and pulling down the repo using the alpine/git container. This also allows me to pull down a script in any language and run it in any interpreter in a docker container (that's also pulled from the docker hub at runtime). LevelUp would have had me presenting this method in some form, but it'll probably be much later. Sorry, i'm rambling now.