No, we use Perforce. I specifically use the P4V client and so do many of my coworkers. There's also handy plugins for visual studio.
> I found "git can't handle our scale" to be hilarious. It's like they think they're the only company of that size. There's definitely people operating at that scale using Git with no issue.
Facebook's issue with that scale is that they've gone with a monolithic repository: all their projects sit in one big repository. This makes versioning easier across services, as well as aiding the ability to replicate old builds.
What other companies of their size use monolithic repositories on git? Google uses perforce, and both Google and Perforce have needed to do a bunch of engineering to make that possible.
The pros (IE the industry itself, I have no idea about indies) use perforce, for exactly that reason. Looking further, it seems like it's free for up to 20 users. Mainly because it allows you to specify how many versions of binary files are stored. Food for thought.
> There is a nice little plugin for it that allows you to zip up a changelist and give it to someone else allowing them to view your changes (they simply need to unzip it using that util).
I used to do that but now I use p4 shelve. Just give the person your changelist number and they can unshelve and view your changes. I also find it handy when I'm working on multiple things at once. Being able to put all your code aside and come back to it later is pretty sweet.
The problem is Git itself is bad with large repositories; you have to keep the entire repository size available on disk. Also large repositories tend to get slow. Especially with a bunch of binary files.
What I often see recommended (and will probably switch to soon since I'm facing the same problem) is Perforce - it integrates with Unity, better handles the large binary files, and is free for small teams such as OP's.
It's not git, it's the Windows filesystem (or any case insensitive file system).
Had a similar issue a long time ago using Perforce SCM.
A developer on Linux or Mac OS X (using the case sensitive version of HFS+), renamed a file from all uppercase to camelcase. However, he didn't delete the old file.
This caused issues when people on Windows tried to check out the project. The client was complaining because the Perforce server (on Linux) saw 2 files, the Perforce client saw two calls for the same file.
I deleted the orphaned file on a Linux system and things started working normally on the Windows systems.
They have visual merge tools to assist. At work we use the perforce mergetool. It's OK, but I'm sure there are better.
Google had 12,000 (!!!) users of their one codebase repo (perforce) as of 2011. I think these are all great ideas, but none of them address the fact that you're going to be generating a lot of code (best practices or not) with that many people using your CM tool. More code than one git repo can handle.
For cloud storage you could use.
https://www.amazon.com/clouddrive/learnmore
Your nas solution could be dangerous. Don't have one massive share for everyone to work out of, that will result in loss of accountability and turns into an organizational nightmare.
If you need secure storage that everyone wants to work from research this tool.
It starts with a small set of people. But without proper checkouts & versioning history you will have a hellish time with user accountability.
Try using http://www.perforce.com/
With this system you can check in and out files log changes and only have the files you are working on if needed.
CIFS/SMB is a dreadful protocol for meaningful traffic. (SAMBA)
If you don't go the route I suggested which is the industry standard for managing assets.
Try using a webDAV server and adobe media server.
you can find some feedbacks if you search SVN vs Perforce, or you can check the official comparison. I don't know exactly how it works, but most feedbacks is that Perforce is better at handling large/binary files. And for using SVN with binary files, I know for sure SVN sucks.
I was heading toward a solution with git+git-annex or mercurial+LargeFiles, and the binary files synchronized with btsync.
Perforce is designed for this. Also sharepoint and confluence could be options.
https://office.microsoft.com/en-ca/sharepoint/
https://www.atlassian.com/software/confluence
You could go the opensource method and use WebDav with Apache.
Go with Perforce. It's basically an industry standard and is highly regarded as the best option for game projects. Yes, it does have quite the learning curve, but when you get it down you'll find yourself doing things much faster than if you went with git or any other resource control option. If you have any problems, feel free to shoot me a PM and I can help you out.
You can find plenty of information on Perforce on their website: http://www.perforce.com/
Edit:
It's also a good idea to at least be familiar with git though. Git is very popular with the open source community (and it's what UE4's code is hosted on). But for your own projects, definitely go with P4.
The best merge tool I've found that supports three way merges is Perforce's p4merge. Sounds crazy, I know, but it's free (beer, not speech), works great on linux, and doesn't need to be used with Perforce (I use it with git mergetool --tool=p4merge).
If you know others, chime in: I wouldn't mind finding a FOSS solution, and/or a diff tool that also does syntax highlighting.
There is also P4Report, I like to use the Python marshaled output for simple scripts. As it doesn't need anything other than P4 command line installed which is available on all perforce platforms.
There's also the Perforce API (C/C++, Java, Python, etc.):
http://www.perforce.com/perforce/loadsupp.html
And the P4toDB tool, which can be used to export metadata from your repository for report generation:
Perforce is good, very good for assets and with the recent 'shelve' feature makes it much more usable as a code repro.
Personal I use git every time, I'm not quite sure why you think perforce is faster than distributed systems; granted distributed are initially slower (because you have to get whole repro) but thereafter, because 90% of your work is local, it's inherently faster.
5 changelists/sec made me wonder what Google's backup strategy was. I found this PDF from a few years ago (late 2008? - PDF created with OS X 10.5.6, mentions planned upgrade in Q2 2009) about their Perforce disaster recovery plan: http://www.perforce.com/sites/default/files/pdf/wright-disaster_recovery-paper.pdf
From page 5:
> it is possible that we would lose up to 20 minutes of data in that event (200-300 submitted changelists at peak usage)
An 18fold increase since!
When I was at Google (as a consultant '07 thru '08), a small core of engineers had done some fu to make Git as a very workable front-end for their Perforce mega-trunk. They had sparse checkouts from the outset, I'm not sure what would be needed in Mercurial (that's not there already) re 'shallow'. The other Google innovation was on top of the Perforce layer was FUSE
Google, in 2014 (edit: 2011), on their Perforce usage: http://www.perforce.com/resources/presentations/user-conference-talks/still-all-one-server-perforce-scale
Edit2: At the time I was rolling off the Google account, a perforce FUSE mount was being trialed. I'm sure there are better online refs, but a quick search has only turned up https://github.com/hanwen/p4fuse:
This is a small FUSE file system that exposes a P4 server as a file system. ./p4fs -fs-debug -p4-binary /usr/bin/p4 /tmp/mount-p4 cd /tmp/mount-p4 ls -l 730/depot/Jam/MAIN/src cat 730/depot/Jam/MAIN/src/regexp.h DISCLAIMER This is not an official Google product.
Huh, http://www.araxis.com/buy/prices is where I got the prices I quoted. Maybe they have regional pricing? I've been pretty happy with Beyond Compare (US$80 for multi-platform Pro) and was wondering if it's worth the extra $$ to switch to Araxis. Unfortunately I do need 3-way merge since I work with multiple developers and merge conflicts happen, so that means I'm looking at the $269 for Araxis Pro.
As far as free merge options, P4Merge is the best I've found. KDiff3 has a lot of features but the UI is a bit clunky.
Great idea for a thread, OP.
But I honestly couldn't imagine working on a project without a private Perforce depot installed on a Amazon AWS cloud server.
Git (BitBucket, GitHub, Gitlab, whatever you prefer) + Git Annex or Git Media.
Git Annex / Media will store all your assets on, for example, Amazon S3 or an FTP / SCP server.
(It isn't optimal, and still has a lot of workflow issues. If you want to work on the project with a team, I would suggest Perforce on your server.)
Hi, just to give a quick "tip": Perforce is free up to 20 users (but we would then need a server); Apparently, UE4 supports diffing for uassets and just in case we could write our own diff utility thanks to this
> Extra points if it does diff previews of binaries (jpgs, 3d objects)
Any VCS can do that if you point your diff tool at p4merge or other appropriate diff tool.
The VCS functionality you want is filetype-specific difftools. (Which you can script for git by examining the filename in your difftool and launching the appropriate diff program.)
So you want local-to-you commits, and not local-to-your-machine commits, right?
You should be able to do that with Perforce streams. You create your own stream off the development branch and only you commit to that stream. You can 'git pull; git push' with merge-down (get latest and apply to your stream) and copy-up (apply your commits to the development branch).
Your work is all on a server, but it's separate from everyone else.
One gotcha is that when you copy-up, you need to switch to the dev branch and pull your changes in (I think). However, since the differences between the streams is small, the switch should be fast (it's not a full sync like old perforce branches).
As far as I know there's no rebasing and you wouldn't be able to clean up your commits. For that you need git fusion, but I have no idea if/how that works.
e.g. http://www.perforce.com/blog/140506/introducing-piper-versioning-app-rest-us
LOL at "Support for drag-and-drop of files onto the app, for checking them into Perforce" -- ah, yeah. That should have been standard from 15+ years ago, guys.
Also LOL at "UI elements that are popular on Mac OS X: Cover Flow" -- right. That's why you use Cover Flow in an app, because it looks cool. Not because you thought about UX, hired a UX designer/team, and had them make a nuanced decision.
But still ... Piper looks great. Interesting to compare to GitHub's Mac client (which is a long way from production ready IMHO, but GH can and do use it in production, IIRC).
No its not quite as easy as git, but I'm talking about streams which are not too bad to use in practice and a hell of a lot better than svn branches. I also think the remaining problems are largely ergonomic and not technical. I would really love to see svn use a similar technology with the simpler commands that svn usually has compared to perforce.
Many studios use http://www.perforce.com/ for binary version control. Worth to mention - it's free for up to 20 users.
They also offer some basic integration plugin for Autodesk line (3ds Max, Maya, SI) and Photoshop.
Version Control
I used to not use version control. I started using Perforce at Sony, and I still rather like it when working on a team. It also has some advantages with regards to binaries, but IMHO, the binary problem isn't that big a deal on Git unless you have more than 2 artists, or if you have pre-rendered video. I still currently use Perforce for full-size projects at my studio PushyPixels, and at our sister studio ZeroTransform.
GitHub however is what I use for my own personal projects, and it's super useful for PUBLIC projects because it has such great web interfaces. It's also a bit easier to administer (Setting up a Perforce server is easy, learning how to use it effectively takes some time). The only trick with it is you'll want to get familiar with how it works and make sure that all the people on your team are familiar as well, as Git makes it... too easy to shoot yourself in the foot IMHO. I've gotten STUCK on Perforce before, but I've never accidentally done something I couldn't rectify, and in general, you can't unless you are in P4Admin. On Git... I've seen data loss from bad merges and the conflict behaviour takes some getting used to. I recommend SourceTree for a Git gui interface; it works well and is flexible to multiple workflows.
I ALWAYS use version control on any project I expect to work on for more than 1 hour. It has saved my life too many times and it allows me to be faster because I can be more... destructive and headstrong and not worry that it will get me into an irreversible situation.
>My work day generally began with "p4 sync, then go make coffee, maybe it's done when I get back."
I don't know what to say. I worked on Heroes of Newerth, with each game branch being 5GB+, and didn't regularly encounter slowness. It occasionally happened, but not in general.
>I had conflicts on literally every file I ever tried to merge. >edit: maybe not conflicts, but I had to manually do something with them.
I definitely ran into issues with P4V's merging, no disagreement here. It was generally fixable, though, by hand-merging branches once, and then doing a merge using P4. It would obviously be better if the issues didn't crop up in the first place.
>But you've been looking at those icons for years. For someone who's new to the product... there's your yellow triangles and red question marks... but then there's red arrows/Xs/wrenches that are so small they're impossible to tell apart unless I'm squinting at my monitor from six inches away... and green dots and green checkmarks... It's trying to jam way too much information into a tiny icon.
Come on, man. We're programmers. For a development tool, the new user experience just doesn't matter. What matters is that the experience for a regular user is great. That's why tons of programmers still use vim, which has just about the worst new user experience of any development tool.
I understand that there are legitimate problems with Perforce, but I've used it for ~6 years at two different companies and it is the best source control system I've used. I haven't used git, but there's really no reason for me to switch. For commercial projects, the cost is reasonable. For my own projects, Perforce is free for up to 20 users.
As other have said, I think your best off with git or hg, but maybe use a gui to get started. For example tortoise hg (windows hg) or tower (for mac git), there are plenty out there.
I also recommend perforce's P4Merge tool (its free and multi OS) , especially if your versioning graphics, so you don't get confused on merging and comparing changes, nothing beats it and it works with git/svn/hg/etc.
I've now seen at least two people mention Perforce for managing artistic/binary assets. What differentiates it from the other VCS softwares when it comes to non-code?
Edit: Nevermind. My own curiousity lead me to find P4GT. That is pretty darn cool.
They use vcs capable of dealing with big files. That's why Perforce is still the number one among game developers, and that's why PlasticSCM is getting traction as the only commercial DVCS able to handle that.
Also, people in gaming love Perforce's checkout model because it ends up being faster than detecting changes when your workspaces are huge. (250k files and 40k directories, for instance).