To distribute the code use Git.
If you need to install software to the customer, the git clone master of the branch on his server is done
If you need to update the software - git pull . But with git pull , one feature was discovered (it is clear that it was discovered for me :)) - it pulls changes if the commit has run on the server, and if we have a couple of files in the local repository but the committes on the server and locally match, they will not restore them. Is it possible to update the repository, so to speak, whether it is to check whether the number and content of files match locally and on the server and in case of a shortage, to fill it?