the answer to your question depends on the setup that you are running.
For example if you are developing code on your local machine and simply execute it via neptune by running either
neptune run my_code.py or
neptune send my_code.py ... you can (and i would advice you to) use version control like git with no problems.
I will assume that you are working in the neptune cloud notebooks with some files/folders that you treat as packages and those files/folders are being uploaded/downloaded frequently.
I have to say that I personally don’t use this setup very often but here are the things that I think help a lot:
Using cells as bash with:
! cp -rf /input/project_codebase /output/project_codebase to copy my codebase to a folder with write access if needed.
Read write files into cells:
%load filename.py magic to load a python file into a jupyter cell and be able to edit it.
%%writefile filename.py to write that content back to the file.
That way you can deal with all the adhoc changes from neptune.
Summing up for larger projects I choose to develop them locally in IDE and use neptune to run/monitor/manager experiment artifacts.
For smaller add hoc ideas/projects I use neptune notebooks (then I don’t really have evolving codebase). Using notebook magics described before helps a lot.
That being said we are working on improving user experience in this particular domain (and others) and there are some exciting changes coming down the pike so stay tuned!