Git Source Control Provider Plugin

Hi all!

I’ve been working on a Git Plugin for the past two weeks :slight_smile:
I’ve already mention this on the Feedback for Epic: Additional Source Control providers support thread, but I figured I would get some more attention here from other developers…

So here I am, with a UE4 Git Plugin released!
Edit: This is now quite mature, having been there for a few years, but still in development for new features like LFS 2 file Locks.

Please, read carefully the detailed instruction on Read-me & Website, and report any issue or limitation not already described there.

I’ve also started a Wiki page

Thanks for reading, waiting for your comments!
SRombauts

edit: Someone else wrote a Wiki tutorial to get you started on your project :slight_smile:

edit: some screenshots from my Github project page:

Git Source Control Login screen:

Source Control status tooltip, when hovering the Source Control icon in toolbar:

Source Control top Menu, extended with a few commands specific to Git:

Submit Files to Source Control screen:

Git File History screen:

Visual Diffing of two revisions of a Blueprint:

Merge conflict of a Blueprint:

https://camo.githubusercontent.com/7ca48d44dc12a1bd0dcc716a852e707bc4ed4624/68747470733a2f2f646f63732e756e7265616c656e67696e652e636f6d2f6c61746573742f696d616765732f537570706f72742f4275696c64732f52656c656173654e6f7465732f323031352f345f372f42506d65726765546f6f6c2e6a7067

Status Icons:


Supported features (v2.6 for UE4.18)

  • initialize a new Git local repository (‘git init’) to manage your UE4 Game Project

  • can also create an appropriate .gitignore file as part of initialization

  • can also create a .gitattributes file to enable Git LFS (Large File System) as part of initialization

  • can also enable Git LFS 2.x File Locks as part of initialization

  • can also make the initial commit, with custom multi-line message

  • display status icons to show modified/added/deleted/untracked files

  • show history of a file

  • visual diff of a blueprint against depot or between previous versions of a file

  • revert modifications of a file (works best with “Content Hot-Reload” experimental option of UE4.15, by default since 4.16)

  • add, delete, rename a file

  • checkin/commit a file (cannot handle atomically more than 50 files)

  • migrate an asset between two projects if both are using Git

  • solve a merge conflict on a blueprint

  • show current branch name in status text

  • Configure remote origin URL (‘git remote add origin url’)

  • Sync to Pull (rebase) the current branch if there is no local modified files

  • Push the current branch

  • Git LFS (Github, Gitlab, Bitbucket), git-annex, git-fat and git-media are working with Git 2.10+

  • Git LFS 2 File Locks

  • Windows, Mac and Linux

What cannot be done presently

  • Branch/Merge are not in the current Editor workflow
  • Amend a commit is not in the current Editor workflow
  • Revert All (using either “Stash” or “reset --hard”)
  • Configure user name & email (‘git config user.name’ & git config user.email’)
  • Authentication is not managed if needed for Sync (Pull)

Wow this is incredible!

I can see everyone using this as a standard thing really soon!

Rama

Thanks for the kind word Rama (as always)!

When reaching a more stable/feature reach version, it will be most useful for folks wanting to interact with the Unreal Tournament Github repository :slight_smile:

For that we will need to improve the Editor itself - I would like to enable a full “github workflow” within the Editor:

  • Create a branch for a new feature
  • Commit, Push => Pull Request
  • Merge other branches

UE4 Git Plugin alpha v0.4 released

UE4 Git Plugin alpha v0.4 released, with many bug fixes and improvements to usability.

I’ve started to use it “for real” in my own small projects.
As I see it, I will move on “Beta” for the next version, to reflect this increased stability.

Please let me know if you try it, an report any bug or missing feature.

Cheers!

In cas anyone else wants to know:

Hi,
Yes I do, though I didn’t have much time lately; I want to polish it a little bit to release a v0.5 beta for UE4.2. Are you specifically waiting for this? You can already grab the 4.2 branch, with an unofficial binary for UE4.2

And yes it supports diff of Blueprints, for sure!

Cheers!

UE4 Git Plugin beta v0.5 released

UE4 Git Plugin beta v0.5 released, for the new Unreal Engine 4.2 Editor.

I am using it without any trouble, so its now labeled “beta” :slight_smile:

Cheers!

