Highly recommended reference: Microsoft released a very thorough whitepaper on Lifecycle management. Read about it here.
A typical development flow could be
- Developers develop against their own personal development organization (Online/On-premise), in a solution with the same publisher / name
- They export the developer solution
- They unpack the zip file into the XML structure
- And check it into source control, merging it with the master version
A typical deployment into the integration organization could be
- Get a latest version of the XML structure from source control
- Package it into a .zip solution
- Import it into the integration organization
This way, you have a full history of all changes, linked to the developers, and you can make controlled merges, using merging tools you're familiar with.
A developer can always get a latest version from source control, package it and deploy it in his own development organization.