There are different options:Full package
- Delivering the full installation package on every change.
- Pros: Easy enough, complete experience. Every new release is independent from the previous or the next one.
- Cons: 1 small file change in what is a 5GB install ?.
- Delivering partial installations that modify the parts that were really changed.
Launcher and per file update)
- Pros:Smaller delivering packages
- Cons: Patches are essentially diffs of 2 versions. Easy enough from version 1-> 2. How about from 4.25.6 to 5.12.3 ?
- Neutral: Possible a hybrid solution with the first one. Full packages on full releases, patches on the middle.
- Having a launcher application that manages per file updates.
- Pros: Very flexible, You get only the files that have really changed. Upgrading from version old.x to the bleeding.edge.y is not a problem
- Neutral con: The launcher itself. It's not directly a con per se, but You need to manage another application. But You can always use a 3rd party option
Of course a separate launcher doesn't mean You can't do a full package or patched versions with it.
Examples of launchers: of course Steam and Desura and the the well known Minecraft launcher. They all have some kind of "per file diff check". I might be wrong but I think Steam even doesn't send full files but really only the diffs of 2 versions.
There was a open source or just free option for that kind of launcher/updater. Like for example https://github.com/threerings/getdown
and I bet there are more options.