Having some major issues with using Git/Bitbucket/Sourcetree. Looking for some guru help

Hello, as the title says, myself and my partner are having some serious source control problems. I use Sourcetree regularly at work, but that’s not for game dev stuff, that’s just normal visual studio files. I got us all set up and didn’t seem to have any problems until we started testing. My partner has not used source control before so at first I thought maybe he was just missing something, but I have verified he is for sure doing everything right. It’s hard to describe what exactly is going on because it seems to be very inconsistent. I can push, then he will commit, pull, and push. But he sees nothing of my changes on his end. When I pull, sometimes I will get his changes, sometimes I won’t. Sometimes we get errors, sometimes we don’t. All the changes we have been doing have been things that I don’t believe should be causing any merge conflicts, such as adding a new Blueprint. We started a completely new project and repo, started completely from scratch, except this time we connected it through UE4 Source Control. Well, things only got worse from there. I was not getting any of the symbols I should be getting on the assets to tell me their statuses in the source control. I made a change (added a blueprint), committed and pushed. He pulled but did not find my changes. He then added a Blueprint, committed and pushed, I pulled, and now it is giving me an error when I try to open the project that is saying the project was made with a different version of UE4 (it was not, we both updated before creating the project and have verified we are both on the same version still). And it says I should try to manually build, but I can’t seem to figure out how to do that or why I should need to. We’ve done quite a bit of research and reading on source control in ue4 but most of what we find is just the general set up and not so much info on how the flow should go once started. I’m hoping someone can point me to a really detailed walkthrough of the entire process, or explain some things for me! thanks!

Hi, I am using Git/SmartGit/Github and the Git plugin with UE4 daily on up to 3 computers, and never had any problem. Are you using Git LFS?

Also, the very unnatural things to remember are:

  1. you need to know (somehow, bitbucket/slack notification ) when someone pushed something, and Pull it before doing any local commit (to avoid later rebase or merge)
  2. you need to close the editor before you Pull. You can then verify that you are completely up to date with the things on the server, that is you should not have local divergent commits
  3. when you commit, you should always Push as soon as possible and notify your co-workers so that you fulfill item 1.

Other than that, you should always be able to tell if you are up to date, work with the log window of your GUI. In case of doubt, doing some manual fetch will tell you if something new was pushed on the server

The (my) plugin is very helpful to get status icons and history with Visual diff on Blueprints, but nothing more (no Push, although I added them to my version of the plugin) and obviously no working Pull as you need to close the editor, which is a shame…

Let me know if something is unclear or if you would like some more explanations.

I’m not familiar with Git LFS. Is that something I need for using Git with UE4? Or is that just what you are using?

UE projects have a large number of binary assets.

These typically present problems for systems like git, they store the entire history of the repo locally so repo size quickly becomes a problem. In addition, there is no locking so people often lose work or trample each others changes by accident. This is not an issue for text-based projects, which is what git is good at and typically used for.

Git LFS attempts to alleviate the storage problem by storing pointers to files which are stored in remote storage, like S3.

If you rae part of a team you will have a MUCH easier time using a locking scm like Perforce.

Perforce is kind of the defacto game insdustry standard.

Git LFS is optionnal for small personnal project, where it also add complexity and costs.

But @OptimisticMonkey is right, it does not scale to bigger projects and/or bigger teams.

Git LFS 2 also add File Lock to help work on binary assets in team.

I have to agree, even tho Perforce is not easy to understand, and as some non negligible costs…

Plastic SCM is a challenger that I find much easier to work, and cheaper.

So I just looked at Perforce’s site. There seems to be a lot going on there… I’m assuming I would just be looking for the Helix Core Version Control? I’m also looking at Plastic SCM. It looks like there are two free versions. If I start off with the free one and then decide to upgrade down the road, will that cause any issues with my project? Thanks for the info guys! It’s a big help for someone so new to source control with video games!

Free versions should be safe to upgrade down the road, sure!

Any idea what I should be looking at as far as if I Dr use to go with Perforce? Like what do I actually need? There seems to be a lot of options.

So i found that Sourcetree actually has Git LFS built into it, and it is currently free (although that’s changing soon). So for now I think we are going to give that a try. My question is with setting it up though. It’s pretty simple since it’s built into sourcetree, but it wants me to set up the files to be tracked and I’m not sure how to know which files to track? Any help here?

Hey, if you are going to give a try to Git LFS, you can ask the plugin to create a basic appropriate .gitignore file for you, and also the right .gitattribute file to track properly all your Content/ directory :slight_smile: !

To do this:

  • go to “Source Control”

    • select “Git (beta version)” (or my updated plugin that you can put in your project Plugins/ directory, called “Git LFS 2”)

    • you should get the “Source Control Login” screen

  • tick the optional Add a “.gitattributes” file to enable Git LFS

  • if you want the plugin to do the initial commit, you can customize the message

  • click on Initialize projet with Git (this can takes up to a few minutes if you already have hundred or megabytes or gigabytes of assets)

  • then, when it’s finished, click on “Accept Settings”

Edit: here is a screenshot of Unreal Engine 4.18 Git “Login Screen”:

So I am back to this trying to figure out how to handle this. My problem is that I am working on a small team but we have basically no funds so I can’t do something like Perforce which wants 900 something a year. Maybe later, but at this stage we are not making any financial investments, with the exception of maybe a few bucks a month for a cloud storage or something. I am now curious about Subversion. It’s really the only thing I haven’t looked into yet. I did a little googling but again, there seems to be a lot of stuff out there and I’m just not familiar enough with what I’m looking at to know whats good, whats bad, and I’m not seeing a lot of prices anywhere. Any ideas?

bump, still searching for a solution here.

I think it would be a good idea to break this down into two things:

  • What aspect of this is a problem caused from Git?
  • What aspect of this appears to be a problem in Unreal?

Based on this statement: " I made a change (added a blueprint), committed and pushed. He pulled but did not find my changes. He then added a Blueprint, committed and pushed, I pulled, and now it is giving me an error when I try to open the project that is saying the project was made with a different version of UE4 (it was not, we both updated before creating the project and have verified we are both on the same version still)."

Check the branch in SourceTree (or “git log”) and see what actually is newly appearing, and if the newer commits are showing up. Do the changes that are part of the commit make sense for the changes that were made?

Also, are you accidentally checking in any intermediate files with the commits, or excluding anything? Alluding to SRombauts, how did you setup your Git repository (mainly, the .gitignore portion)?