Great work here SRombauts. Will this work on OSX?

Hi,
I did not build the plugin for OSX as I have no easy access to a Mac.
But if you want, you could build it yourself from sources…
This should work, but as I’ve never tried it, there might be a few glitches.

I should also ask a friend if he can try that fit me!

Building for Mac OSX

Hi all, so I managed to get the plugin to compile for OSX, there was only a trivial bug with a missing local variable on a non Windows code path (so Linux was also affected).

The source code fix is already on GitHub, onto the 4.1 branch (where we tested it) and merged on the 4.2 branch.

I did not have enough time to test it, so I did not release anything yet, this will have to wait until after the weekend now.

By the way, it would be really nice if anyone could test it and report any problems (or success! :slight_smile:

Cheers!

First off I would like to say that this is amazing. I was actually working on something recently to do this. I will be playing around with this and testing it out and I will submit any feedback I have to help your development along. This already seems like a solid plugin and I’m going to get my dev team on it ASAP.

I have a question as well. The main reason I was putting one together is because rebasing with blueprint files turned out to be quite a headache. I wrote an extension for git to help with the process (GitHub - ruba1987/UDiff) but it didn’t quite cut it because when I merged uasset files it didn’t know about some things like interfaces that the BP was inheriting from. Meaning when I merged two BPs the interface events became custom events that weren’t linked to the interface. Granted this was better than nothing. What I’m wondering is how well it handles merging thing like blueprints and do you have plans to put rebase functionality in?

Hi,

No, sadly UE4 Source Control does not offer any help for merging or rebasing Blueprints, but it as been discussed for long term goal…

By the way, I would have no idea on how to implement this myself into the Engine…

Cheers!

I just wanted to say a big thanks, this was hugely helpful with tracking down a subtle, intermittent bug that cropped up a while back in one of my blueprints.

Thanks for sharing!

Hi, nice to hear that someone is actually using this :slight_smile:

I am doing some C++ stuff, where my plugin is in no use!

I don’t have access to UE 4.3 (yet) so I would love to know if the plugin still work on it.
Anyone?

I’d say it’s unlikely, I haven’t tried building your plugin, but they’ve integrated a change of mine that adds an extra method to ISourceControlState, which means your ISourceControlState subclass will fail to build until you implement the new method. It’s a very simple method, you can see my implementation here. I’ll probably update my hg plugin for 4.3 today, so I’ll let you know if there are any other API changes.

Thanks enlight, yes if you remember I did participate in discussions with your pull requests relative to ‘CanCheckIn()’ ;
so I have already implemented the code into my plugin at that time already (we where at 4.1 at that time)

I only commented out the ‘OVERRIDE’ specifier with a proper @todo comment.

As far as I know this is the only API change so I expect it to build and work flawlessly :slight_smile:

Would you be kind enough to clone my plugin and give it a try while you update yours?
That would be great!

Hah, forward thinking, nice. However, that wasn’t the only API change. Here are the changes I’ve encountered so far (still working on it):

  • OVERRIDE macro has been deprecated, needs to be replaced with the override keyword (these are warnings, so I’m not sure if that alone will make the build fail)
  • ISourceControlState::GetBaseRevForMerge() and ISourceControlState::IsConflicted() must be implemented, they’re needed for the 3-way-merge functionality (I don’t know if the merge functionality has been implemented in UnrealEd yet). For now I’ll just implement some stubs for these new methods to fix the build.

I’ll do a build of your plugin once I’m done updating mine.

OK, I’ve updated my plugin for 4.3, I haven’t implemented the new 3-way-merge related stuff yet but it builds again. One more thing to add to the API changelist is the new ISourceControlRevision::GetBranchSource() method. I’ve just tried building your plugin and the build failed due to the missing methods.

Thanks, a lot!
I’ve added the few missing method as stubs to fix the build, as you did.

I will get the 4.3 release to test it myself.

Cheers!

Hi all, I’ve made a new binary release of the Git plugin for the latest Unreal Engine 4.5 (and 4.5.1).

Enjoy!

Hi, I’ve made a new binary release, tagged 0.5.3-beta2 (Release 0.5.3-beta · SRombauts/UE4GitPlugin · GitHub)

The last one was only working for Unreal Engine build from sources, my mistake!
Let me know if anything else show up during you tests

Cheers!