#source-control
1 messages · Page 29 of 1
if still getting set up, would be a good time to switch. but it'll still be good practice to sort this out 😄
can i convert it to stream maybe?
sadly no way to convert
no it starts with a new depot
oh
you would have to spend about a half hour watchign perforce's videos on streams so you don't get super duper confused first
i think just about anyone would recommend using stream depots overall and abandoning classic, so maybe yeah
after wards remake the project?
or well copy the project into a new depot?
also any video i should start with?
This video provides an overview of the main types of streams in Helix Core, as well as the iconography and relationships between stream types in the Helix Visual Client (P4V). Perforce solutions engineer, Jase Lindgren, also provides some example use cases and workflows for each stream type (mainline, development, release, virtual, and task), so...
im doing this one
In this video, you will learn how to connect Perforce to Unreal Engine as an Admin. This tutorial simplifies the process and shows you how to do this from start to finish.
Connecting Perforce to UE is the industry standard version control system that will later allow you to collaborate across teams and enable multiple users to edit the same lev...
and this guy sets up a stream to use
idk if he does it corrently though
is it fine to set up the depot in the same connection?
alr just made a new depot
the one with the stream
Yeah after you're happy with it you can delete the old classic depot you'll lose the history but it was only 100 commits/changelists so...
and how does chandell connect to the new repo?
it's the same server? new workspaces for both of you though to map the new depot
Does anyone know why and/or how I can disable the Unreal Editor from putting a "#changelist validated" at the end of every submit that I do from the editor ?
e.g.
I removed the "#changelist validated" from the little editor dialog that opens up when I want to submit something but it doesnt seem to count that in
You should be able to disable editor validation in the settings, which will disable this line…
Although presence of this line doesn’t do anything in unreal itself, so you can easily ignore it as well
yeah well not sure If disabling the validation is a good idea......
hm, sadge that I can just turn that line off..
afaik there should be a way to disable it, I just don't remember how honestly
so let me dig though the code real quick since I just got back home
yeah, just found it... in C++ it's bEnableValidationTag which would become "Enable Validation Tag" indeed
what does this "validation" even do 😄 i have never submitted to perforce with Unreal lol
it does run whatever validators you write youself
yeah its quite important for staying consistent
and not letting ppl submit bad stuff !
in lyra for example it validates that you have all your dependencies in the same changelist (so you don't push half of the stuff for example)... we use it to validate for some old issues in all the maps, naming consistency etc.
Either way: Project Settings -> Editor -> Revision Control -> Enable Validation Tag
yep found it, thanks !
ooh ok, UObject validate funcs or something i assume
or no, something you add specifically for version control?
iirc yes that,, but also you can do UEditorValidatorBase
it isn't tied to VCS in any way
yesn't
yea nvm as klukule said
epic just has the feature since they use it in conjunction with submit tool
- they have perforce triggers to reject changelists without such tags etc.
I heard about submit tool but never tried it myself, would you say it might be worth taking a look at ?
in larger teams yes, especially if you have good CI
we mostly use SubmitTool as a unified place for every local test ("does it compile locally in non-unity?" "are all the assets valid?" "are the jsons valid" etc...) but we also use it to start preflights in horde, which is prety much simplified version of our usual CI job
that way we catch most of the potential issues before they are even pushed
hm yeah sounds reasonable
and what slips through this we then catch in our regular CI which runs on every change (i.e. build an editor and game, and cook a game for all our target platforms)
this CI pipeline usuaally takes about 10 minutes per changelist since we heavily utilize UBA caching and incremental cooking
Do you also use the Cloud DDC ?
yes, but in this case it doesn't play a big role
I was thinking of implementing it as a few team members of mine have a horribly bad CPU and it hurts watching them wait for hours just for a few shaders...
here we mostly utilize UBA cache for code compilation and incremental cooking which uses local zen - in our case... although at epic they instead disable per-buildmachine zen and have one shared zen for their whole cluster - saves disk space and also allows for better sharing
yeah, it does help with day to day development workflow indeed
this is our "Cook" CI job
hm hm i see
and this is our Code compile job (for now they're separate thing, but I'm working on unifying them)
funnily enough staging for UGS takes the longest
since it includes stripping all the PDBs etc..
Do you run all that locally or do you have a server set up ?
well yesn't 😄
it's a bunch of dedicated servers... but they're locally hosted in my office
so it's locally, but not my workstation
ah yeah got it
gottaq check why compute03 died 10 minutes ago though
hmm hmm, would you know a good provider for setting up a cloud ddc server by any chance?
we host it locally in my office, since I've got 10gbps symmetric fiber to my home office
lol I wish to just have 1/100 of that..
but I'd say any provider where you get good connection...
easiest would be AWS, but also kinda expensive since it's obviously a lot of data
as a small team of 6 we're talking about 4-5 TB of egress monthly
yeah no that sounds like AWS will drain my wallet
although our project has raw asset size of about 150GB
so quite a large project, with ton of textures, materials etc.
our cloudddc storage stats
about 3.1 million objects and about 85 gigs of storage
what region are you at?
since if you're in Europe there are quite cheap providers which could be easy to set up
yes Europe
if you're in US it's worse/more expensive but still doable
ok then... Aucion server or a VPS at hetzner would be your choice... or same at OVH
they provide unlimited egress, usually limited to 1gbps... but just slap a linux machine there, install cloud ddc (and optionally add minio for self-hosted object storage and done)
just don't deploy mongo as a backend for cloud ddc and instead go with scylla
mongo doesn't scale well about 500k to 1m objects
which you can reach quite easily
services:
scylla:
image: scylladb/scylla:6.1.5
restart: unless-stopped
command: --smp=1 --developer-mode 1
volumes:
- scylla-volume-1:/var/lib/scylla
ports:
- "10.0.10.5:9042:9042"
unreal_cloud_ddc:
image: registry.{REDACTED}/unreal-cloud-ddc:5.6.0-16260
restart: unless-stopped
ports:
- "10.0.10.5:57001:57001"
- "10.0.10.5:57002:57002"
- "10.0.10.5:57003:57003"
- "10.0.10.5:57004:57004"
- "10.0.10.5:57005:57005"
- "10.0.10.5:57006:57006"
configs:
- source: cloud_ddc_config
target: /app/appsettings.Production.json
environment:
- "CORECLR_ENABLE_PROFILING=0"
volumes:
- ./storage:/data/blob-store
- ./dataprotection:/root/.aspnet/DataProtection-Keys
depends_on:
- scylla
configs:
cloud_ddc_config:
file: ./config/appsettings.Production.json
volumes:
scylla-volume-1:
If you want this is simple docker compose we used to use before we switched to k8s cluster
oh nice thanks
depends on team size, if you're sub 10 people then pretty much anything (especially if you grab a auction dedicated server from hetzner) will be enough
hetzner auction servers are about 30-40 euro a month with VAT and are usually like 8 core ryzens or something like that
so plenty powerful
but it's hard for me to give you real specs, since we have a cluster of 3 of these servers at my office where we run everything (horde, perforce, buildagents, uba caches, cloud ddc etc... etc...)
hm yes got that, but I guess I dont need an entire dedicated server for that, or do it?
for just cloud ddc i mean
you don't, but it's better bank for the buck
since you can easily host more supporting services on there if necessary
lol I cant run a cloud ddc server on an rpi do i
you can try, I'm not sure how it would do under load though
although the faster connection you have the better
I recently got quite a powerful one
which if you said your internet isn't the greatest would be... beneficial for the other party
yeah right
ahg damnit
ill just drop my rpi next to your office and plug it into your lan and hope no-one will notice

but yeah, honestly you can grab some VPS from hetzner - those can be quite cheap (like 8-10 bucks) and you'll see how well it does or doesn't work
and based on that you can scale up and down
yeah makes sense
I have previously been using Strato to host my p4 server if that says anything to you
not really
well actually I still currently am using it
This is the pricing for Hetzner's VPS in germany, they all include 20 TB traffic for no extra cost, so it should be plenty for you
although if your provider can provide something cheaper it might be better to go with them instead, at least for trial deployment etc.
well for instance Strato offers a V-Server with around 2vCores and 120GB storage for 4€/month
unlimited traffic tho
but "sadly" online limited to 1GB/s
as I could even get that much..
{
"Serilog": {
"Using": [ "Serilog.Sinks.Console" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "Console"
}
],
"Enrich": [ "FromLogContext" ]
},
"Mongo": {
"ConnectionString": "mongodb://10.0.2.1:27017",
"RequireTls12": true
},
"Scylla": {
"ConnectionString": "Contact Points=10.0.10.5;Default Keyspace=jupiter",
"LocalDatacenterName": "datacenter1",
"LocalKeyspaceSuffix": "local",
"MaxRequestsPerConnection":16384
},
"UnrealCloudDDC": {
"LeaderElectionImplementation": "Static",
"ReferencesDbImplementation": "Scylla", //"Mongo",
"ContentIdStoreImplementation": "Scylla", //"Mongo",
"BlobIndexImplementation": "Scylla", //"Mongo",
"StorageImplementations": [
"Filesystem",
// "S3" - Commented out for you, for now just use Filesystem storage instead
]
},
/*"S3": {
"ConnectionString": "https://storage.{{REDACTED}}",
"ForceAWSPathStyle":true,
"BucketName": "jupiter",
"SetBucketPolicies": false
},
"AWSCredentials":{
"AwsAccessKey": "{{REDACTED}}",
"AwsSecretKey": "{{REDACTED}}"
},*/
"Filesystem": {
"RootDir": "/data/blob-store"
},
"Replication": {
"StateRoot": "$(ExecutableLocation)/ganymede",
"ReplicationPollFrequencySeconds": 15,
"CurrentSite": "local-test",
"Enabled": false
},
"Jupiter": {
"CurrentSite": "local",
"PublicApiPorts": [ 57001, 57002 ],
"CorpApiPorts": [ 57003, 57004 ],
"InternalApiPorts": [ 57005, 57006 ]
},
"Auth": {
"Enabled": false, // Disabled for you - just try without auth for now, afterwards use ServiceAccounts or ideally OIDC
"DefaultScheme": "Bearer",
"Schemes": {
"Bearer": {
"Implementation": "JWTBearer",
"JwtAudience": "api://unreal",
"JwtAuthority": "https://{{REDACTED}}"
}
}
},
"Namespaces": {
"Policies": {
"{{REDACTED}}.sddc": { // Give this a name, by default UE5 goes for `ue.ddc` iirc
"Acls": [
{
"Claims": [ "*" ],
"Actions": [
"ReadObject",
"WriteObject"
]
}
]
}
}
},
"AllowedHosts": "*",
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://0.0.0.0:57001"
},
"Http2": {
"Url": "http://0.0.0.0:57002",
"Protocols": "Http2"
},
"CorpHttp": {
"Url": "http://0.0.0.0:57003"
},
"CorpHttp2": {
"Url": "http://0.0.0.0:57004",
"Protocols": "Http2"
},
"InternalHttp": {
"Url": "http://0.0.0.0:57005"
},
"InternalHttp2": {
"Url": "http://0.0.0.0:57006",
"Protocols": "Http2"
}
}
}
}
Here is slightly commented and stripped down configuration file for jupiter... I've quickly thrown it together to work with the docker compose I sent before... and configured it so you won't need to set up S3/object storage
oh great !
read the comments, apply changes as necessary etc.
yea thats for sure
very nice thank you
Hm not sure if I understood the relationship between a Zen server and a Cloud DDC.
Zen seems to be able to manage multiple things and Cloud DDC is also one of them ?
zen and cloud ddc formally share the same role
zen is used locally and on LAN (shared zen)
meanwhile Cloud DDC is used on WAN
So I dont necessarily need to setup a Zen server just for having Cloud DDC
but also there are differences since Zen can be used for oplogs and as alternative streaming source for on-target deployments (consoles, phone etc.) meanwhile cloud ddc can also be used as a storage for horde artifacts (compiled game binaries etc.)
no, they are separate layers
you don't have to have local or shared zen
although I generally recommend local zen any day over loose ddc files (the old way of doing things)
it's much more performant... and it's also default since UE 5
yeah I noticed on 5.6 they launch a local zen server for you by default
[DerivedDataBackendGraph]
MinimumDaysToKeepFile=30
Root=(Type=AsyncPut, Inner=Hierarchy)
Hierarchy=(Type=Hierarchical, Inner=Pak, Inner=ZenLocal, Inner=ZenShared
ZenShared=(Type=Zen, ServerID=Shared)
ZenLocal=(Type=Zen, ServerID=Local)
my defaultengine is like this
i have a question,
i set it to firstly seek local zen to ddc, wonder what if there is no ddc at local zen
is it going to compile for ddc or it tries to seek remote zen?
i want it firstly seek local zen , if local dosent have ddc, then seek remote zen, if remote doset have cache neither, then start shader compiling
If the given ddc is mot running, isn’t available or doesn’t have the file it goes to the next level up the chain… and if no level has the file it goes and compiles the data
So I got a linux machine running, do you have any recommendations on how to start installing cloud ddc on it?
I havent done that before so its new field for me
I don't have any other instructions other than what I've provided, you'll have to build the docker image, push it somewhere and use the data I already provided, not much else there to do
although you could manually build and deploy .net application itself, but that's more complex... and official examples give examples for running inside kubernetes since that's kidn the expected usecase
alright got that, just wanted to make sure
lol this is a dumb question but do I need to fill anything in the {REDACTED} in the unreal cloud ddc image url?
obviously, we have customized version hosted on our internal registry, so I can't provide you with URL 🙂
well afaik there is no valid registry that I can just grab like that, or am I mistaken ?
you have to build it yourself using the files provided in the Engine/Source/Programs/UnrealCloudDDC
easiest way would be to use the provided buildgraph image
although 1.2.0 is also available here https://github.com/orgs/epicgames/packages/container/package/unreal-cloud-ddc from epic
although it's like 11 months old, and I don't remember if there were any new versions since
(pretty sure there were changes etc. but not sure if new numbered release got... released)
hm got it
how would one make use of the already released version tho?
Not sure if just linking it in my docker-compose is correct
well as you can guess Im pretty dumb unexperienced in docker, sorry about some very poor questions of mine
Is there anyone here that have an experience with Perforce Swarm?
Specifically using the AWS marketplace Swarm product they have there?
I'm configuring the instance and after submit is always says failed "rollback".
Swarm is swarm regardless of how/where you deploy it.. it’s highly likely that perforce can’t communicate with swarm and that’s why it fails… because by default swarm shouldn’t contain any rules that would reject anything…. Can you send whole error please?
https://aws.amazon.com/marketplace/pp/prodview-pu5rt4c67zp7o
Well I tried using this product, launched the configuration etc..
Then it created a new EC2 instance and a new stack.
In the new stack it said IN_PROGRESS then after few seconds it failed and said rollback.
No informative error was given.
I'm thinking maybe this product is deprecated or something
P4 Code Review (formerly Helix Swarm) is a web-based code review tool that connects to your Perforce P4 server.
ah, so it's an issue during deployment... well, swarm isn't deprecated, so it seems like there's an issue with the cluster deployment for AWS itself, so I can't help there sadly
Hey everyone. We are using Perforce for a while with Helix Core Cloud. Does Perforce have Pull Request feature where we could do code reviews similar to Git?
perforce doesn't really have a pull request directly, but it has shelves which can be used for code-reviews in combination with helix swarm (free tool)
P4 Code Review is a web-based code review tool integrated with P4. Built to streamline code review and collaboration, P4 Code Review’s intuitive interface enables teams to deliver high quality code faster.
instead of directly submitting, you'd make swarm review (a pre-commit review) which would make new shelved change and open a code-review, once the code-review (once aproved) it will be pushed
Thanks, this is very helpful.
Remember, all shelfs are uploaded, so you can get the shelf in your machine if you need to do a review and don't want to burn your eyes with the swarm website 👀
When I open unreal it sometimes updates revision control status of assets, which takes like 1-2 minutes. that's obviously once again terrible. i can disable revision control in the project, is there any other way to not have unreal do that?
Sounds unusual. That said I have a habit of syncing via p4v before opening unreal.
Make sure the person that manages your perforce server does proper journal rotations periodically… since unless your internet is terrible fstat command should be instantaneous…
Unless the journal (perforces metadata database) has not been rotated and is large…
For context: Rotating it doesn’t loose any data, just splits the files and does some b-tree rebalancing etc… speeding up the lookup
Perforce support is so goated man
I'm trying to get P4 Helix Core to run within TrueNAS Scale, and asked them for help, they are assigning me a guy to figure it out even though even they have no clue where to even start lmfao
has anyone else tried to do it this way?
honestly, not many people in production would deploy perforce server on something like TrueNAS since in general you deploy on fully standalone server... but since truenas scale is based on debian, the installation process should be as easy as opening ssh terminal, adding public keys, and installing perforce packages using apt, no need for support from perforce
but it's nice to see that they're willing to help out
Is there any guide available regarding setting up a regional Perforce server?
we have 2 teams located in different region and for one team, the transfer speed is not good.
Are there any Strings attached to using regional servers?
I have a pretty standard question about perforce I think, but I'm new to it (I used git and svn before).
For Blueprints and assets in the engine, it works great. But when I'm modifying C++ files, Visual Studio warns me that they are read-only (not checked-out). So I use the "overwrite" button, which allows me to modify them, but it doesn't check them out in Perforce.
Am I supposed to check out each file manually or is there an automated system/option that I'm not aware of ?
Or just disable locking for source files, as they can be merged ?
IDE must be set up for version control for autocheckout.
Since p4v makes it easy to force a checkout, we do not disable locking explicitly.
Oh great, I'll look into that. Because VS always mentions Git by default, I didn't even check it for other systems... ^^'
Thanks
P4VS is probably still relevant (I haven't used VS for a few years)
I just installed P4EditVS, seems to be working fine 🙂
With perforce its kinda complicated because writes pretty much always have to go to master (even if it goes through other servers suchar proxies, edge servers etc)
Easiest solution is to deploy p4proxy which is as the name suggests works as a caching proxy… it can speed up syncs when files are cached (or it can generally speed things up because DC to DC connection has generally better peering than home/office connection etc)
If you need something more complex… it will get more complicated and no one solution works for all
For visual studio you indeed need P4VS - unless you do your checkouts in P4/P4V… other IDEs like Rider have p4 support built in
Thanks For the suggestions
made a little py bot to post from our perforce to discord and ping FYI's etc
works really well
reads all the submit tool tags
and gives info
neat... I just use our horde discord integration for most of the notifications... and for FYI and other things, we just shoot out an email since I was too lazy to do user x discord lookup in the perforce trigger
yeah
Something really strange is happening with my Perforce server and I'm not able to find how to resolve it. No matter the client (p4, p4v, horde agent) if a command is tried in parallel the operation gets stuck, if not, gets through.
This has happened to me without changing any configuration. I'm the sole user of the server and have it running on an LXC.
Has anyone experienced something similar?
If net.parallel.max is > 0 the server hangs
Parallel submits from CLI (and P4V) are visually wonky where they’ll seem to get stuck at 100% since that’s where the sync actually happens (0-100% is just the process of queuing the files) so it could be that… check your upload/download speeds… if the issue is not there then its hard to say without taking deeper look into server logs etc.
I'll take a look because that sudden issue is driving me nuts. Without parallelism at least works, so at least it does not block me. Thanks!
I stumbled over the SubmitTool quite a few times now, I am not really sure what it is and what to use it for, however it seems really useful.
As it is kinda hard to find information online i was wondering if anyone here knows more about it ?
Well… to put simply… submit tool is alternative way of submitting things… it’s useful for larger teams that have CI pipelines established or are using asset virtualization etc. since submit tool simplifies those workflows… unless you have either of those it’s not really worth setting up for you.
Main benefit is that it can interact with horde for doing preflights, run local content validation and code compilation before submitting to perforce… or virtualizing the assets to avoid pushing hydrated files directly in tree
hm got that, thanks.
Seems indeed a bit overkill for me
I was trying to setup a docker image with the data you provided , just yesterday, which somehow worked fine.
I got 2 containers running with those images ghcr.io/epicgames/unreal-cloud-ddc:latest & scylladb/scylla:6.1.5.
However I couldnt get any further than that, health checks returned 404, not even starting to talk about connecting to the server from the editor...
I feel like I definitely missed an important step, sadly
Check the output logs for the unreal-cloud-ddc container it might point you in the right direction
how would you manage a plugin across multiple versions.
usually you only have a V1 of a plugin and you make a new branch for each UE version and do a few fixes.
be here im talking about maintaining over time a plugin across multiple versions
meaning that each branches might have some various changes due to breaking changes, while you add more features
there's no one way to do this, at epic they use RoboMerge to keep different branches in sync using some pre-defined rules for branching and merging (i.e. fortnite mainline and ue5-mainline are fully in sync, just obviously fortnite part isn't public) and this includes plugins... other alternative approaches I've seen is to create separate depot/stream for the plugin and then import it in all of your projects/branches and keep all the functionality synced there... and version differences would usually be handled by bunch of #if statements tied to unreal versions. And one last way I've seen it (pretty much the same as previous) is to keep the plugin fully separate and periodically promote changes back to the plugin - or the other way round - usually done when your main product is the plugin and it's got mainline that's often unstable, so you'd only merge stable versions into the game projects etc.
thanks for the insights, i forgot to mention that i was more asking about the plugin side (no game projects included)
and im using git
well then... I'd say go with trunk based development, so you have your mainline where you do your things and then make branches for releases and merge back and forth
so pretty much main is your latest and greatest where you do most of the development (or if you like, temporary feature/task branches that get merged back to main)
and then releases are usually snapshots... if there are some fixes in release, you can merge or recreate those in mainline and vice-versa
p4 added parallel reconcile, huge speed boost for custom engine depots. today i'll find out
Added support for parallel reconcile, along with the ability for the reconcile
command to detect moved files. A new user preference has been added under Edit >
Preferences > Performance for parallel reconciliation, and a separate user
preference has been added under Edit > Preferences > Behavior to control the
detection of moved files. This feature requires P4 Server version 2025.1 or
newer.```
Can anyone that uses git and gitlfs submodules for game feature content suggest a stable workflow?
My game makes heavy use of plugins and game features, where the plugins provide nearly all systems and implementations and game features provide all content and data, and the game runtime module only kicks off the bootstrapping done by the plugins.
I want the the game features in gitlfs submodules to keep the main repo light but I can't seem to find a workflow that doesn't blow up. The only way I've found to so far keeps ending up with the submodules in a head detached state
Using Rider 2025.1.4, current UE5.6, current git and github + github desktop.
I'm also a git noob so I'm sure I'm just not doing something right here
I don't know a lot about git, but do a lot with perforce streams and game features.
Game features are plugins that are dependent on the game project, so they should be in the same repo as the main game.
Regular plugins, those that the game is dependent on, can be organized separately to be more easily shared.
There's no reason to separate the game features from the only project they can work with.
My game features only have a single dependency on one plugin, not the game module itself. The reason to separate them from the main repo is to prevent massive bloat from the assets in binary format
Theres no reason why a game feature shouldn't be able to be in its own submodule
I believe Game features have an assumed dependency on the game project in the engine. You may even be able to include from the project without it being in the build.cs of the feature.
They're expected to be a swappable part of a specific game. Not something applied to multiple games. Those are just plugins.
I'm not sure what bloat you're talking about either. But again, I'm a p4 guy and the server load from assets is the same regardless of how they're organized into streams (the closest thing that I've come to associate with the description of submodules).
By bloat I mean that every time you modify an asset that has binary format, it doesn't just store the diff like text, it stores a whole ass new copy of the asset so if you have a lot of content, you storage will balloon to hundreds of gigs pretty quick
a submodule is just a git repo that gets linked into another repo
like as a subdirectory but its commits are separate
I don't know P4 at all but sounds like thats what streams are that you mentioned maybe
No, I get the versioning cost but it's getting paid for somewhere.
If the game repo is 1 GB and the submodule repo is 2GB's, that's 3 GB's of versioned data.
The exact same revision history would be the same size if the submodule was directly part of the game repo.
It doesn't save any space, just organizes it differently. Unless of course you're using a submodule from someone else and they're paying the cost for that storage instead of you. But those wouldn't be game feature plugins.
the reason to use a submodule is so I can just rebase the submodules to prune out old versions and keep storage low. The only reason really
But that doesn't matter. If you push a commit with 1 file, only it gets versioned. You don't add one revision to every file in the repo
doing that in a main repo is possible but a serious pain in the ass
witha submodule I can just do the entire content repo(s) all at once
If that makes more sense for git I can't argue with that.
I'll only end with that, based on how I've seen other people talk about git submodules, I think it sends the wrong message about the intent of the contents of the repo. As a submodule, the intent seems to be that this is linkable to any other (unreal) repo and can be used by that project. And game features aren't intended to be used like that. If this is a solo project and always will be, it probably doesn't matter too much.
game features aren't tied to a game module at all. You can reuse them across projects like any other plugin
I won't be personally. The purpose for me is hot swapping and live updates
and are entirely content and data only, no logic. Theres a single plugin that defines common types used by the core plugins and the features, basically data contracts so the plugins know how to consume the content provided, so I do have a dependency in my case to a plugin
technically I could share it across projects, the other projects would just need to use that plugin as well
If they're not tied to a game, they're just a plugin. not a game feature.
You can't just take a lyra game feature and put it into any game. That's madness.
If you don't believe that, good luck because I'm pretty sure the engine assumes that and you may run into problems.
game features are just a plugin really and aren't forced to be tied to a specific game unless you design it in a way that causes it
in fact they are not allowed to have a dependency on a game module, only other plugins
I'm just not well versed with using git with submodules in this way lol so hopeing someone here would have advice on their own workflow for using them
If submodules would work for normal plugin workflows (which is usually what I see people recommend when it comes up) it'd work for game features since (as you say) they are just plugins (even if I think it's madness 😉 )
I know, I'm just not setting them up right somehow
oh I see what's happening. I didn't mess up, I just didn't know how git handles those submodules (or rather how rider doesn't). You have to update the pinned version of the submodule manually in the main repo every time the submodule changes from what I'm reading.
So got a question let's say you have various games your working on, would you have a workspace for each of them tied to the same user so me
Or would you have one workspace which has the different streaming depots inside ?
Workspace can be tied to only a single stream at once. You can map multiple streams into one another though… but there is no one “right” way to do that as it depends on many factors like: engine versions used, studio workflow etc….
I personally have multiple workspaces since I have the space.. but on my work laptop where I don’t I just have one workspace and simply switch what stream is the workspace bound to
I would always suggest separate workspaces for each project and only swapping the workspace stream to switch between the project specific streams.
However at home I have all my projects in one stream, so ... and at work all our R&D sandboxes are in one stream for simplicity.
yeah i ended up making a seperate workspace for this new project
Anyone know whats going on with my Rider and perforce
so previously when I would open a file it would be greyed out and then if I go to alter it rider would prompt me before I can actual alter the file at which point if I confirm it'll look light it does there so less grey and more like a normal file looks like
Hello, is there a way for Perforce to recognize UAsset moves instead of just "delete/add"? I've tried p4 revert -k + p4 reconcile, but it still doesn't work.
it should be storing them as moves naturally
did you actually submit it or are you just looking at the changelist, because i don't think it tries to connect the two ops into a move until it's pushed server side
oh one gotcha to this is redirectors
if you move an in-use asset and don't fixup redirectors then it will probably just be a new file add and the old one will be (heavily) modified
I haven't submitted it yet; I fixed the redirectors in UEditor.
another obvious gotcha is if you edit a bunch of the asset during the move... there should be some magic number threshold where if the binary file has the same name and is like 98% the same data it will connect it as a move, something weird like that
Thank you! I'll take another look after I submit it, I just moved some files and fixed the redirector.
yeah i hope i'm not talking out of my rear, i haven't paid attention to this stuff in ages but i'm kind of confident it should do this
I’ve submitted it, but unfortunately the move operation didn’t get recognized.

bleh, editor probably is still hard coded for 10 years to set up explicit add + delete... and you can't move/rename using P4 standalone because that will break all references
i'm probably dreaming of some old memories back using unity or something and having this actually work, sorry
when you move uasset it cannot get marked as move since the file itself changes because uasset metadata contains paths and other things that get updated during the move... and move (add + delete pair) is only if the file is exactly the same
yeah, guess i must be wrong. swore P4D had some fuzzy detection to handle this but after a few minutes googling and finding nothing i'm not going to continue my witchhunt
hey, anyone else that setup P4 on a dedicated laptop have issues with it randomly dropping connection and needing to restart the laptop in order to get the connection back up?
running windows or linux?
if it's windows then switch to linux, windows is notoriously bad for anything networking related and things tend to break on windows unless you're running windows server
@arctic hornet ah that just confirms what I was suspecting, I was on Win11 Home and from what little I could find it seems that it simply cant handle many connections at once, so installed Ubuntu Server last night
oh hey, fancy seeing you here @frank silo lol. You were right, eventually I was gonna need to set up perforce lmaoooo
Quick question, as a matter of practicality: As I understand it, the way most professional studios seem to set up p4 is to have one repo for their editor code-base and then separate repos for each game, is that right? Is there any special setup involved in this? Been making a few prototypes for educational purposes and want to start including a friend in reviewing my code and working with me but I wanna set it up "correct"-ish
I've never been anywhere that's done it that way. Read the pin. You can have a depot for prestine UE5, but ultimately, you copy/merge it to the project depot
man you'd think a single google search or documentation flip would have found me that page - thanks @pulsar parcel - I'll be reading through that. Turns out you're right and I took for granted a lot of the setup behind the scenes that comes with access privileges and the like being more or less invisible to me that made simple things like feel like they were more complicated than they were. Appreciate the link.
I'm having a tough time with Perforce SDP. It's putting all of my depot files on /hxmetadata. Do we have any gurus here that know what I'm doing wrong? It's a brand new Ubuntu 24.04 VM. I followed the docs exactly.
what exactly are you trying to achieve?
Is there a way for me to undo all changes on a child stream in Perforce and just have it sync back to the same state as the parent stream?
well, you could remove the stream and re-populate it again
or, obliterate everything in that stream and integrate again
or, you could go and manually revert all the changes made in that branch back to initial populate - that would keep the history, other two methods would wipe the history pretty much
Obliterating might be the way to go for me
I say, though I probably don't have the perms for it
if you just need to revert bunch of changes you can do it by normal revert, you don't need any special permissions for that, since revert just overwrites the changes with new revision that is equal to the old one
or to be more precise it's "Undo" since revert is for currently opened files
https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/p4_undo.html here's relevant documentation for the command
you can undo specific change, undo things to specific revision or by dates etc.
Wish it would tell me what's open... All my CLs on each workspace are shelved.
you could try in commandline since CLI sometimes provides more information than P4V
Looks like it's picking up all the robomerge CLs as well unfortunately. Might just have to wait until the team who handle this comes back
yeah, it would revert everything all the way to initial populate, which I thought you wanted... but yeah, at this point it might be easiest to just recrete the stream which as you've said, might be better to leave for your devops or vcs team
Do someone know UET for hello neighbor 2 and files to UET? Because I need help plisss.
So, for all the people here using github with their teams
How do you stop everyone from just defaulting to using branches all the time?
I have not had any benefit to using them on git, and they are an absolute nightmare to properly bring into develop
yell
Is it a bad idea to host a perforce server on a home network? Im whitelisting my friend with my firewall but most of the configurables are default
Nothing wrong with homelabbing, but if this a serious project then make sure you have an adequate and tested offsite backup solution
Anyone ever had it where a power cut happens and well helix core simply refuses to start the core service completely??
No but it would be a good time to look at buying a UPS
Yeah they just cost too much ups
More then what my wage can support
thats what I get when I try manually start the Helix Core server
found the issue it's looking there for the exe
but due to the power cut some how one of the drives has changed from U to I so that path its looking it doesn't exist
sorted it had to change drive letter back to what it was before
This seems like the jankiest setup. I would guess it's a removable drive if it changed letter
So its a USB hub which can have either ssds or hdd in, when the power cut happened the pc must of thought it was a new drive and gave it a new letter
Turns out drive letter can just be changed though so all fine in the end
what do you think about potential security issues? Should I be using ssl
Over internet (WAN) its generally good practice to use ssl, if however you’re using it only on lan or through vpn/tailscale etc. then it’s not mandatory
Ok I used p4 -Gc and it was easy to setup
I also copied the security configurables from the perforce website. I'm feeling pretty safe and secure
Hello, how can I find and fix all files with incorrect read/write permissions(files that should be read-only but are read/write or vice versa) in Perforce?
A force-sync on the workspace should resolve all those sorts of thing.
Depending on why they're read/write, a reconcile off-line work may also find them, check them out and you can revert them. But if the file is read/write and not modified the reconcile won't identify it (I don't think).
Would it be possible to locate them so that I don’t have to sync all the files? Would I need to write a dedicated script for that?
Yeah, you might. I don't know of a built in option for that.
Or you could look at the workspace files yourself, P4 tints the icon when it's in that state. But I get that's not entirely practical (especially depending on the workspace size)
I finally came back to this and after spending a few hours working on it, I have a stable workflow for using git for the main game repo and using git lfs for the game features as submodules of the main repo.
I'm a git noob scrub so this might not be new to anyone else but post-commit hooks are a fucking godsend
the initial first-time setup takes a little bit but once its setup, its super easy. I made a script that checks for any changes in the submodules and pushes them to their repo and then automatically updates the pinned submodule version in the main repo to the latest commits of them. Then I made a post-commit hook that executes the script after every commit. So I can work on both directly in my game project but git-wise the game feature plugins are in their own repos so I can prune out old version to keep bloating down (since literally ALL my content is in the game features)
feeling accomplished lol I've earned a late night coffee
Hey there, does anyone knows if there is any free cloud server to storage a perforce repos?
Hello. I'm having an issue with Unreal BP Merge. It can't see the Newer commit i'm merging. It suggest that merge file is actually an older version of the file. (TortoiseGit can see it properly)
Is it just me or when you press a key and it produces an error, so it switches to rider, the key is input into the file and then afterwards it asks you if you want to make it editable.
So you need to make it editable otherwise you can't remove the character, that should have not been in the file in the first place.
I do get that, its been very weird for me.
Sometimes it prevents input (ask for writing)
Other times, I can remove it without issue.
Yet, in either case no source control edit is made/ queued
Are you sure the character is in there? Can it be just a visual artefact that will go away once you refresh?
100% in there, first time this happened to me was on a engine file and the whole engine did not compile anymore.
it drives me nucking futssssssss when i'm holding W to walk into a trigger, and breakpoint on a delegate, and my code file gets wwwww in it that i have to undo almost every time
for engine code specifically might help if you have rider's extra "do not allow editing of engine code" setting turned on, but they only added it about a year ago if you're on an old grandfathered license
but it sounds like you're experiencing something else
Yea this happens to me, but I also have Rider hooked to perforce, so if you want to edit a file, you have to Check Out the file, so you can edit it.
But somehow there is a bug, that when the breakpoint hits, it allows one w to be written to the file.
Meaning in the file there is a w in there but you can't remove it because you need to check it out and you need to do that, because otherwise you have a file with a error 😅
kek. only difference is i have it set to auto check out files
It's really annoying though.
git is so easy
So I'm working on trying to figure out how to set up Unreal Game Sync.
I got a source build set up from git and a brand new perforce server (setup the typemap and a stream depot/stream already)
I'm confused about what engine files should be put into perforce. Like for a project you only need the .uprojectfile, content and config.
Everything you get from git + what you get from running Setup.bat.
That should all go into perforce.
Then you can run GenerateProjectFiles and start building things.
oh? so I shouldn't run generateprojectfiles before uploading?
No. That creates binaries and other intermediates that shouldn't be in source control.
ahhh okay yeah that makes sense. what about the .p4ignore file? should that just be the example one epic has? or would I not use it at all for the engine source
As far as I know the example one is fine. Ours might just be the gitignore renamed. I'm not 100% sure
lol okay. thanks for the help!
Files being only writable when checked out, is this a workspace setting or managed by the p4 admin?
I'd classify it as p4 admin since it's based on the typemap. Not anything from the workspace.
Interestingly my other collegues have the files read-only....
only the one who checks them out has them writable, otherwise they're read only... but there's also workspace setting called "allwrite" which will not lock workspace files and thus have everything writable after syncing and this configurable is a per-workspace setting and user can change it on their own
otherwise as Raimus said, generally what file extentions have +l flag is usually goverened by the typemap... or can be set/unset per-file manually using the "Change type" option in p4v, or respective CLI commands
allwrite
this was it! I don't remember ever touching this before. I wonder if the typemap does it if the user has allwrite on
allwrite is a curse
It definetly taught me a lesson today!
yeah never use that goddamn cursed option. if you are getting issues with read only then make sure the relevant files are +w in the typemap
any ideas on where to get cheap high density storage? I'd host a private server (I've plenty of spare old hardware), but the upload of my network is much to slow to be moving large files to collaborators with. So it really needs to be a cloud solution.
I'd need the source control software to be open source or otherwise unlimited in the number of collaborators I can have, + a custom LFS solution so I can host all the actual files elsewhere.
I've heard Blackblaze is good, the prices look decent too. However, I'm not very well aquainted with version control software, so please do help me understand my options, and the difficulty of deployment. As a student, my budget is tight, so please nothing expensive like Perforce.
A) what is considered cheap for you and B) perforce is free for up to 5 users 😉
But your requirements don’t really line up with “cheap” imo… in general just find whatever cloud host that’s within your budget, slap git on it and all it a day, there’s not really any other way especially if you need “unlimited collaborators” - since with you pay ton of money to SaaS (Assembla, Diversion etc.) or you pay for licensing (Plastic, Perforce) or as stuck with free tier (Plastic iirc up to 5 users and only for 5 days for whatever reason… and perforce for up to 5 users and/or 20 workspaces)…. Or git… which is free and you can use stuff like gitea, gitlab, azure devops … or heck… even GitHub lol
I heard DevOps is only 5 users, but otherwise gets quite generous. Github I think you have to pay for to get corporate access control? But overtime unlimited private repos and collabs for them?
is the release branch the same as 5.6.0-release tag?
release points to latest release
tag points to specific release
but they can be same commit
what is the cmd for specific tag! i tried to write the tag name and it said it doesnt exist!
oh i used tag name as branch name 5.6.0-release
the 5.6 and dev are different from the the tag release though!
afaik dev-5.6 branch contains commits for 5.6.1, 5.6 branch has commits of 5.6 release
after couple failed attempts at --branch refs/tags/5.6.0-release and --branch 5.6.0-release it stopped saying that the branch doesnt exist
idk why but atleast it finally works
Hi guys!
We want to use Perforce for our project in Unreal Engine. About 10 programmers plus some artists are going to work on it. What is your experience with streams? Do you use them in projects? I heard that it might be useless since the file lock system doesn't work between them. What is your take on that?
you cloning or switching branch?
I was cloning
We absolutely use them, but not for feature work (which is the case where the file locking becomes a problem).
We have a stream for the Engine Source (which you of course wouldn't need if you're using an installed build), external plugins, internally developed plugins and then the game project itself.
The game project imports each of the other streams (as non-writable in the case of engine source and external plugins).
(each of those stream descriptions actually represent a collection of related streams used for staging engine updates or forking releases. you can search my posts in this channel and find the image I've previously posted of the full tree of streams)
Ok, that clarifies a lot. Thank you for your answer!
Unreal does partially support locking or at least status across streams but last I checked (years ago) it's not easy to use, you basically could only hard code stream names in c++ for it to check in editor and it'll just tell you if an asset is checked out in the other stream (I always meant to see if I could expose this to project settings but never had a need yet)
Basically if you REAAALLY want to do the sketchy thing, know it might exist
Naaah I dont want to. I just wanted to ask how it should be done or at least how others work with Perforce. 😄
Hello! So I am using a github repository linked with my unreal project. But I want to also work on this project with someone else. They already have access to my private repository but I dont know they are supposed to get the game files and then connect it on there side using the revision control option? Anyone know how?
Simply checkout the project either from github page or using the url in a git client / commandline. Be sure that you have ignore setup correctly : intermediate and binaries etc should not be versioned.
Please someone fix the git plugin for unreal engine 5.6, it corrupts the index file and obj file of git at random times even in empty projects
Hi, stupid question (may be). in 5.6 unsing Perforce where is the submit content option
AFAIK it got deprecated in favor of “view changes” which is more flexible… although don’t really quote me on that
Hey, I'm trying to set up local source control through P4D, P4V, and UGS. Hoping this is a simple mistake, has anyone run into this issue before when trying to open a Perforce Workspace?
I could only find a single post about it online and I'm having difficulty with the suggestions left there (there doesn't seem to be an \Engine\ folder accessible from my project workspace, and I can't find the .cs file from the second solution), if either even worked for OP.
What does your directory structure look like for your project on your hard drive?
(Screenshot 1) This is a fresh UE project, so nothing special under the hood.
Admittedly I had originally set up the project in E:\Unreal Projects\DeckParty (Screenshot 2) so perhaps something about that location split caused an issue there.
It doesn't look like you're using a Source Engine build with a native folder structure. Both of those things are required in order to use UGS.
Yeah, I was trying to figure out why I didn't have that Engine folder. Had missed that it needed a Source Engine build specifically for UGS to work. That clears up where I'd taken a wrong turn, thanks Ramius.
Does anyone know if there's a way to make the UGS sync filter have a default for new people? I think right now it ticks everything by default?
the SyncCategory can have Enable=false in it
Hi, I'm trying to modify the repo for an Unreal project that I've joined.
We have both our game project and a modified version of UE5.4 in the repo.
We're using Plastic/Unity VCS and there are a lot of files in the repo that should not be there, such as Binaries and Intermediate files, both for engine and game project.
This has been sort of managed by using the "hidden" files list to avoid all the auto generated files from overflowing pending changes.
Ideally I would love to clean these files out of the repo completely, but I can settle for a solution where I simply delete the files after first creating a more comprehensive ignore.conf file. The repo history would stay very big but at least new members would not need to struggle so much when joining the project.
Either way, I would love some guidance on how to proceed. I have not been able to find instructions online that seem to fit my situation.
I believe I have a good foundation for a new .ignore now so I think I'm ready to do some file purging.
Condolences on Plastic, but I'm not entirely sure on the question? yeah, Binaries and Intermediate should be ignored but then you'll need something to sync PCBs
oh and DerivedDataCache
does plastic have something like an obliterate? sounds like what they're asking.
- Set up ignore
- Delete the cruft from repository
Thank you, yes a purge/obliterate action is what I was thinking.
But then it sounds like doing a delete push after a proper .ignore would be enough
I'm trying to setup git for my c++ project. I haven't done this for a c++ project before. How do I link to remote repository? I'm using Rider.
While rider has a manage remotes menu entry, you have to add the git binary path in settings first, also you can add your remote from command line with git remote add ...
I've done that, I'm assuming the git binary path is refering to the git.exe? I think I added my remote but I'm not sure how to commit in rider. It says to select files to commit but all I see it says is unversioned files (1,461 files)
Just check the boxes for what you want to commit, then choose Commit and Push, you don't need to worry about the Engine files. If there are unversioned files then add them by checking the box.You can also add git to Unreal and it will take care of the blueprints. IIRC you need to add Git LFS as well to handle large files.
If you don't have the checkboxes then your git might not be found, is it in windows path? It's "Manage Remotes" to check
I did a test and said version is 2.45.1
OK then just click commit and push, I don't know you don't have that checkbox near unversioned files though.
from command line after commit you can usually do something like git push origin master
is the remote on github or is it on private server?
github
I dont even know what that is lol
I think I need the git file on the repository then?
You can find your remote there
However I'm pretty sure you need the ssh part done before it works though, but that shouldn't affect the rider setup.
still not seeing changes
Did the commit work?
Do you even have a repository in your project? You need a .git folder
Before using rider you can try with command line, it's git add . then git commit -a -m "First commit" then git push origin master
so should I just commit source?
Yeah first add then commit then push
It's jetbrain stuff, safe to ignore unless you really want to keep it
Some settings might need that, I didn't dig too deep into it
Since it's your first commit you can as well restart from scratch. For simple merge it's git merge, for more advanced cases you may have to use rebase but I don't think you can do that with rider so you'd need command line or an advanced tool like kraken.
You always merge into your active branch so it's git merge otherbranch, rider has a menu entry for that.
Wasn't there some free hosting solution for Perforce, for small teams?
perforce is generally "host yourself" software... which is free for up to 5 users or 20 workspaces... you have to provide your own hardware etc. There are some SaaS companies like Assembla etc. which provide paid Perforce hosting, but again, that's paid 🙂
Alright. I'm not sure which is the best option, or perhaps cheapest in this case.
usually grabbing a cheap VPS/Server in some smaller cloud providers, in europe it would for example be someone like OVH or Hetzner... or some other local providers... where you can get whole server for like 40-50$ a month... and then set up perforce on it yourself
it's much cheaper than AWS and cheaper than hosting at SaaS - which generally bill at least based on perforce license per seat, which is 30 or 50 USD per user per month (I don't remember the exact price from top of my head)
or... if you have a server/spare computer at home or somewhere where others can connect, just host there, it will be even cheaper
Wow. 50/month for a perforce server?
That is peanuts to an established company...
it's peanuts for most people who have got some form of employment... obviously not everyone etc. etc.
but paying 50 USD a month for a hardware is nothing compared to paying 50 USD per month per user for perforce license (especially since if buying directly from perforce you have to pay per-year afaik)
https://dev.epicgames.com/community/learning/tutorials/1lV4/unreal-engine-perforce-setup-on-oracle-cloud-free-tier
Do note that there's some guesswork to be done, as not all availability domains in Oracle have always-free configurations available. And once you choose one, you can't change it.
Oracle cloud? I don't think that would even have been a top 10 choice I would make
Is there a way to add extra paths/file types for checking files to perforce inside the editor? I added +Paths=%GAMEDIR%Config/DataTables but FPackageName::FindPackagesInDirectory finds nothing. Does that only return uasset files?
they're quite decent, but have paid egress - unlike some other (primarly european) providers
so it's "free" as long as you don't go over whatever the free tier gives you
Hi, I'm about to start a project with a friend using Unreal for the first time, but idk if Git is actually a good tool for working on parallel, do you have any recommendations?
Perforce is pretty much the best, but git seems to be a popular second particularly for indies
Thanks! I'll give it a check
What do you guys use to host Perforce? I was thinking in using a free tier VM in some cloud provider, but haven't really compared the solutions. Also, there's the installation and setup part that always had me giving up and just using Git. The last article sent here on how to do the setup encouraged me to try Perforce for side projects though
It depends on your needs a little. For my hobby stuff, I just run the perforce server on the same laptop that I'm doing my development on.
As ramius said, if you're doing it for a hobby for yourself or couple of friends... some small server/VPS is enough to host your need... but if you need predictable and fast server then host on something beefier - it all depends on your budget, project size and number of people working on it...
I personally just have a physical server I bought few years back in colocated at nearby datacenter where our whole studio works from - and it's whole dedicated service since I've scaled it for multi gbps loads so things move fast 🙂 because time is money in production
installation of simple perforce server is as easy as installing helix-p4d and then running a setup script where you answer couple of the questions it asks you for, once that's done you'll have your perforce server set up and ready 🙂
although it's understandable that it might feel more complicated for people that are unfamiliar with linux (and yes, I pretty much recommend linux only for serious use because windows is 🤢 )
DigitalOcean and Google Cloud for personal stuff
DO fairly cheap
Nice! Thanks a lot, guys 🍻
Hey. What is the best source control system for 2-person project? I would like to implement that on beginning.
Perforce is the best for unreal
Git seems to be second choice
Is it possible that git merge destroys some files?
Or at least kicks them out of reference control?
Because there's one .uasset file that has been downloaded
But not detected by UE5
If it's corrupted I'll probably need to revert to another commit
It is entirely possible… git is pain… and unreal is even larger pain, if you move the uasset outside unreal it wont like it because internal metadata won’t be correct for new path etc.
And if git merge tried to merge binary assets together then they’re 100% corrupted
Check output log, there should be warnings about unreal being unable to read the files and why
Yeah, one of them who was supposed to be the controlled actor straight up disappeared. I made a casting as somewhere and it no longer detects the class lol
no
no, objects are always remain unless they're erased from entire tree and then git gc executed to purge orphanned objects that are not referenced by any commit
if you use git LFS there could be small issues, but that merge conflict can be resolved and object fetched
do not rely on integrations and use standalone git clients, like tortoisegit or dozens of others or git console
I use Github Desktop for the merge
review your merge commit, were there conflicts? is LFS in use?
There were some conflicts but relatively minor
Git LFS is indeed in use
Also is there a better option that is currently kept to date for UE5?
There's this: https://github.com/ProjectBorealis/UEGitPlugin
But the last commit is from last year
you mean integrated to ue editor? that one. or none at all (use external app to commit/merge)
lack of commits does not make it outdated
Ok because I was just wondering if it was still maintained or not
Also I've never installed plugins from external soruces before
You just clone the repo and copy the .uasset file in your plugins or do you have to do some build operation first?
Alright I tried rebasing, there's a lock file potentially posing issues. I had merge issues with the .uproject file and the .vsconfig file. Some .umap files also have an automatic conflict resolution.
what are the downsides of using git LFS ?
afaik git lfs doesnt change what files the local user has, but splits the remote data on 2 servers (the main remote server has a small file which points to a binary file stored in the LFS server)
it adds one extra step, which some people have hard time handling.
lfs replaces large files with a reference file to lfs storage, so original repo has a ~300bytes file while lfs storage has 1gb file, thats why it needs pull hooks to replace reference files with actual files locally.
when merge conflict between lfs files happen - you reconcile two reference files, they will be just text, and if you leave reference file in an invalid conflict state the LFS won't be able to download actual file from storage, thats is what usually people claim to be "oh no lfs corrupted my files"
the rare occurrence is also cancelling or failing to upload large file to storage leading to state where original repo has the file reference, but lfs storage has no actual file (as it failed to upload). anyone who will attempt to checkout that commit will have file missing. until original committer re-uploads actual file.
these two are most common issues with lfs that people encounter and get stuck
What is the common practice for developing features using Perforce as VCS? Are you making streams for features so developers can benefit from VCS?
Let's say the developer is working on a bigger feature which requires a lot of tests, and it would be really beneficial to have version control so he can revert changes on his own. I know that Ari says they are not using streams for features and they are committing everything directly to the main stream, but it seems like we are losing the benefits of VCS in that case.
you typically only use a separate stream if it's long-running and disruptive feature development
I'm not sure how you're losing any benefit. trunk-based development in games is common
In general, Unreal gamedev in perforce is trunk based. So everyone works in the same stream (branch). Even when working on large features, you can build it part by part and check those in without affecting the rest of the game or other developers.
A lot of this has to do with the significant binary (and therefore unmergeable) content data in assets and blueprints. If you were able to develop a feature entirely in C++ it might be plausible but trunk based development has other benefits in team based development.
That's not to say streams aren't used at all. Release streams are standard as are streams to do changes like engine upgrades.
It's also feasible to use streams to isolate certain parts of code. For example, we have the game stream which imports separate streams for the engine, one for third party plugins, and one for studio shared plugins.
also our lord and saviour game feature plugins. if your game is modular enough, you should make use of them to self-contain individual features
I appreciate your answers!
But, in solo development I was using Git like a mistake-proof tool. So I was committing every small thing I was working on during feature development, and whenever I broke something I was able to revert to some commit and start from that point. It seems impossible if it's trunk-based because if someone else is also working on another feature and he is committing simultaneously, I can't just revert to some commit because it will lose his progress too.
I know I just don't understand something well, but I can't wrap my head around how it should look in that case.
Plugins seem like a very powerful tool, I have to learn how to do them
well if you're working on unrelated features then you can roll back just your files. if you're working on intertwined stuff then it's going to get difficult/destructive to roll back no matter what
you wouldn't revert to "a commit", you would just backout of the CL
in p4, you can revert an individual CL without losing any other unrelated work
You also wouldn't necessarily roll anything back, you'd just revert your current changes
and with trunk-based, main is allowed to be broken. usually you bring out the release streams for stabilisation for a major deadline/release
well I shouldn't say "allowed"
Oh. Didn't know about that
it's allowed to be unstable-ish
Let's say it can be broken, but it shouldn't be
project should always launch but it's fine if the game isn't always playable. it's being built, after all
Depends what you mean by broken. Ours always compiles & cooks successfully.
There may be runtime issues.
you should have a CI server telling you as fast it can if there any build breakages to the editor or packaged game
you can go a step further and require a preflight
but maybe for something early in development, that might slow velocity
Thank you very much again guys. I really appreciate it. You opened my eyes!
As others have said, trunk based development is best way for game dev... in perforce you do not revert changelists, but revisions on the files themself, so you can easily revert broken files without having to revert whole branch. And also having CI will catch so many issues.... same for preflights, they might seem like a waste of time, but it can help to catch silly mistakes like "oh, I missed an include" or "oh, I missed a ifdef for editor and now my game binary does not compile" which is hard to catch locally until you push since you usually compile just the editor.
In perforce changelist is pretty much just that... a list of individual changes grouped with some description/message... and that's just that, main version thing is the file revision itself as changelists just operate like a layer on top of that
Hi, at work we have git repo for Unreal project. People who use git - do you commit into repo large assets (or assets that have a lot of files summing up to gigabytes) or do you gitignore them, and leave it up to other users of repo to manually download those assets from fab (or other place) and import it manually?
I ask, because in our repo we use assets that all together weight in almost 7 GB, but we do not really modify them (maybe some of them)
Or, can someone point out a good place to figure out how to deal with this situation? It feels awkward committing a bunch of .uasset textures, considering that deleting them at some point in the future will still leave a disk memory print on git repo
Unless you're spamming assets that you then later remove, it's not gonna make too much difference, honestly.
Let's say you've got 20gb of assets on git, is removing 2gb of textures going to affect much?
You could manually delete them from the lfs server if you really wanted.
(that's not really a good solution, though)
If you use something like perforce you can literally "obliterate" them from the history.
Thanks! I guess I should not be worried then about removing files. But what about storing/commiting them in the git? Is it a good idea?
But my assets are not categorized as lfs (only some of them, which are larger than 100 MB, like a game scene). I don’t know if marking 100+ textures where each one is 10-20 MB, will be better or worse
For big files like a game scene its worth marking it for lfs, especially because its changed frequently, right?
What is the benefit of that? To not blow up the size of the repo on each change of the binary file?
Yes.
Lfs has some configurable "last X versions" I believe. Something like that.
A 20mb file you change once a day is gonna be a gigabyte after a year.
Okay, that makes sense. Is there anything ugly to expect, when migrating already committed binary files to lfs?
My coworkers should also migrate their local files, or its an old thing that no one needs to do anymore?
I'm not a devops guy, really, so I'm not sure on the precedure there.
No worries, thanks for all the info! You have been a great help ☺️
So far it works okay? No weird compatibility issues, or other assets not linking properly to downloaded asset? And what if some assets (that needs to be downloaded) need to be modified (adjustments fkr texture, as an example)?
Our main branch content folder is about 20gb after 1.5 years.
Our third party folder is 13 of that 😂
We've not had any issues.
Damn, thats insane. We are like 1/3 of that. I guess I should really stop worrying lol. Thanks for sharing that 🙂
Thats good to hear. For simplicity sake I will commit assets directly, cause there is not that much, and it will unlikely to grow even more. Also committing directly will avoid situation where assets might get pulled out from fab store
Np
Hello, with my small team we use P4V as source control, as of now artists use a normal epic games build of the engine while a couple of engineers use a custom one, we wanted to distribute a custom engine build to all of our team and i stumbled upon UGS, it seems great for what we need. I installed UGS in my PC, started it and went through the "open project" via workspace method. As soon as i click ok i get an error message stating "Could not find engine in Perforce relative to project path (//Workspace/Myproject.uproject)"
Right now our P4V setup is just a Depot, with a mainline stream containing the project folder.
My question is, how am i supposed to set up streams and workspace to have the least problems since we are already versioning the project folder? I guess i have to add the whole custom engine to perforce as well as UGS but i'm kinda lost
Yes, if you want to use UGS you’ll have to commit the engine source to source control.
You’ll also have to layout your source in a specific way. Checkout the first pinned link. It goes over everything.
So i want to have a stream just for the custom engine (//CustomEngine/Main), then another stream that maps the stream that has the engine to this new one, and in this new one i should also have the project folder itself (//ProjectStream/Main) (Folder structure would be //ProjectStream/Main/CustomEngine and //ProjectStream/Main/Project Folder)?
If i make changes to the engine i commit them to the Engine stream right? And the project stream would automatically get the changes (and build the engine via UGS right?)
The top pin goes into this in detail. Your engine should be within the scope of the project depot. Usually, this is copied/branched from a location in P4 with the pristine engine
It's called a native project, and the layout is like this: https://dev.epicgames.com/community/api/learning/image/029fe999-a018-4d98-802a-e5db55f44aac?resizing_type=fit
(though in this case there'd just be a single project like "Project A")
And there are many reasons to have a location on P4 with the pristine engine because it helps when you want to upgrade the engine. The merge conflicts created when you merge in the updated pristine engine will be your project-specific engine modifications
Resist the urge to use import+
And to be clear working this way, since the engine is in the scope of the project depot, engine changes are within the project itself
You also need to setup a CI server so you can deliver PCBs to non-coders, any coder on the team will build locally
Alright thanks for the help!
Hey, I have a question: Is it possible with Perforce to manage the project, so that the project is "shared" for the artist to automaticly get the c++ build files (bins). currently I need to pack it and send it seperatly because Git cant handle this... the artist currently dont have the build software so i need a easy solution for sharing the project along the team
And are there some good guides / tutorials for setting up a project?
If I understand it correctly you want your artists to get precompiled binaries for the editor etc. automatically so they don't have to compile locally? Do I understand that correctly?
(If the answer is yes, then yes... technically... it's not directly perforce itself, but Epic has built infrastructure for this exact purpose as long as you properly set everything up, then there are tools to handle it - the requirement is to have perforce and full source code of the engine on perforce, doesn't work with editor from epic games launcher)... I'll go into more detail if it's what you need/want
Yeah ITS exactly what i was looking for
Top pin, as always
Ok, then, what you want to do is to push whole engine source and project source to perforce in a structure conveniently sent few messages above by sswires... generally how you do it is:
- sync from epic git
- run setup.bat
- submit to perforce
- add your project files, excluding saved, binaries and intermediates
Ideally your perfroce server is (you'll have least issues that way):
- non-unicode
- case-insensitive
once you have that your perforce setup is compatible with Unreal Game Sync (it's a wrapper tool/UI around perforce - makes work much more convenient + it has "PCB" - precompiled binaries - mechanisms built-in)
To prepare and submit PCBs you either set up horde (epic's build farm/CI/CD thingy + much more) and store binaries there, or make separate stream in perforce... and then just run a buildgraph to build and submit editor binaries...
artists will then just say "I want binaries" in UGS... and tada, they'll just fetch the zip instead of building locally
or as sswires said, just check the top pin 😉
I always forget we have it p;inned 
Yeah that pin is pretty much the bible for setting up a studio so I'm glad it's there
ok, thanks I will take a look at the top pin 🙂
is all this possible with the free version of perforce or do I need the paid version?
Yes, the only limitation with the free version is user/workspace limits
You'll probably have to swallow the bitter pill of licensing it at some point, because automation can chew through workspaces
I'm not sure if it's possible with the free version to get extra user slots for automation, iirc when paid you can up to 3 additional users for background processes like CI, code review tools, etc
stupid question time! we used to run with custom compiled 'Installed Engine' engine builds and had BuildCookRun times of ~10 minutes .. now we run with the engine source directly in the same stream as the project (native project) and distribute precompiled binaries etc - but now the build times are upwards 1 hour .. so my stupid question is if theres a smooth way to modify BuildEditorAndTools.xml to also include building Shipping binaries and somehow allow the BuildCookRun step to use those precompiled binaries instead of having to compile them every time?
not really, because the game/server/client targets are a unique build environment in a source build. are you doing a clean build every time or something?
but an hour is a long time even for a clean build
ooh yea hmm now that you mention it, we seem to be running with -clean for BuildCookRun!
-unattended -pak -clean -cook -stage -build -package
ill try removing that on regular builds
ok well it went down to 3 min .. haha stupid question, great answer - thanks a lot for your quick reply 🙏
for accomplishing this in p4, what kinds of streams are dev_unreal_merge and dev_unreal_upstream, and what is the process for the pink and green arrows exactly
is unreal merge a child stream of Main?
Main would be a mainline stream and both of the blue ones would be development streams. Merge being a child of Main and upstream being a child of merge.
The green arrow would be a merge and the pink would be a copy, which is the standard relationship between in this case for "merge-down-copy-up" relationship.
thank you, and the step by step here I'm still struggling to grok exactly
On previous projects, we just had the engine in a separate depot. Perforce does support copying and merging between depots
So something like //engine-unreal/main and //project/main. When we wanted to upgrade the engine, we'd create //project/dev-engine-upgrade-5.x, populate that from the project's main, merge the new engine in, resolve conflicts, fix up any errors, verify builds with QA, bugfixing if necessary, and then merge it back down to main when we're done
One more perspective, we do something in between of sswired and what epic recommends:
-
we have
//UE5/Ingestfor clean engine versions, new versions always go there -
we have
//Project/Dev-EngineMerge- Development stream for merging engine changes -
we have
//Project/Main- project mainline -
integrate Main to EngineMerge
-
integrate Ingest to EngineMerge
-
resolve conflicts, tweak libraries, reapply patches... just get the damn thing to work 😄
-
Copy back to Main
though at the end of the day it's always the same 3-stream process, just with different names here and there
and for getting the new engine version you just nuke what's there, download the new engine, and reconcile?
well you don't build in that stream so you don't need to nuke anything
how do you capture file deletions between engine versions
reconcile should also detect deletions
but say //UE5/Ingest has UE 5.4 in it, and i'm going to UE 5.6
i have to nuke UE 5.4 and then copy UE 5.6 into it no?
well I always did it on the same machine so I just pulled the version I wanted and then it would essentially download the delta
did that with both the GitHub and licensee P4
and with GitHub, the contents of your pristine engine should be whatever is dumped to disk immediately after running Setup.bat
I have automations for this purpose, it runs on the same machine in our case, so simple sync + reconcile is enough
But in case you have to rebuild from scratch, create new workspace, use sync -k (sync only on server but don’t transfer anything) that way server thinks you’re on latest while even if your local folder is empty/already containing new version
Once you have that then simply run reconcile, that way there’s no need to nuke anything
I need to stop using Git LFS. It messed my commits real bad. I have two branches, one for art and one for dev and merging it screwed my files :T
should I switch to perforce? Is there a free plan? I’m planning to move between PCs so I want a repo similar to GitHub. This is a side project so I’ll avoid costs as much as I can.
why would you have an art branch
basically perforce is free for very small teams so if you want to try it you def can
I suck at 3D and my creepers look out of place compared to the mannequin
Even the servers?
i'm not going to lie that's the weirdest reason i've ever heard 😄 you maintain a whole separate branch of your game that uses manny instead of other placeholder art?
yeah, the whole thing is free for 5 users and 20 workspaces. there are some limitations but they won't affect indies at that scale
Hey! I'm working with SalmonHunter on a game. I'm responsible for the art side of things. I've modeled a fw placeholder models for now. I wanted to keep all this separate from the programming side so that it:
A. wouldn't bloat the file size, and
B. wouldn't cause any conflicts.
just jump right in together, you guys will live longer
but yeah you could try playing with perforce and see if you like it. it has a fairly steep learning curve (like any VCS, but maybe a bit more than some others)
Is it worse than git?
i kind of think it's harder to administrate than git but i actually have never made an effort to get extremely good at git, i just maintain and use plugins and stuff from github with it mostly
i feel like git is both less intuitive and less complex
not sure if everyone on earth would share my opinion though
It's fairly typical to have an art source depot, but otherwise I wouldn't be too concerned with it
Git LFS does have an exclusive checkout system but I can't say I've used it
Git is pretty difficult. Unreal loves binary files and most teams prefer to work a more trunk style
We did use it but the trouble came when we tried to merge two branches. At some point, UE5 could no longer detect some files like the playable character when the file was still present in the game’s folder.
So I’m assuming there has to be some mismatch while trying not only merge but also rebase.
Well with binary files, you'll have to pick one or the other when a conflict happens
The best thing with lfs is when it tries to do a merge on the lfs tracking files.
Perforce makes the most sense here anyway, you'd just both work in main with exclusive checkout on uasset files
That’s what I did for most files except the .uproject where there was another plugin
anyone alrdy compiled on linux ARM?
i don't think there's much of a point to git flow in a game project
you can just do trunk branch in git and everything is fine
maybe try #linux?
Not really a dev-ops question, but still related to source-control:
How frequently do you recommend designers on your team to run "Generate Visual Studio project files" after getting the latest code from version control? Do you ask them to do it every time they get latest - just to be on the safe side? Or do you recommend them just doing it in case the project doesn't build or PIE doesn't work?
Personally, I lean towards only doing it in case project doesn't build or play, simply to give less friction in daily life with source control. But I'm unsure if this possibly could lead to data being corrupt in the project.
there's zero chance of causing corruption by misusing it
so basically don't ever bother regenerating it, unless you think they've found a need for it (the only possible one i can really think of might be changing engine versions and changing compilers or similar major events)
this is assuming your designers are building code locally
Literally never. Anyone who isn't programming in C++ should have something in place to fetch precompiled binaries
If the editor doesn't build then that should be top priority for one of the programmers on the team to fix
your CI should be able to inform you in your team's communication platform of choice when things break
Oh yeah, they are building code locally. Should have clarified that.
Thanks for your response!
Then you should be looking at setting up CI so that they don't
It's extremely error prone and just an internal support headache for anyone not comfortable around an IDE
True. We need to get that set up as well.
Thanks for input
so got an issue
I've created a workspace in PVAdmin cause I needed another workspace for a different project
I've then in P4V attempted within that workspace to create a mainline stream but after I do and tell it to work in that stream its trying to force me to make a new workspace for it when I don't want to
Some confusing terminology, I imagine you meant that you created a depot and you created a mainline stream for that depot. for stream depots, your workspace will map exclusively to that stream
so i created a workspace and a depot to go with it
I then in P4V tried created a Main Stream for the said depot and it for some reason wanted me to make a new workspace rather then using the workspace I just made
you create the workspace after the depot usually
you pick the stream from the "stream" field in the workspace settings. you completely ignore the workspace mappings section
i believe I did that unless I didn't and thats whats messed up
I think you'll need to be more specific about what you're seeing and what you're trying to do
this should just work by selecting the stream in the ws settings
it doesn't have any streams in it yet
yeah, click OK, and what do you see?
and then I click work in this stream so the main one and then I have to do this
yes, this is expected
cause before the workspace I created for it, wouldn't let me use so does the workspace get created after the main stream is made i'm guessing
oh so I've been trying to do it wrong way around then all this time, I've been trying to do Depot-Workspace-Stream
not Depot-Stream-Workspace
for this bit what would you suggest
I not ticking the AllWrite one cause that gave be issued last time
I don't really mess with these settings. The only particularly useful one is rmdir
yeah so i've ticked that one prob won't mess with the others
Hey all, semi quick question hopefully. I've got a friend who is doing animation and movement work on a base project in github (nothing game specific etc) so I've done a repo clone locally of it and then copied that into my new game base project folder. I use p4 for version control with another dev on our game. The issue I'm having is when my friend pushes an update to his github, like adding in direction rolling, I want to pull his changes into our project but he's sometimes making changes to config files etc that I need to actually merge in so it doesn't overwrite ours. We don't touch his file folders in our project, we've just childed his bp's to use as our base so we inherit these animation updates.
Currently I was just pulling origin into my clone of his repo, then copying/pasting the updated folders into our project and reconciling offline work with p4. The issue is that is going to become tedious to maintain, plus the issue with few files like the default engine config that we're both touching. I tried to do a git pull from origin in our project folder since it had the same git structure, but it deleted all my plugins and source files.
Am I being dumb in this pipeline. We don't want to switch to github+lfs for our project as we quite like p4. So I need to make so i can merge his changes upstream into our project.
Do I need to just bite the bullet and run a copy of our project on github also so i can merge in the remote changes then pull it down to ours and reconcile to p4?
You could use something similar to what I've done with plugins from github. That is to have a dedicated stream that matches what's in github.
So you would do the reconcile in this stream so that it matches exactly what your friend did, but you wouldn't use this stream directly.
Instead, after you check-in the reconcile you would merge/integrate those changes into the stream with your project. This should actually merge their changes with yours, at least for the mergable file types.
I use this setup so that we can make changes to third party plugins without it being a nightmare to update.
Oh damn, that makes sense, so setup a stream under our project where I pull in his changes then merge that up into our main.
I'm not sure what you mean by "under" in this case, it could be in the same depot as the project or a different depot. But it wouldn't be a child stream of your project stream. It would be it's own mainline stream.
Thats what I meant by under, sorry a child stream, create stream from main. Can you merge in a stream from a different depot or even the same depot that is not a child stream.
I haven't done that
Oh definitely. You just have to be a little more manual about it. It's not as simple as doing it between related streams, but it's not impossible. And it's not that hard.
I tend to do it from the commandline because it's easy the way I've got stream setup, but you can do it from within p4v as well.
I see it now in p4v, and then I'll get the merge options/review to select what to merge in and what ot keep if conflicts like a normal child stream merge
Thanks @silver token Perfect solution
You'll probably want to be very careful the first time you do the integration since the two streams won't really know anything about the relation between them.
But after that, when doing updates, it should be pretty seamless.
Actually, if you still have the last version you pulled from github you might be able to make it easier on yourself.
Use that to populate the new stream. Do the merge and use the 'Accept Target' resolve option.
That will establish the baseline for the stream relationship to base future merge differences on.
Yep, just setting up the project yesterday so still fresh enough to set it up properly without losing work. And yes still have a separate local github clone of the base there that I'll use to populate
How, in the name of all that is holy, do I rename files while preserving Perforce history for that file?
Renaming inside Unreal seems to break Perforce's chain of revisions, but renaming inside P4V causes the files to be unrecognizable by Unreal as far as I've been able to solve.
Yeah, we're SOL on that count. The benefits of the redirectors tend to outweigh the benefits of the full history.
The file history in the Content browser can somehow show the history of filepaths so you can go to perforce with those (maybe showing deleted files for redirectors that have been cleaned up).
Augh.
How many file types do I need to worry about those redirectors for?
Everything in a Content directory. Anything you manage in explorer or your IDE will work as normal since you can do actual renames through perforce.
Frick me. Well, at least it's not a complicated solution.
So .uasset files will have the same issue?
That's most of what is in the Content directory. Even if the Editor shows different things (blueprint, material, data asset), they're all mostly uassets.
map might be one of the few exceptions that I can think of.
ughhhh, in a stream, anyone know if there is a way to add an exclusion for the ignored section? i need to include one subfolder names Binaries 
actually scrap the request, there's another problem that means this wouldn't solve everything anyway and this particular problem will go away later on in life (but i think it seems like the answer is "it's just not possible")
i think the components feature could have been used to strap on another stream containing the thing, if i wasn't a poor cheapskate (or wait is it paid or just disabled by default? hmm)
How do you properly manage plug-ins when using version control (Perforce]? Can I trust Epic's p4ignore, or is there other best practices I should know about?
The p4 ignore should be fine.
There are lots of options for managing plugins in perforce that all depend on your particular goals.
I've got mine and third party plugins each in their own streams which make it easier to update or share across projects.
But you can stick them all in one stream if you want too.
Sounds good.
Hello! Could someone please explain the Unreal error I'm getting when I try to use the built-in Migrate feature?
"Migrated content only works if placed in a content folder"
I can't use the Perforce move operation because obviously Unreal loses track of all the dependencies, but I was not prepared for the Unreal move to fail like this.
you have two projects in the same depot? or what are you using migrate for
I think I misunderstood how it worked.
I thought it was an alias for a normal move operation, which I have found you can do by just dragging files around in the content browser.
On a related note, why on Earth does moving files that way delete the old ones from view within Unreal but leaves them in Perforce? It won't even let me delete them from Perforce until I submit the changelist with the file move.
P4V should be showing the old one with an "X" denoting the delete.
And absolutely it should be showing all information available. If deleted files didn't show, you wouldn't have a full picture of what you are submitting
I know it SHOULD. Definitely doesn't.
It just makes them invisible in Unreal, but very much still present in P4V.
I think we are confusing something here, I see you mention Migrate earlier
And like I said, I can't even mark them for delete manually until I submit the changelist that Unreal generates.
I was just wrong about that. I'm not using it anymore.
Move / Rename works as expected for me, I use Migrate so rarely I have no idea how that works
Literally just click and drag files in Content Browser in Unreal into a new folder. This checks out the files being moved, marks copies of those files for add within the new folder, but does NOT mark the old checked-out files for delete.
I'ma boot up unreal to sanity check : )
I'm not using Move/Rename. I can't, if I do that Unreal loses access to the references to those files that are in use. Move/Rename does work as expected within P4V though.
Yeah I meant within Unreal
Are you still talking about file migration or moving files around within a single project?
if the asset was in use, unreal has to leave a redirector in its old place for your other game's assets to find it still
if the asset wasn't in use, this shouldn't happen
you can clean it up but the process will require checking out and modifying those other assets also (automatically)
I was never actually talking about file migration. I was completely wrong about what I needed to do when I said that. Never even should have been trying it.
I think the only time it won't do a redirector is if you have the file open for add.
If it's checked in it should always leave a redirector since someone else could be added a reference you don't see.
So . . . should I not have deleted the old files in p4V?

you have to handle the redirectors
I'mma need more specifics on this.
What the heck is the point of a move operation if you need to leave copies sitting everywhere afterwards?
it isn't a copy
No, you should leave redirectors alone (by default they are invisible in the content browser)
But you can manually fix them up so that assets are updated to point at the new location.
read the fine manual : )
Teams. You may not be able to update every asset that uses that asset to know about the new location.
Ohh okay it's not the whole thing it's like a pointer to the new location.
Okay frick I need to go fix that.
In a small team, it's generally ok to clean up redirectors as they come
In a big team, apparently it's best to wait until everybody is on holiday and then do cleanups in one fell swoop to avoid snafus
Hello, I’d like to temporarily roll back the entire project to the state of a specific changelist. Here’s what I did in P4V: select the workspace root -> right‑click "Get Revision" -> specify the changelist -> uncheck "Only get revisions for files listed in changelist."
Is this the correct approach? And how can I do the same from the p4 command?
Sounds right to me. From the commandline it's probably something like p4 sync //Root/...@CL# but you'd have to check out the docs for any of the flags. The online docs are pretty good.
when you do it in P4V it will show the command it runs in the logs at bottom
@silver token I took a quick look through the p4 sync doc, but I couldn't find any parameters related to this.
@wide raven
The commands it's showing are:
p4 stream -o -v //root/Main
p4 sync E:\W\...@347
But I'm not sure how these two lines actually make that happen.
yarr... I hardly ever use command line anymore, so can't help more
does it matter? if you run those two lines, and it works, can roll with it : )
These two lines of code can't do what P4V does
I'm not sure what the stream commands are needed for.
But that looks like a reasonble sync command. It gives a workspace root directory and the "@347" is saying to sync everything in that directory (and subdirectories) to the version that existed at that CL.
I tried it out, I don't see the stream command, just the sync
p4 sync c:\perforce\myproject\...@23422
seems solid to me. Typically visual clients like P4V etc are very transparent about what they are doing, the log should be honest and show everything relevant
@silver token @wide raven If I check “Only get revisions for files listed in changelist.”, the command will just be p4 sync E:\W\...@347, but that will only roll back the files explicitly included in that changelist.
hmm
if I check the box with "only get revisions for files listed in this cl", I see
p4 sync c:\perforce\myproject\...@23427,@23427
Yeah, the checkbox being true should result in the range-based @'s that Karma's getting.
The single @ should be equivalent to the checkbox being false.
Thank you, you're right. I'm not sure why I saw it that way when I was looking into it earlier, I must've been a bit bleary-eyed at the time
I'm a bit confused about how the command line "opened" command works. I can get it to work for the whole depot with p4 opened -as //depotName/..., but trying to nest any deeper than that doesn't seem to. Does that command not work for specific folders?
I would expect p4 opened -as //depotName/FolderName/... to work, but it seems to not.
Worked for me fine with subfolders of the depot
Hello, I am currently using UnrealGameSync for syncing precompiled binaries to other team members.
But since a while now I cant submit my changes to UGS anymore because of NuGet vulnerabilities
\Engine\Source\Programs\AutomationTool\Gauntlet\Gauntlet.Automation.csproj : error NU1902: Warning As Error: Package 'Magick.NET-Q16-HDRI-AnyCPU' 14.7.0 has a known moderate severity vulnerability
I really dont know how to address this issue, if I can just skip that step somehow or upgrade the NuGet packages myself..
I am using the Engine/Build/Graph/Examples/BuildEditorAndTools.xml Script for submitting
Outside of the official Perforce channels, is anyone aware of any good P4V tutorials? I'm using the desktop client.
Just want some good walk thrus and typical troubleshooting scenarios, tips etc...
some tips
Big Picture
- unreal is mainline dev. all devs commit fearlessly to mainline. .uasset file locking must be respected
- mainline should always be as functional as possible
- if you are doing big changes to a given system, consider whether it would be possible to leave the old one be, and use a feature flag to build the new one alongside
- setup an autobuilder - catches simple errors fast, and tricky packaging errors early
Nitty Gritty
- shelves are your friend ( can work in multiple locations, review code, do tests on builds )
- start the day with refresh + get latest
- break up work into max 1 day chunks, commit every task / every day ( as long as it's not breaking stuff )
- Move to Another Changelist : keep work separated out as needed
- Edit Changelist : edit the description of the CL as needed
Disaster Recovery
- before you Undo stuff, use Diffs and Get Revision to see if there is a fix instead of rolling back breaking changes
- Search and File History are useful
Thanks
@wide raven thanks again!
Important question.
I’m a solo developer on a project with a very tight deadline of a few weeks.
I’ve never had to manage P4V myself
I’m concerned it will be a bottleneck.
For the most part it manages itself but I’ll need to constant change the Unreal project structure, create branches, add and remove files.
All these tasks I believe must be done in P4V, not in editor, correct?
Since I am a solo developer I was going to suggest working outside of version control. Thoughts?
If you don’t recommend how do I become a P4V master when I have zero time?
Do everything in unreal. Unreal .uasset works based on every file having a unique id which is used as a reference to keep things working. Renaming and moving stuff will create "redirectors".
Use version control. It is guaranteed to save you time when problems arise. Mystery issue, something breaks and you don't know what it was? Version Control.
Made some bad code, need to roll back to a previous revision? Version Control.
Etc etc
Almost every day one can see beginners struggling to trace something they have broken over in #blueprint and 95% of the time their issue would be solved by using the blueprint diff.
Thanks for the valuable feedback!
So just to confirm I should work normally inside Unreal, make and rename new folders, etc and P4V desktop should be smart enough to track all these changes for me?
basically unreal or any other software that has a good perforce integration will do the same thing that P4V would do (run commands that talk to the perforce server and tell it what you're doing, which will build up a running changelist)
@wide raven Do you recommend using Unreal’s built in Source Control or is managing it on the desktop with P4V sufficient? I’ve only used the latter.
i do changelist cleanup and actual submission with P4V but let unreal populate my default changelist as i work
find what works for you though, i would kind of hope that level designers and artists are probably fine just using the unreal integration as much as possible
I only use P4V, beyond checkouts and diffs in unreal
I need some help specifically with using Diversion here...
I had a collaborator who is as of now not working with me anymore. However, they had a single uncommited thing that now is permanently displayed as a "files with changes in other branches/workspaces" which makes it hard to properly read and ensure stuff...
Any way I can just get rid of that cleanly?
Doesnt Diversion have dedicated support / faq / disco?
I haven't seen them around that much recently
Which would make me worried if I had data with them because it's cloud only, and you don't have any control over your own data
yo anyone here use git
I have for a college group project but still wrapping my head around it
oh
Yeah i have no idea as I've not come across this unfortunately. So i wouldn't be able to help
But if I come across il let you know 🙂
i know you can manually use a .gitignore and an external folder to upload normally but not with source control
but my main issue is those random errors and when i downloaded the ZIP from the github site it only downloaded the latest edits rather than the whole project
For one thing, you seem to be referencing files in strange different locations on your computer.
Oh wait are you on a Mac?
you should (almost) never download zips from github, that option should almost not exist. if the repo uses git LFS then the zip won't contain any of that data
but, might be some different issues going on there, not sure
Not a git user, but this is sadly expected behavior when using builds from epic games store, since engine and project are in separate locations and unreal can't distinguish properly between them... the "proper" (as in all studios use that) is to have your engine and projects in one folder in VCS of choice (git, etc... though usually it's inside perforce)
and that's what the source control plugins are built for, so it's trying to submit and check any modified engine files, but they're outside of your git repo
well i've been using a build from epic games launcher since 2018 and never encountered that yet, but am also a perforce/non-git user
git seems more vocal about this, perforce just logs into console "hey, this file is outisde your workspace" and that's it
i've never seen that yet
it will only happen when something triggers modification of engine files
i.e. material usage flags, or some other stuff like that
user error then 😄
indeed
i guess i've seen engine files showing up in the uncontrolled file list too, that dumb nuisance, but i ignore that and basically don't use that dialog
or git being annoyingly vocal, on first screenshot one can see that it's trying to query GPULightmass and other engine plugins one would probably never touch
is this using the built-in git plugin or the better third party one? not sure if it might be smarter
project borealis i think?
project borealis is the team behind the plugin, but iirc it's called "Git LFS" or something lik ethat
Yeah I had to do git clone
is it normal to have these show up in the logs:
built in
well i'm guessing that last error is what klukule described, maybe you have modified an engine file? but not sure
i added some plugins to it but because it says "editor materials" it has me concerned
you could verify your engine install?
wdym
open epic games launcher, go to engine install, verify it
ah ok, also what would you recommend for version control? Most people here say gits bad but idk any good alternatives that are free.
perforce is free for a small team and self-hosting. So it's a bit of a higher hurdle to set up, but it is best for unreal in the long run, especially if you have more than one person.
Solo, git is fine I guess
yeah i was but my 27GB project on git requires a paid plan
you could just try to strip out cruft and over-large assets... are you really really using all that 30gigs...
if you have massive asset packs with lots of unused stuff all in there, for example, that's just a waste of space
azure devops might still allow free large-ish git repos? but generally you're going to have to either pay for external storage, or put your data at risk (of fire/flood/theft) and host locally
the only way you should even consider doing the latter is if you have a partner you're developing with, so you can always have a version of your project in two remote places
Inside Unreal having problems when I Connect to Revision Control with a specific file.
Provider is Perforce. Use P4 Config enabled.
Server, User Name and Workspace seem to populate correctly.
But when I click 'Accept Settings' I get a popup error
"Failed to connect to Revision Control. Check your settings and try again"
Although Workspace is populated, Available Workspaces is blank. Wondering if that may be the issue or...?
P4V desktop works fine.
Any troubleshooting steps appreciated!
in the project folder, on command line run
p4 set```
and crosscheck everything is right with your p4config file
Thanks
Hi. I would like to know how to resolve this but I'm having difficulties understanding it enough to ask the right questions.
We have this project building on computers that have this plugin, and we have committed the changelists from those computers into the depot using the P4Ignore settings supplied by the plugin, but we are still getting this whenever anyone else pulls.
Does that mean everyone who uses the project needs to individually install the plugin themselves? If that's the case, I would appreciate it if someone could explain to me why that is the convention.
The plugin should be in the project Plugins folder.
However : assuming everybody does not need it, you could remove it from the .uproject, and just add it locally for those that do need it
Does anyone know how to fix the Perforce "The filesystem 'UE5' has only 733.1G free, but the command estimates it needs at least 1.9T available." issue? I'm just trying to submit the base engine w/o even having run Setup.bat. It makes no sense that P4 thinks it needs 1.9TB free to submit < 3GB...
Alright I've finally managed to get something working that has been a bane on our project all week, and now I need to be SURE that I get everything into the depot that needs to be there and nothing more. Should ANY of these files go into the depot? Particularly the .modules. I had to mark it for delete to get my project to build, but the build process regenerated it while still leaving it marked for delete. I'm not sure if I should unmark it or not.
Binaries dont belong in depot
Intermediate, Binaries, Saved
For reference, if anyone runs into "The filesystem 'depot' has only xG free, but the command estimates it needs at least yT available.", the issue can be resolved by upgrading your P4 server to a version later than: 2025.1/2810567
Bugs fixed in 2025.1 Patch 1 (2025.1/2810567) (2025/08/05)
#2795402 (Job #127413) **
Fix fileSize expectation issue resulting in errors indicating
insufficient space in the depot storage.
Is there a way to configure a P4V client so it won't pull from certain directories when you hit Get Latest, even if we do want some of those files to be in the depot?
ignore it in a virtual stream
What if we're using a classic depot?
Then you should be able to mask it out of your client/workspace spec.
Before using UGS, I had a series of batch scripts to pull individual directories and stuff. Ghetto mode!
When I copy up my changes in the Perforce Development stream to Mainline, can I keep my original changelist descriptions?
No, you'd have to copy that manually since it's a new changelist and the copy may involve updating mainline with changes across multiple changelists.
Thanks. I'm coming from mostly Git where the commit is always there.
I'm not sure what you mean. The original commits to the development streams are still there, with their descriptions. You don't loose those.
To see them you'd look at the Revision Graph instead of the history. That would show you things like integration/merge/copy sources and their history.
@gusty lion ^
That's usually good enough since the description of your copy should be sufficient to understand all the changes that might have been copied from the one stream to the other.
but you haven't lost anything if you really, really need it.
Hello, I have a question: What is the typical naming convention for commits in source control? Are they always lowercase or does it vary?
it heavily depends on team and their workflow, also personal preferrences. there is no standard
Naming convention for ...commits?
Like the commit message? Not sure why that would be all lowercase
For us commit messages are wild west other than machine readable tags such as #jira etc. which have commonly defined formats so tools can read those
Is it worth using prefixes in commits, [Fix] [Merge]?
not really. if they're linking a Jira ticket (other project tracking systems are available) in the description, then that'll have that context
Jira is life.
Okay, sory my english is mid
Anything you do want to have in the commit message, like a project management ticket association, you'd just enforce that with a pre-commit hook
the only thing we really enforced at the previous studio was a Jira ticket ID
it depends, on team and tools integration for style in one of repos, epic has similar layout. overall they all fit in this category just syntax changes
first section - fix|merge|tag|feat : then short description of things done fitting one line
second section - optional long list of changes, usually for merges or squashed commits
third section - #tags for jira to parse and various integration commands
readable and understandable commit messages are nesessity in an any project
Okay, Thanks
Hey, I’ve started learnin’ C++ and I’m new to VS as well. I’ve got an issue where every time I try to run “Local Windows Debugger,” it tries to open files in the Binaries folder. I assume it’s trying to recompile them, but it can’t because they’re not checked out in Perforce and are read-only.
I don’t wanna ignore the binaries since I’m the only programmer in a 4-person team , the others don’t have VS to recompile them, etc.
I’m not changing anything related to the advanced session or whatever, so is there a way to stop it from recompiling them every time I launch the project?
I can manually check them out, and then they’re not read-only, but I don’t wanna have to upload them in every changelist if I’m not actually touching the advanced session stuff for example
Is this possible laso to automatically check files it needs? Im using p4 plgin in VS, but instead of asking me to checkout it just fails to open it
.dll should be +w
there's even a typemap out there that shows this
where? im using type map from epic
//depot/ should be replaced with your stream depot's name
even when the typemap exists, any pre-existing files need to updated with "change filetype"
ou i didnt do that... and thats streange because all uassets are binary. I tohught they would be text without typemap
Yeah. I still have depot but thats stange becasue uassets are working properly. They have exlusive checkout and are binary
so I thought my typemap is working correctly
well you'd replace that with your stream depot path
hopefully you aren't using a classic depot
nope, stream one
I've seen in p4 tutorial that changing typemap when files are arleady there doesnt affect them. What I have to do now for all files that are already there?
I mean, thats what you said? But how to do it?
EDIT: NVM I see it
right click the file
"change file type"
in p4v
I wouldn't doubt there being a command to mass update them, but I don't have that to hand
and should it be visible there <binary +w> ?
We don't keep binaries in P4 but probably
https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/p4_reopen.html p4 reopen is the command and looks like it can mass-update
Damn,this typemap is working on new files, but "chenge filetype" doesnt do anything. I've triend both these options. Do you have clue why is that?
ou, I have to change it "by hand" and select new attribute? I thought it will read from typemap now
In this command it looks like you have to set filetype as well. I wish I could just say "use from typemap"
this reopen command isnt good for this I think, because it gives you message
//....dll - file(s) not opened on this client.
However in my p4 client logs i can see its using edit command and itworks fine
p4 edit -c default -t binary+w //....dll
unfortunatelly I have to do this for every filetype, I dont see option to just use "typemap definition" and edit all files in depot
hello! I know this is for source control, but anyone here has had success setting up Swarm (P4 Code Review) for perforce? I am using a Docker container for Swarm and Nginx to setup SSL to the website. I am very inexperienced with it. I have had success connecting to perforce however trying to go to localhost or the helix-swarm page recommended to use results in a no DNS address not found
Swarm is just a PHP web app with nothing particularly exotic about its setup. When in the process is the DNS issue?
@pulsar parcel turns out my ports were wrong and it ended up working
Hey guys, how do you work with redirectors in small team git projects? Are you always updating them ASAP and constantly syncing with each other to make sure you can update them without causing conficts? Or are there better ways to manage them?
file redirectors ?
best would be initially trying to not move files around, especially blueprints, have assets in places they have to be right away.
small changes that do not affect anyone can be pushed right away
if fixup may affect other assets it is usually done on a fixed schedule (bi-weekly or monthly) so team is aware of it.
on a rare occasions scheduled fixup can be deferred if some major task is being done on affected assets.
Small teams : fix as you go. Big teams : scheduled cleanups to avoid collisions.
Does anyone have experience migrating assets from one project to another target project that is under version control (P4V)?
Not that straightforward it seems.
For in stance say you have a master material in the target project under source control that has been updated in another project.
What I've found is that for migration to work, not only must the target master material be checked lout, the actual project must be closed before you attempt migration from another project.
Am I missing something? Does this seem correct?
sounds like you're keeping two separate mainline copies of an asset?
yes, because unreal doesn't know about state of target workspace and files by default are readonly... and as for closed editor, also yes, unreal teds to prevent any external operations on assets which are loaded in memory.
Though as hojo pointed out it might be better to create shared plugin/module where this base material will live and all of your projects will load that one shared plugin
How on Earth do people normally handle cpp Unreal projects in a distributed environment?
If binaries aren't supposed to be versioned, I have yet to figure out a way to let people who don't have Visual Studio work with the project.
Well, for unreal there are tools like UGS (Unreal Game Sync) if you combine that with Horde - or any other build server - for every code change build server automatically prebuilds binaries, stores them in a zip and then UGS automatically fetches those based on what version you are syncing to
generally precompiled binaries are almost byproducts of normal CI pipelines since it's a good practice to continuously compile and cook your game to test for regressions etc.
it's worth noting thought that most Unreal ecosystem that was made by Epic expects you to use perforce as your server, so Unreal Game Sync and Horde (Epic's build farm software and much more) is only compatible with perforce for other version controls (like git etc.) you'll have to search on the internet for community made tools or make some of your own
I am using Perforce.
But I'm not talking about compiled build. I mean actually opening the uproject file.
Those are the same thing. You either open the uproject and compile it yourself or you run the precompiled binaries for the project.
I thought he was talking about generating an exe of the project, sorry.
No, you distribute the dlls that are built when you build the editor.
For certain teams, checking those into source control can work (but isn't recommended).
Having an automated build (like Horde) build them and make them available (though something like UGS) is more reliable/safer.
As long as those are in the right place you should be able to "open" the uproject through the launcher, but you can do it more directly with commandline arguements to directly open the editor for the project.
What's UGS?
Unreal Game Sync
Hello. Does UGS works with git? I'm looking for a VCS solution where most of the collaborative work appears to be on a single scene.
Sadly not, UGS is currently working only with perforce
Pretty much all the tooling made by epic works almost exclusively with Perforce since that's what epic uses internally etc.
Okay, thanks for your answer. I'll stick for now with my current level containers/sublevels in the scene to avoid any conflicts.
We do not hve budget to manage Perforce costs
yeah, understandable, perforce can be quite costly - although it's also worth noting that it's free for up to 5 users and 20 workspaces... so small teams can use it for free (other than hosting costs, which is up to you where you decide to host etc.)
although UGS (Unreal Game Sync) doesn't really help with collaboration on single scene/level.. for that I'd recommend switching to OFPA (One File Per Actor) approach and then using git lfs locking to avoid stomping on each other's work
The thing is I'm a teacher at school and I build this game project with many students already (12) and more can potentially join. So the Perfoce business model does not correspond in this case.
yeah, makes sense, I just wanted to point that out just in case.
Sure, once we get something concrete (prototype) that I can present, I've planned to get at this point funds ^^
might be worth trying to contact perforce since iirc they provide free or at least reduced license costs for educational purposes (i.e. for use in classroom etc.)
Might considering it. Anyway, it's feasible to keep a git vcs and perforce side to side I guess?
Having two vcs for the same project would be quite difficult… but switching from one ti the other is quite easy if you don’t mind not having all the history
I was meaning having the code on a side and binary assets on Perforce, but yeah, you're right, should be hard to maintain.
Thanks for this
I've heard of people doing that and it sounds like a horror show every time
Got a tutorial for this?
not off-hand.
Git has a p4 command that supposedly lets you commicate with a Perforce Depot whilst using a local Git repo for your own changes until you're ready to push.
I have not experimented with it extensively myself, but it exists and might be worth looking into.
Thanks for this addition
Okay how hard is it to switch a Perforce classic depot to using Streams?
you wouldn't convert in place, you just make it and copy everything over
yeah this is more like doing a transfer from one train line to another, you'll have to just leave the old one and bring all your baggage onto the new one
Frick me that means redoing all of the setup for every user.
Most of whom are not especially comfortable with that process.
well the setup is simpler since you would ideally have prescribed virtual streams
and the workspace setup is just picking that stream
workspace mappings don't exist with streams
really, streams let the perforce admin set up the workspace mapping
and they also fixed the dumbass root folder issue of classic depots
where everyone always gets the root folder one level too high/too low
but to reiterate my #cpp point earlier, don't make a source build hard to integrate later. at some point or another you'll have to consider it so place the project somewhere like //myproject/main/MyProject/MyProject.uproject rather than the project being at the root
I do indeed hate this.
It is.
I think. The structure looks like "C:\Babyhead\malevolence_lane\Game Files\CapstonePrototype.uproject".
well I'm mostly saying for when you switch to a stream depot
you may want to consider keeping your classic depot for things like art source files if you don't want to keep them within the project's stream
Hey guys, I just setup Perforce server and i am hosting the project locally on my machine.
We are only 2 developers (2 users). but everytime i get the following error.
What am i doing wrong?
PS: Perforce works as expected. no problem so far.
Honestly I've not seen this specific error, though from the meaning I guess perforce itself can't find any IP address or MAC address to bind the license to (built-in free license is still a license under the hood)
it's probably specific to the p4 license -L which is supposed to print out all the interfaces, their IPs and mac addresses
so in theory it's safe to ignore this error until/if you get full license
Yeah, pretty weird.
indeed... you should get something like this:
anyone know when it comes to GitHub Desktop how I can set it to use LFS locally for my project which I have source control enabled for ??
I'm not pushing to Github which should be noted, purly using it locally as source control
I might be wrong about this, but lfs requires a server (either services such as GitHub or self-hosted variants) since all binary files are stored on the lfs server instead of directly inside git
Anyone know how I can setup Perforce Depot locally ?
well, perforce preferably works with a remote server, but you can use P4V DVCS feature which creates a local server, or you oculd install and run perforce server on your local machine.. DVCS is not 100% intended for this usecae, but it will work
so I tbf am using Perforce for my Unreal Engine projects so I've switched to use that instead cause I have that setup and working for local source control anyway
bassically I have the train sim world editor and I'm trying to set up local source control however issue I have is Git I can't do cause the files can get big
and Perforce is better but I only want to source control the specific plugin rather then the whole unreal engine priject
that's a little weird to be honest.
so my issue is I don't own the train sim world editor so I can't source control the whole unreal engine project
plus the their editor mounts paks from the main game so thatd prob mess with source control in bad way so I have to only source control the specific plugin which is my route
thats what I'm trying to do
or is there a way if I just set it up project wise, could I then tell perforce to only track certain plugins which I define ??
Then there's not really a point in using LFS.
LFS only changes what needs to be stored in your local repo. Those files still get versioned and they're still just as big.
The advantage is that, in distributed version control, you don't have every previous blob of the big file in your local repo, only the one you need to work.
You could localhost an LFS server on your own machine but I'm fairly certain it wouldn't save you any space. I can't say I've tried though so maybe I'm wrong.
Does anyone know if there's a definitive guide somewhere to what exactly should be submitted to Perforce for an Unreal source build and what shouldn't?
I'm trying to set up Horde for my Unreal hobby project and I'm basically ping ponging between states of having too much checked in (and now builds fail because files are read only due to Perforce), or not having enough checked in and now things that are expected to be there, aren't
I managed to at least get things to a state where I can now sync and build a new stream locally, without having to run Setup.bat.
But still getting build failures on incremental builds in Horde
Never mind, I'm an idiot! 🙂 My project is based on Lyra and I had the Lyra/Binaries directory checked in, that was the problem
generally it's:
- sync from git
- run setup.bat
- do not touch anything else or generate project files etc.
- submit everything to perforce
- submit your project files, excluding Saved, Intermediate and Binaries folder, both for the game itself but also all plugins... unless the plugin has third-party native DLL in those folders (such as DLSS) - TL;DR: no intermediate, saved or binary files that are built by unreal
that's all, with that your horde, and other tools like UGS will work just fine...
and then for day-to-day stuff, generally don't submit anything from Binaries, Intermediate or Saved, both in Engine and your Game project, unless you're explicitly updating libraries that are already pushed
Awesome thanks for the confirmation.
I ended up in trouble the first time because I did a reconcile after running Setup.bat.
I did a full obliterate and started from scratch.
Then the second time I realized the p4ignore I found online was too restrictive and I was missing a whole bunch of stuff. (It had stuff in there to filter out Templates and Samples, but it was filtering out any directory containing those strings, which breaks a whole bunch of stuff in Engine/Source/Programs)
I think I've finally got something working now. It just turned out I had Binaries from my Lyra project checked in
Got to go through this whole process again when I upgrade the engine version on this hobby project, so definitely need to make sure I do it consistently next time
So it seemed github desktop was quite pushy on lfs being done for some assets, obvs map files etc
But tbf im keeping it all local anyway so im happy for git to suggest etc, im not actually pushing anything to github
Hello,
Me and my team are having some trouble setting up source control on unreal engine and where wondering in anyone is available to help us out with the issue?
Or if anyone knows a way other than source control that would allow us to work on the same project in unreal engine control?
don't ask to ask, just ask
you do need source control for any serious project; there is no alternative to it, just different flavors of it
- what are you using : git / perforce etc
- where are you stuck
i am using preforce , when my team mates tyring to join i have this error Connect to server failed; check $P4PORT.
TCP connect to my ip failed.
connect: my ip : WSAETIMEDOUT, A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
i tried Tailscale to help but sitll
I would sanity check everything with
p4 set```
you're hosting locally inside your house/local network? do you think it's working fine for you locally, just your external teammates can't connect?
did you forward your ports before using tailscale?
after trying tailscale did you actually get them to connect to the correct IP inside tailscale?
I just found out about this Perforce alternative today. It's early days, but it looks very promising. I'm going to try it with a personal project soon.
Nice to see. Not sure how I feel about not the smart locks. Maybe I'm too deep in the perforce mindset.
It sucks that it's probably not that easy to swap perforce out in tools like horde and UGS.
Indeed. For now, switching from Perforce would not be practical for everyone. It's early days, though, and I'm just happy to see serious innovation in this arena.
Yeah, some competition/alternatives are steps in the right direction.
Already gets some trustworthy points for being able to self-host compared to other recent P4 competitors
Agreed. The server, CLI, and GUI are all contained in a tiny 7 MB executable, too.
You can even create a workspace with a built-in server if you're working alone. It's quite intriguing.
I think it's written in Jai, Jonathan Blow's programming language.
It looks pretty early though, so I'm not sure I'd trust it as the source of truth for a project, not without mirroring each commit to another SCM
Oh god really?
Right. It's early days. Definitely worth watching and experimenting with, though.
I was expecting a Rust vibe from the website