Yes, use branches.
First, pass everything that is shared, including the shared (possibly never used) version of the file:
(1)
Then create a branch and add changes to this file:
(2) <-- customer A / (1)
Then go back to the original changeset and create another branch with other changes in the same file:
(2) <-- customer A / (1) \ (3) <-- customer B
Then you start from branch (1) forward, merging with the corresponding (customer?) Branches, as you wish:
(2)
and etc.
Note that this can quickly become cumbersome if you have many clients or many of these smaller differences, there may be other ways to handle the differences, such as an assembly system that replaces the file as part of the assembly, instead of having N branches for such minor differences.
In other words, if the differences are related to such things as branding and features that every client has access to, the build system will prepare different distributions for each client that are already configured with the correct files and configuration. This will not require any additional branches (besides the fact that you should already have been involved in development, testing, production, etc.).
source share