Version control for both engine and project

Hello guys,

I use perforce for version control of project files in combination with binary engine from launcher. I plan to move to github version of engine as I need to do changes in engine but I am not sure what is best way to track changes in engine source with ability to easily port everything to future engine versions.

I can think about some ways how to do that:

  1. Use Perforce for project files and GitHub for engine. Commit all engine changes to my github repo and then use git commands to move to newer version. This sounds nice but I am not sure if using two version control systems is really needed, especially when I can have only one enabled in Visual Studio plugins.
  2. Add engine files to my perforce depot. However, I am not sure how to not lose my changes when I will be downloading new engine version from github as git will not know about my changes because they will be uploaded to perforce only.

I am sure there are other, better ways too.

What are best practices and what do you suggest me ?

I personally am a fan of using git to store the engine repo. It makes merging new engine releases easier. Then on the other side use perforce for your game content, but be sure that you’re excluding the git repo from perforce.

I actually go a step further and use git for all my code (engine and game) and perforce for just the game content. I think programmers tend to prefer the git workflow. I’ve found Derek’s website to have some good info on organizing perforce and git, it seems he has tried many combinations and ended up with the git + perforce solution.

Thank you for answer, looks like there is not better solution than using two source controls. Btw. Derek’s website is great reference.

I’ve created two branches in Perforce: one for the clean engine and another one for the project. When a new engine version is released, I update the engine branch and then merge it into my project branch. Works fine so far.