I'm looking for some advice from others who write pl/sql packages, procedures, and functions.
My way of working has been to use SQLD to create then maintain pl/sql code with the usual compile, edit, compile, text, edit, etc. approach. There's nothing sophisticated about the approach. The code lives in the DB rather than the file system. In most every other type of development work I do, there are version-controlled files. And lately the SCM has been git with storage on our institution's enterprise GITHUB.
But whether it's GIT of SVN or something else, you can see the problem: the saves go to the db, which provides no opportunity for most any tool to see the changes as they're made, to record and annotate them in a repo, to provide a means to roll them back.
I once did try to always save to the file system, but soon realized a process like that is really error-prone. And anyway it doesn't help because the code that matters is in the db, where there's no "revert to commit 87df6ac3."
For simple DDL and DML I don't think this matters quite so much.
There actually is a function in SQLDeveloper that allows you to work directly on a file in the file system, and when you save the file or revert it with the internal SVN (not sure with external tools), it gets also compiled in the database.
It should be as easy as opening a versioned file, select a working connection from the top right combo box, and then work on in as if it were a database procedure, mind thou that a couple of issues were reported with this workflows so check it out first to see if everything works for you as expected.