I’ve decided to set up my own Perforce server and am trying to figure out the best way to organize and manage UE4 projects. I’m hoping to get the official word on some of this stuff! I considered putting this on AnswerHub instead, but it’s a very broad topic.
I briefly looked into using Perforce Git Fusion, but if you don’t start with their virtual machine appliance, the configuration looks somewhat painful - it also chews through 4 of your 20 free users for automation tasks. I know Epic uses Perforce internally and has mentioned looking into more directly mirroring the internal Perforce changelists to the public-facing GitHub project. However, I don’t get the impression the GitHub repository is ever intended to be canonical, as opposed to a replica of (a subset of) their internal Perforce depot. Does Epic use make use of git internally, via Git Fusion or otherwise?
I’m not yet using a customized build of the engine, but I expect to eventually. Is there a recommended organization for the engine alongside dependent projects? Do you use separate depots?
I assume that the third-party dependencies live in the Epic Perforce depot, as opposed to the GitHub repository where they are excluded. Are these dependencies expected to change frequently with updated engine builds? Can we rely on this to be mentioned in the release notes, or should we always assume they’ve changed and redownload both monolithic zip files?
I found this entry on AnswerHub where someone from Epic recommends against committing the solution or project files to version control. Does that mean every developer individually re-binds to source control in Visual Studio each time those files are regenerated? Also, although it’s not mentioned, I assume it’s best to exclude the DerivedDataCache directory.
Does this mean all the EXE and DLL files in Engine/Binaries/Win64? If so, should the corresponding PDB files also be checked in? Are they used for crash reporting or anything like that? Also, it seems like using the <binary+Sw> filetype would make sense here (only store the most recent revision), since you should probably never need to be able to sync an older compiled revision of the engine.
I’m sure I’ll think of more questions later, and depending on the responses I get, I might try to put together a wiki article about this.
Thanks in advance for any replies!