Announcement

Collapse
No announcement yet.

VERSION CONTROL: Git LFS vs Perforce vs SVN

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    VERSION CONTROL: Git LFS vs Perforce vs SVN

    Hey all, I've read through almost every post on Version Control in the forums and I'd like to hear opinions circa-4.16 now that Git, Perforce, and SVN are supported in-engine.

    EDIT: I've posted the final version on my studio's blog: https://www.sondergames.com/single-p...ntrol-Overview



    I should probably preface this post with information so it looks like I did my research.

    DEFINITIONS
    Version Control Systems (VCS) - At the most fundamental level we have Git vs Perforce(P4) Helix vs Subversion (SVN). These are known as VCS and are frameworks that you can implement locally or in a cloud-based server using a GUI or command prompt. The big difference being that Git is open-source and distributed (DVCS). It clones the full repository locally onto each user's machine and they just merge their changes from their local copy. Whereas SVN and Perforce are proprietary and Client-Server. Perforce offers several confusingly intertwined products now like HelixCore, Helix4Git, and HelixSwarm. Helix4Git is a hybrid solution.
    Cloud-based platforms - Also known as Repository Hosting Services (yes, Wikipedia is my source) the main four for Git are Github (only Git), Bitbucket (Git and Mercurial), Visual Studio Team Services (VSTS) (only Git), and GitLab (only Git). For Perforce, it's mostly geared towards you setting up your own server with their Helix Versioning Engine (P4D). If you don't have physical server capabilities then Amazon Web Services (AWS) is their top recommendation for hosting a virtual server, but you'll still need to do all the configuration and management. The only other easier option i've seen is using Assembla. As far as SVN it seems like Assembla is the most popular followed by RiouxSVN. These are the web services that will actually store your repository on their servers.
    Graphical User Interfaces AKA Client Shell Interfaces - Part of the reason I made this post is due to Unreal's new in-engine source control plug-in interfaces for SVN, Perforce (Epic Game's choice), and the Git Beta thanks to [MENTION=1105]SRombauts[/MENTION] . But you're still unable to change deep engine level content like .ini files, so another way to track the repo is required. For Git repos Atlassian (makers of Bitbucket) SourceTree is extremely popular, and compatible with Github and Bitbucket. VSTS isn't built into SourceTree, but with the link below you should be able to get it running with OAuth. GitLab promotes Tower. Perforce just has their proprietary software P4V from what i've seen, but it appears very polished. Finally the main interface for SVN is still TortiseSVN, though there are several other xxxxSVN products out there.


    PRICING
    The majority of the cost in using version control is paying the hosting service. Git itself is free to use, and I believe SVN is as well. Perforce hides their prices though their website says they're free for up to 20 users, but has developed a very 'proprietary' reputation and is the Apple/Autodesk of the version control world (high-polish, constant updates, but suck you in to using our product and don't let you leave). I've also noticed that they have a very active PR department and almost every article that declares Git or SVN better has a comment from Perforce employees explaining there's 'new management' and 'more of a focus on the benefits of Git'.
    • Github - Free up to 1GB of bandwidth/storage for unlimited collaborators on public projects. If you want private projects you have to pay at least $7/month. If you want to put in large files you'll need to use GitLFS which is free for 1GB then $5/month per 50GB data pack on top of that.
    • BitBucket - Free up to 1GB of bandwidth/storage for 5 collaborators on public or private projects. If you want more than 5 users it's $2/user per month (min of $10). Git LFS is $10/month per 100GB data pack.
    • VSTS - Free unlimited public or private projects, free unlimited repo size, and free for up to 5 collaborators.
    • GitLab - Totally free for unlimited collaborators and public or private projects! Free 10GB of Git LFS room, but no way to purchase more space.
    • Assembla + Perforce Cloud - No free platform. $45/user per month starting at 5 users, so $225/month minimum. Storage is unlimited.
    • Amazon Webservices (AWS) Elastic Compute Cloud (EC2) + P4D - Fully based on your server hour usage but based on estimates here http://calculator.s3.amazonaws.com/index.html somewhere around $20/month for a 50GB server. A bit more complex to set up on windows platforms.
    • RiouxSVN - According to their website free up to 50MB, then permanent storage room is $1/20MB on top of that making 50GB around $2500.
    • SourceTree and P4V - Both appear to be free to use.
    • Tower - Currently $60.



    PROS/CONS
    • Git and (DVCS in general) has traditionally been incompatible with repos requiring large binary files. With the latest Git LFS features it's much better, but still the 'repo pointers' system isn't perfect can get messy.
    • Perforce is designed with large binary files in mind, and uses a 'locking' method on assets so that you don't end up with conflicts needing a binary file to be merged (because you can't).
    • Perforce makes what its calls "lazy copies" when going between branches/streams to minimize storage space. You need to clean the lazy copies before removing old files.
    • Everybody ***** on using SVN, and i'm not totally sure why, but it doesn't seem like a good idea.
    • Git is open-source and Perforce is proprietary, so as with everything there is more opportunity for community involvement and widespread adoption with Git.
    • In Git and in SVN you edit your changes directly via editing files in local filesystem after receiving files from repo. In Perforce "the right" way to work with files is to mark them that you're going to work with them (p4 edit).
    • Perforce tracks integration on a per-file basis instead of per-commit. This makes Perforce the only option for large teams (~20+) since you don't want that many people all trying to merge commits at the same time.
    • Perforce server manipulation is typically faster than Git's due to the way it handles files.


    Best practices from [MENTION=32340]mittense[/MENTION]
    1) Don't mix your source control solutions. I tried this for a while, and it's just a mess (especially for onboarding new folks). It makes sense at a high-level, not so much at a practical one.
    2) Once you make a choice, stick with it. Don't jump to-and-fro unless you really have a strong reason to do so -- I had to jump around a bit because I had an issue figuring out how to best host our repos (btw: Visual Studio Team Services is a git-based repo host with absolutely no repo size cap for free; my project currently is ~300gb and I've not paid anything for it).
    3) Git + Git LFS are a really solid alternative to perforce now, especially as LFS is getting file-locking (it has it, it's just... unreliable). That said: Git and Git LFS eat the hell out of your local storage space. My .git folder for a project is about the same size as the actual project itself. Since I work on a laptop (a beefy one, but still a laptop) this has been a real pain, but it's likely not for most. But it's something to keep in mind.
    4) Perforce is great. It is also, however, not cheap once you get beyond the 5-seat free license.
    5) Don't use Assembla.
    6) I also don't recommend SVN, but I've never liked SVN.


    QUESTIONS
    > Which do you use and are you part of a team? How large and how many need to push commits?
    > How long did your method take you to set up? Especially if you set up your own virtual server.
    > When did you make the decision? What was the final reason you decided what you did? Would you change anything?
    > How much does it cost you?


    These are the best forum threads i've read through:
    https://forums.unrealengine.com/show...ub-or-Perforce
    https://forums.unrealengine.com/show...FS-vs-Perforce
    Best Wikipedia article for breakdowns:
    https://en.wikipedia.org/wiki/Compar...ing_facilities
    Unreal Documentation:
    https://docs.unrealengine.com/latest...rol/index.html
    VSTS old article about free Git LFS space:
    https://blogs.msdn.microsoft.com/dev...-vso-git-repos


    After looking into all the options we've ended up going with VSTS + Git LFS + SourceTree. Setting up one of my artists takes around 5 minutes instruction outside of download time.
    137
    Git LFS
    37.96%
    52
    Perforce
    33.58%
    46
    SVN
    18.25%
    25
    Other or none
    10.22%
    14
    Last edited by Cirralisis; 08-08-2017, 08:16 PM. Reason: Added link to final blog post

    #2
    Perforce.

    > Which do you use and are you part of a team? How large and how many need to push commits?

    Currently my team is just myself, but I've used Perforce on teams of several hundred people (with a changelist count in the millions). In my experience, Perforce is the de-facto standard in the Games Industry.

    > How long did your method take you to set up? Especially if you set up your own virtual server.

    10 minutes, if that.

    > When did you make the decision? What was the final reason you decided what you did? Would you change anything?

    Perforce still offers the best branching/merging solution IMO. Everyone in the industry knows Perforce and how to work with it, it has wide support from vendors, etc.

    > How much does it cost you?

    Nothing, P4 is free up to 5 users/25 client specs (IIRC). After that there are licenses you can purchase per seat.
    Able Ability System - A high performance, robust ability system for UE4. Now Available!

    Comment


      #3
      Appreciate the reply [MENTION=172958]ExtraLifeMatt[/MENTION] !

      It definitely appears that the majority of large game studios use Perforce, and vendors know it.

      My situation is that i'm working with a team of 8 and 4 will need to be able to pull my version (2 might commit something back). We were just zipping the full project in dropbox before, but since some are in 2nd world countries the download times/bandwidth usages were getting out of control.
      I used TortoiseSVN back in 2012 working as an Android/web developer for a small company, and I set my current team up with a Git LFS repo hosted by Github using SourceTree back in November (following this popular tutorial https://www.udemy.com/unrealcourse/learn/v4/overview ). Only issue was that we started getting close to the 1GB limit and it wasn't worth it to purchase more space because I was the only one working in the engine.

      I set up a Bitbucket + Git LFS repo last night in about 15 minutes, and it was extremely straightforward, free, and fast. From the videos I've seen on Perforce it doesn't seem like there's a free way to try it out without setting up my own computer as a server and opening ports through my firewall for my team to connect to? By try it out, i mean have my whole team do a pull request.

      Also, "Perforce still offers the best branching/merging solution IMO." You're just referring to the "locking" of assets while you're working on them? How does that work with a .umap?

      Thanks!
      Last edited by Cirralisis; 06-20-2017, 06:01 PM. Reason: Counted my own **** team wrong xD

      Comment


        #4
        I meant more code wise, being able to create branches and integrate changes between branches as needed. Perforce has always made diffing/merging and seeing integration history pretty easy IMO.

        You would need your own server (you could set it up through AWS, there's plenty of tutorials on YouTube on that - just be aware that the upload speed on the free tier AWS is pretty slow).

        Perforce will let multiple people check out a file (unless its marked as exclusive checkout), UMaps are binary data so they probably should be exclusive check out and only one person should be touching them at a time, that's more a workflow thing than a source control issue. Having multiple people work on a binary asset file that cannot be safely merged is asking for trouble.
        Able Ability System - A high performance, robust ability system for UE4. Now Available!

        Comment


          #5
          > Which do you use and are you part of a team? How large and how many need to push commits?

          Visual Studio Team Services, which isn't even listed. Unlimited space, completely free up to 5 users, including LFS (with anything past that being really cheap), and private repos are free. We mostly use it just for their Git server, we don't really use their online management tools that much. Currently using it with just 5-6 people normally so we never had to pay a penny.

          > How long did your method take you to set up? Especially if you set up your own virtual server.

          Not that long, maybe 10 minutes to work out how to do authentication with Sourcetree on it.

          > When did you make the decision? What was the final reason you decided what you did? Would you change anything?

          A few months back now, and mostly it came down to price. Originally we wanted to go with Perforce, until we saw the price so that went down pretty quickly as an indie studio. If Git is going to be largely the same experience no matter what provider we went with, there wasn't really any drawback to going with VSTS since it had all the storage we could ever need and barely cost a thing.

          > How much does it cost you?

          Absolutely nothing, since we don't normally have more than 5 active users at a time and people not committing files don't need to be paid for. If we grew any more though, it would be $30 per month for 10 users ($6 each added, don't need to pay for unused seats either, ex: 6 users would be $6 since it's 5 free and 1 paid).
          Last edited by Zero-Night; 06-20-2017, 06:29 PM.

          Comment


            #6
            Hey [MENTION=738]Daniel.Wenograd[/MENTION] !

            It does seem like the majority of people using Git with game development have never worked at a large game studio. Not saying it's a bad thing, but i'm starting to see parallels between the Git/Perforce user base and the Blender/Max crowd. Seems like they have about the same features (besides locking files). And since 'shelving' files (committing them temporarily) is available in Perforce, and LFS is available through Git....the differences are really disappearing for small teams.

            I'll be honest I've only seen 2 other people talk about using VSTS, and it almost seemed like they were microsoft fan-boys. And it doesn't mention LFS on their site https://www.visualstudio.com/team-se...pare-features/ which is a bit surprising. I think we could all agree Git is unusable with game dev without LFS.

            How large is your current repo? With Bitbucket being $10/month per 100GB, but having unlimited users/private repos, it's definitely seeming like a good option.

            *******
            [MENTION=172958]ExtraLifeMatt[/MENTION] I'm just curious...when was the last time you tried to use Git+LFS with a project? Did you have problems using it?
            Last edited by Cirralisis; 06-20-2017, 07:10 PM. Reason: Dividing comment addressees

            Comment


              #7
              I've used Git a bit before and I just went with what I knew best which is Perforce.
              Able Ability System - A high performance, robust ability system for UE4. Now Available!

              Comment


                #8
                I voted other.

                Off the top you do not mentioned if your team is local or Internet based which is important as to network structure requirements as neither offers approaches which are compatible as to the needs of a larger than average project or at the very least another individual is add to the project.

                What I found lacking is a better understanding of the word use as to source or version control which can be controlled under LAN conditions using software but as of yet there is not an all-in-one solution as to Internet based teams due to the lack of a properly structured CMS structure that will allow the selection of an individual asset from an asset and resource pool that is visible to both the main project, for the purpose of baking out the game, *** well as individual projects, as a sandbox, to be consolidated at a latter date.


                In context of being an Internet based team.

                > Which do you use and are you part of a team? How large and how many need to push commits?

                Yes I'm part of a fair size team as the asset and resource manager.

                We use

                GIT for code
                SVN for content based projects
                SVN for consolidated build of the game
                WebDev for art asset storage.
                Recently we applied for and got a Steam account as a single point solution that gets auto updated during the development cycle.

                Number of developers needing some form of access is about 24 but in most cases 12 members have and needs access to all areas. The numbers increase to hundreds as to open QA testing needs which required special download keys and a custom downloader app which is now solved via the addition of Steam.

                You can think of the design as token ring that can expand as to needs that works over the Internet with out a single software solution.

                > How long did your method take you to set up? Especially if you set up your own virtual server.

                It's a design still in process as to additions to the team who may need special considerations as to being able to work in a manner that they are failure with. To get a solution that everyone found easy enough to work with took about a year.

                We don't use a virtual server and as far as I know we use an Enterprise based solution. As to what that is I have no clue and you will have to ask someone from our IT crew.

                > When did you make the decision? What was the final reason you decided what you did? Would you change anything?

                We still add and remove solutions as to needs (scaling)
                No final reasons as to the purpose of getting usable assets visible to consolidated build of the game. If it's not in the UE4 project it does not exist.

                We make changes all the time of getting stuff into the pipeline and figure out where things have to go from there.

                > How much does it cost you?

                No clue as that's handled by a different department but one thing for sure is not “free”

                Why this works.

                We do not use in-app SVN or GIT support from with in UE4 as to the demand that assets and projects needs to be checked out so tends to lock out files that are not necessary. Does not work out all to well as more times than not someone lands up hiving to unlock assets.

                Over the Internet it's not like you can walk down the hall and check someone's stuff when they left for the day.

                Projects are owner based. Our character designer for example owns the character project an anything she needs to commit overrides any and all asset commits to that project. Once she is done with her commit permission is asked by the dev wishing to commit to her project.

                A lot more does goes on but using Token ring but if something fails, which happens no matter the solution, thinks only break at that point in the ring and easy enough to fix
                Clarke's third law: Any sufficiently advanced technology is indistinguishable from magic.
                Custom Map Maker Discord
                https://discord.gg/t48GHkA
                Urban Terror https://www.urbanterror.info/home/

                Comment


                  #9
                  Originally posted by Cirralisis View Post
                  Hey [MENTION=738]Daniel.Wenograd[/MENTION] !

                  It does seem like the majority of people using Git with game development have never worked at a large game studio. Not saying it's a bad thing, but i'm starting to see parallels between the Git/Perforce user base and the Blender/Max crowd. Seems like they have about the same features (besides locking files). And since 'shelving' files (committing them temporarily) is available in Perforce, and LFS is available through Git....the differences are really disappearing for small teams.
                  Well again, for us it was just a matter of price. Working on this project isn't our job, we just had to get something simple to share files and not step on each others' toes while working. While we -can- manage a Perforce server, I still have one set up on my home server actually, we use Git just because I don't want to take the time to train every artist individually on how to use Perforce. Git/Sourcetree just seemed more foolproof. Plus, if I host a Perforce server locally, my upload speed is only 20 megabit, I can't compete with Microsoft's servers.

                  Originally posted by Cirralisis View Post
                  I'll be honest I've only seen 2 other people talk about using VSTS, and it almost seemed like they were microsoft fan-boys. And it doesn't mention LFS on their site https://www.visualstudio.com/team-se...pare-features/ which is a bit surprising. I think we could all agree Git is unusable with game dev without LFS.
                  I'm not a Microsoft fanboy by any means, it just seemed like the right fit for us. There isn't a storage limit, at all. I can have all the artists throw up massive 2+ gb substance painter documents, zbrush sculpts, maya files, whatever on it and not ever worry about exceeding our space. If I'm making a level, even just on my own I might go through 40gb of data in a month if I need to share those files with another artist, the charges for something like that would go up really fast. (And yes, we have broken Sourcetree multiple times until we figured out the embedded Git Sourcetree uses is 32 bit). (Side note, if you know a Git client that's more stable than Sourcetree with massive 4-6gb files, that would be great :P)

                  https://www.visualstudio.com/en-us/d...le-storage-lfs
                  It does support it, not LFS 2.0 yet though so no file locking. Pretty much just throw the .gitattributes file in there and you're good to go.

                  Originally posted by Cirralisis View Post
                  How large is your current repo? With Bitbucket being $10/month per 100GB, but having unlimited users/private repos, it's definitely seeming like a good option.
                  Right now we're a bit over 100gb, for the sake of everyone's hard drives I move files we're "done with" onto my home server, so we don't get 4gb .obj files cluttering up the repo. We don't need to, it's just inconvenient.
                  Last edited by Zero-Night; 06-21-2017, 01:10 AM.

                  Comment


                    #10
                    Thanks for your input [MENTION=536]FrankieV[/MENTION]
                    Originally posted by FrankieV View Post

                    What I found lacking is a better understanding of the word use as to source or version control which can be controlled under LAN conditions using software but as of yet there is not an all-in-one solution as to Internet based teams due to the lack of a properly structured CMS structure that will allow the selection of an individual asset from an asset and resource pool that is visible to both the main project, for the purpose of baking out the game, *** well as individual projects, as a sandbox, to be consolidated at a latter date.
                    Isn't this exactly what Perforce does [MENTION=172958]ExtraLifeMatt[/MENTION] ?

                    But using 4 different source control platforms for game assets seems like an inefficient approach for a small team, I can't imagine trying to scale team size with that.

                    *******
                    [MENTION=738]Daniel.Wenograd[/MENTION] Seems like Git LFS 2.0 is only a few months old, so i'd imagine VSTS will adopt it pretty soon. I created an account and imported a repo, but how are you using SourceTree's new 2.x update with it? All the methods i see are for before you had to choose from Bitbucket, Bitbucket Server, and Github.

                    Comment


                      #11
                      Perforce handles binaries and assets very well, it's one of the reasons why the industry uses it so much. Using multiple CSMs is asking for trouble IMO. If you want to make a branch for a specific console that requires content changes, simply branch off your main development branch, change the data you want, all the while integrating fixes to code over as needed.

                      You can also solve that problem organizationally. Break assets into High, Medium, and Low quality and then make sure platforms are referencing the appropriate version.
                      Able Ability System - A high performance, robust ability system for UE4. Now Available!

                      Comment


                        #12
                        @Cirrlisis On the VSTS site, you need to make a Personal Access Token first, then add the repository to Sourcetree like this: https://dwenograd:randomLettersAndNu...t/RepoNameHere
                        So it's just the username: password login thing @ your visual studio repo. Sourcetree recognizes it just like any other Git repo and it works just fine.

                        Edit: http://blog.jongallant.com/2016/03/vso-sourcetree/ There, this one seems up to date.

                        Comment


                          #13
                          [MENTION=172958]ExtraLifeMatt[/MENTION], yea that's the same thing I though when I read that.
                          [MENTION=738]Daniel.Wenograd[/MENTION] Sweet! I was able to clone my project from VSTS using the Oauth token. How can i push an existing local repo to VSTS though?
                          [MENTION=1105]SRombauts[/MENTION] Does the Git beta work with LFS 2.0?

                          Comment


                            #14
                            [MENTION=877]Anadin[/MENTION] [MENTION=1003]Gbr[/MENTION] [MENTION=267]Kris[/MENTION] [MENTION=1977]TechLord[/MENTION] [MENTION=9662]Smartay[/MENTION] [MENTION=45554]youarebritish[/MENTION]

                            I'd love to hear your responses, and any other comments if you have time.

                            Comment


                              #15
                              [MENTION=738]Daniel.Wenograd[/MENTION] Got it figured out, and received a message while pushing to the remote that I found to be quite peculiar.
                              Click image for larger version

Name:	bVSTSLFSSupportMaybe.jpg
Views:	1
Size:	58.5 KB
ID:	1130066

                              Do you think VSTS might have upgraded to Git LFS 2.0 already? I have to assume if the remote origin allows locking now....

                              Comment

                              Working...
                              X