#source-control
1 messages Β· Page 60 of 1
Hey guys I've been using AWS and Perforce for the longest for my source control and data base management needs. But recently I've been developing with the Hololens 2 and I have been starting to learn Azure. I want to ask if it was possible to run Perforce off of Azure instead of AWS. I haven't been able to find and link to start my self up.
Is there anything I can do to make"reconcile offline work" work faster in Perforce?
Syncing perforce depot with latest source in github is pain in the ass because of huge wait times while reconciling changed files after git pull.
I've never tried it but there is a server setting option you can change to remove one extra check I think... I can't imagine it would speed it up a lot
probably a faster PC, likely its doing a hash check among other things
I'm using Ryzen 5950x & a pcie 4.0 m2 ssd. I don't think a faster pc is the solution for that, but thanks anyways :/
Ah likely not, Probably does the same on the server tho (I havent looked at perforces backend in forever), but its likely a function of cpu power (at both ends) and network speed
If you have a license, ask Sven
Thank you, will do! π
(if anyone knows, he probably does if he still works there)
You can avoid using perforce. Its "you are not supposed to touch files without notifying perforce server beforehand" workflow is just broken.
Avoiding perforce is not an option, we're using unreal game sync
PBSync π©
So me and a friend of mine are working on a project in our spare time, just a hobby with no real budget behind it. Would you guys recommend perforce (with a free aws server), or github if itβs just the two of us?
Azure DevOps
What is it responsible for?
would I talk about the UnrealMultiUserServer here?
I can't seem to find channel focused on Tools Related to UE4, or the Programs.
So, i'm sorry if this is in the in-correct section.
I'm looking for some help associated too a error in UnrealMultiUserServer I can't seem to find any documentation on any specific commandline args for defining a Repository within the Multi-User Server, anyone have a direction to point me in?
I see there is a Repositories.json file, but when I view it. It looks like @^ lol crazy.
I made a Forum post on the subject if anyone wants to look at it: https://forums.unrealengine.com/t/running-into-problems-with-unrealmultiuserserver-failed-to-create-session/248096/2
once i figure this out, will gladly share the knowledge on how to fix the issue.
I have already used: Multi-User Editing Reference | Unreal Engine Documentation As well as: https://cdn2.unrealengine.com/unreal-engine-remote-multi-user-editing-guide-404332864.pdf And have built a complete Stand Alone Unreal Multi-User Server in GCP utilizing this as a base: https://cdn2.unrealengine.com/unreal-engine-multi-user-cloud-setup-...
You think they offer the best free servers?
for your use, yes
to create a git repo, and push to a remote URL
perforce self hosted, or azure devops
hey guys, I made a pull request from another team members branch to get the latest changes, project wont open any more can I revert back to my last commit?
and you'd recommend perforce over git?
its a choice, both have their benefits - in larger teams perforce for sure if you have the $$, but if deffo <5 users then perforce free is pretty decent
Yeah it'll be a two-man project (3 people max but that's a big maybe)
Oh, azure devops is only for git I get it
is there a guide anywhere on how to set that up for ue4?
Also, are there any apps out there for it like github desktop, or would I need to learn command lines?
sourcetree, gitkraken, commandline, tortoisegit, there are literally hundreds of git-guis
u can deploy on gcp for perforce in about 5mins and have it up/running
How can I rename a folder safely in P4 without having to reupload it's content?
Just found "Rename/Move" π€¦ββοΈ
Perforce has lfs space limit?
What?
For example github has 1GB lfs limit, does perforce have something similar?
You host perforce yourself, the only limit is the server's resources.
github has 1gb provided for free, you can pay for as much as you want
idk theres any place that gives free perforce servers
github != git. perforce != <whatever perforce hosting you are talking about>
Also note that there's stuff like Subversion, so the world isn't black and white perforce and git.
Perforce just has a user limit and or a storage/bandwidth limit if you are using the cloud hosting
Hello Iβm trying to use GitHub desktop to send a finished project but when I upload it it wonβt let me download it on my computer. Could anyone assist?
what do you mean won't let you download
I switch from visual studio to Rider with a Project that uses Perforce.
I noticed that Rider only seems to track some files and not all of them. Anyone encountered that before and / or knows a solution?
hey! using git with bitbucket as repo and Fork as the UI client but whenever I try to pull remote changes and have Unreal open I'm getting several "unable to unlink old" errors, i.e. Unreal is locking the files I'm trying to pull changes for - any idea on how to fix this? closing Unreal works but that's obviously not viable..
well, unfortunately that's pretty much the only way
why is it not viable?
are yout pulling 40 times per minute?
not 40 times per minute but somewhat frequently yes, doing lots of exploratory development at this point. reason I'm asking is because we're coming from a Unity perspective and Unity does not have this issue.
yes, unity is very different
there is a git plugin for unreal though
idk if that would somehow circumvent the issue
I've never used it
Yeah, the Git plugin for Unreal does unload the content and reload it upon pull, just like all the other source control plugins
but it can crash with larger projects, because of its naive approach to reloading the entire project
my fork fixes this: https://github.com/ProjectBorealis/UE4GitPlugin
all right, sounds like something worth looking into at least, thank you both very much for your input! π
what does this red plus mean in terms of version control?
iirc it's that the file is going to be added (exists in your machine but not yet in the remote repo)
the tick is that an already existing file has been checked out from your side
a lock is that someone else has checked that file out
Thanks that explains a lot, I dont use remote as github only gives you 1gb in term of git lfs space
think of it then as "this file doesn't form part of the asset/file registry of this repo/branch/etc yet"
I have an engine fork and have been making some minor changes on my local machine. I wanted to work on my laptop so I got my repo over there as well but there are differences. The repo I just pulled has its latest commit from 2020 while my other version has its latest commit from 2021.
according to git status they are both on the release branch and there are no pending changes. What could cause this difference?
nevermind, git pull from the command line does something else than the gui. how can version control be this pants on head retarded
hey guys, I'm having problems setting up unreal engine's github version. When I tried the setup it gave me this error. Does anyone know what's causing this problem?
youre pulling from different remotes? try merging from an upstream remote
it was literally just github desktop being glitched. using git bash git pull worked fine
ah ok, weird
For the UE4GitPlugin is there a way it can push to server as well?
Also is there a way to automatically add only the files actually in use?
When you import packs such as Brushify they can use a lot of space...
QQ - Has anyone ever tried to share an art-only version of the project for level designers/artists etc.?
Not sure what that workflow would look like, and whether it would even be worth it
I don't really see how that would work. UGC workflow is useful if you have Engine source build but you don't want artists etc to sync/build the Engine code themselves.
Just share pre-built binaries of the Project/Editor modules?
hey everyone. i'm wondering if anyone has any good videos or tutorials on managing workflows for marketplace assets? the thing i'm struggling to understand: am i supposed to check in all of my marketplace assets into version control? or just the ones i use? if it's just the ones i use, how do i copy all of the referencing assets over to my game's folder? that way i avoid checking in the marketplace asset folders. thanks
edit: the only workflows that currently make sense to me are to either check in all of the marketplace assets into version control, or use some kind of empty project to test out other marketplace assets and then migrate those over. is this how other teams do it?
just go to your file manager where your game is and copy paste it in your current u will get that
pretty much your edit
test project + migrate or version everything in main project
Hello guys, I have big issue with SourceTree, I dont understand but I don't see my files on Unreal, but on my Windows files I have all folders, same on Sourcetree.
I used git on sourcetree
I past 1 week to found my problem, but I did not find a solution that corresponded
Thank you all
How do you branch for blueprints in Perforce? I'm coming from github background and I have no Idea how to make a branch in perforce
Any suggestions or tutorials?
Branching + Unreal are not really compatible due to the binary assets are not really mergable.
I'd strongly recommend sticking to Trunk based development.
is there any extra setup needed for this or just plug and play?
I assume we still aren't going to be using the sync option inside editor, and will be closing unreal, syncing project, reopening?
When you say crashes on big projects, how big are we talking?
is locking working?
will be giving it a try this week
is there any extra setup needed for this or just plug and play?
plug and play, but it makes some assumptions about your repo configuration, like umaps and uassets are lockable, git+lfs are the latest version, and you have no submodules (though the latter is already assumed in the base plugin).
I assume we still aren't going to be using the sync option inside editor, and will be closing unreal, syncing project, reopening?
no, it's fixed in the fork.
When you say crashes on big projects, how big are we talking?
i wouldn't be able to really tell, but it's based on loading every single asset in your project. probably a limit of your RAM. and to clarify, this is fixed in this version. it only reloads what is needed.
is locking working?
yes, it's greatly enhanced.
Thank you for your reply. This is exciting, we are looking forward to trying this π cheers!
Can this be used with 4.27?
also should we download the version under the release section? looks like pb changes is further ahead then release?
just download the repo, and should be source compatible with 4.27
@ornate willow
Thank you. Are you using Azure? When I first started with it, I found that pushes (over 2gb?) wouldn't work sometimes unless everyone ran config http.version HTTP/1.1, (as recommended on stackoverflow) do you do this as well?
using github
but i used azure for a game jam and did experience that i think, but i think it got fixed when we used a org repo instead of a personal (i think)
Do I need to run both Setup.bat & GenerateProjectFiles.bat everytime I upgrade the engine source?
I usually don't modify but just use the source. And I use git pull etc to get the latest version but I am not sure if I really need to run those .bat.
#engine-source but yes
Im developing a project for different versions of unreal. In github it would be as simple as having a branch for each version. I would only copy up assets from lower versions and never merge. Is this possible in Perforce?
and my main branch would be the lowest supported version for obvious reasons.
thank you.
yes, it's possible, this is what they do on fortnite. its called status/state branches in ue4. it also has to block modifications made in the downstream branches, in upstream branches.
has support in both perforce and git plugins for ue4.
Anyone tried source control on hetzner server?
Thanks a lot. is there any link that I can take a look and study about?
I'm in a Perforce-flavored pickle. I'm running a server on Ubuntu and I ran some routine updates. There was an update for helix-p4dctl that broke it. The update can't finish installing and the service will no longer start.
Running p4dctl start master returns this:
p4dctl error:
'master' p4d: '/opt/perforce/sbin/p4d' exited with status 255.
Started 0 services.
p4dctl error:
Not all services started successfully.
You need to probably update the p4 database
Easy way to tell - su - <perforce Linux user> -s/bin/bash
cd to the server directory, probably something like /opt/perforce/servers/master
Run /opt/perforce/sbin/p4d
If you need a database upgrade it'll tell you exactly what to do
OK. Is this also related to why the p4dctl update won't complete?
Probably
Interesting. I would have never guessed.
I'll try running p4d manually and see if it says something about a db upgrade.
Nothing unusual. It just says:
Perforce db files in '.' will be created if missing...
Perforce Server starting...
Which if I recall is normal when running p4d.
Hmm... Yeah that's a normal startup. Try starting it under p4ctl again?
Might need to find the log files if it still doesn't launch under p4ctl
Same error. exited with status 255.
Where can I find readable Perforce logs? I only see .csv files in the logs folder.
Try looking through /var/log
Hm, nothing related to p4dctl or Perforce at all.
I'm not sure where to look otherwise.
Damn. That's all I've got then. It's super weird that running p4d manually works fine...
Yeah. It's definitely something wrong with the p4dctl service. I just can't figure out what.
Any time I run apt-get upgrade it gets stuck trying to finish installing the p4dctl update and fails.
I checked the p4dctl config files and they seem fine.
They match the configs on another server I have where everything is working smoothly.
I'm guessing it must be the actual service running p4dctl, not something with Perforce itself.
But my client can't continue their work until I solve this. π
Could try running a database upgrade even though it doesn't seem to want one. From the docs - p4dctl exec -t p4d <service name> β- -xu
So uh...
Apparently the superuser account I used to manage the server β the one that was created when I install Perforce β has been deleted.
That would certainly explain why p4dctl doesn't work, because it's configuration has P4USER set to that user.
Well scratch that. Updating the config with another superuser who still exists does not fix the problem.
Thats quite a pickle you got yourself in there
Yes...
what is in the service file?
It's the same as the one on another server I have that's working fine. π€
The perforce Linux user? No.
nah p4dctl user
That's the user that owns p4dctl.
Yeah, I saw that note. I've checked privileges, ownership, and config. They're all normal. π¦
All 3 are identical to a second server that works.
did you check user:group folder permissions?
Hm, no but I'm not sure why a package update would have modified that.
I have no idea, ive been out of p4 land for a while
It's a dangerous land. You're better off. lol
This break happened when I tried installing an update for helix-p4dctl.
apt-get can't finish installing the package. Always errors out.
revert the upgrade with apt/dpkg?
Can I still do that if the upgrade never finished?
To a point, did you try a --fix-missing?
You can revert it using the history.log too
that said, snapshot before updating is always a wise idea
I am probably not the wisest Linux user. lol
I do have automatic backups for my droplets though (using DigitalOcean).
Trying to avoid reverting to a backup here if I don't have to because my client will lose a lot of work.
But it's a fallback if I need it.
Its fixable without that, but its a matter of time
How can I use history.log to revert helix-p4dctl? I've never done that before.
I'm reading the file now and I see a list of apt-get commands that were executed.
A lot of them say Error: Sub-process /usr/bin/dpkg returned an error code (1).
Youhave to read through and revert what it did
ok dpkg error is a start
Run this sudo dpkg --configure -a
OK. Running that spit out the helix-p4dctl installation errors.
that should get you going?
I've already seen it, and unless I'm missing something, it's just telling me the init.d script failed to start because p4dctl failed to connect to the server. That's why I went about investigating the p4dctl config, which seems to be fine...
Ooh I wonder, Did the certificate change
causing the connection to be invalidated
(I think p4 call it fingerprint trust)
Jesus I hope not. Perforce is so bad about SSL cert expiration. In P4V it says "Certificate date range invalid".
That happened to me once, and renewing the cert was such a pain that I wrote a blog post about it to save others from that. lmao
Have a look at connecting via p4v manually if it pops up finger print error
if it does then you can do something like p4dctl trust <<key>> itc
P4V won't get anywhere because the Perforce server isn't running.
manual start?
I could manually start p4d and try that, I guess.
p4dctl didnt really exist when I was last in perforce land, (we wrote our own init scripts), but cert errors would explain that behavior
and upgrades can invalidate the fingerprint
meaning you need to p4 trust before your host can connect to the p4 server
OK I manually started the server, and I see a new error I've never seen:
Remove SSL protocol prefix from P4PORT or fix the TLS settings.
I have no idea what that means.
connect to server over non ssl (remove the ssl from ssl:ip:port)
I didn't even think that would be allowed. Huh.
ye you can connect in cleartext
then youll have to poke arouind in the TLS/cert settings
because something is probably expired/incorrect
It says "no such user" no matter which username I try to connect with. π°
Same.
Sounds like you broke the userdb
I'm not even sure how.
Do you have paid support?
No.
I'm not sure how I went from a broken helix-p4dctl update to a broke user db, but wow.
I dont remember the commands to look at users on the server honestly
its been too long
I can't do much since p4 doesn't work.
Oh, I could manually start the server then p4.
ye
p4 & in one window
then run stuff against it
These kinda problems are ones that can take hours to debug
I know, and that's what I'm afraid of.
You can almost always fix it
OK, I don't know how to run commands with the perforce user while p4d is running.
I tried a separate terminal but that didn't work.
I did, but running p4d takes over the terminal and requires Ctrl+C to stop it.
I need another process to do stuff at the same time.
I tried switching to the perforce user in a different terminal, and when I do p4 gives me the "Connect to server failed: check $P4PORT" error.
Ah yeah, that did it.
P4PORT was perforce:1666. I set it to localhost:1666 and now p4 commands are working.
Enjoy
Now to see if my users have been obliterated.
Enjoy! Thanks for troubleshooting with me. Always helps to talk to someone else.
I'll let you know how it goes.
When I run p4 info it says my server root is ., which is definitely wrong. It should be /opt/perforce/servers/master/root.
I tried updating it with p4 set P4ROOT but that doesn't have an affect. p4 info still reports the root as .
How did you start it manually? (How did you invoke p4d) ? You can set all of the startup options with flags, i.e. Set the root to your actual root and also run it as a daemon so you don't need two terminals
I'm only starting it manually for troubleshooting purposes. I normally use p4dctl to manage this, but that's not working which is why I'm in this position.
I actually don't use p4dctl at all. Lol. I'm dumb for that though π
π
Been manually running it for like ten years now ... Only need to reboot my server once or twice a year though
I've been using p4dctl for the last few years. It's handy. When you set up a new Perforce server these days, it automatically creates a startup script and all that.
I meant to say service, not script. It creates a service for running p4d. p4dctl is a utility for starting, stopping, and checking the status of the service.
I mean if I was in your position I would probably 1) backup the actual server 2) uninstall p4d and friends and reinstall
I have automatic backups configured for the server (I'm on DigitalOcean).
The last one was generated on Saturday, so I'm going to revert to that if I can't solve it myself very soon.
I was saving it for a last resort so my clients don't lose any work.
But at this rate, it's looking like the most practical solution.
I don't understand, I thought your problem was with the programs not your server
Or are you still unsure if your server is borked
By server I meant the actual server, not the Perforce server.
My problems are many: a helix-p4dctl update broke it so the service can't run anymore. Running p4d manually, I discovered the user db might be broken (somehow) because it says there are no users.
It's been a daisy chain of problems, and I don't know how it got this bad.
Probably the worst Perforce trouble I've had in years.
You're sure you started your server manually properly?
It sounds like you didn't start your server but made a new one
Just from some of what you wrote earlier
I guess I'm not sure. I just ran /opt/perforce/sbin/p4d in the server directory. No flags.
I'll get you a proper example
OK.
./p4d -d -In p4master -p 1944 -r /opt/perforce/servers/p4master -J /srv/sysdisk02/journal
That would explain why running p4 changes returns nothing.
If running manually it'll be important to set the real root and any journal setting you normally had, if you did. Environment variables are supposed to work but ... When in doubt feed them right in like this
If you can run it manually and determine it's working fine then I would try to backup p4 server root and reinstall the programs before bombing it back into a history snapshot
OK. My journal is in the server directory. Do I still need to feed that path in with the -J argument?
I think that's the default so probably not
OK.
Now that you mention it: the first time I manually ran p4d today, it said:
Perforce db files in '.' will be created if missing...
Perforce Server starting...
Subsequent runs only say:
Perforce Server starting...
I'm guessing that's another indication that I may have created a new server.
Still doesn't explain why my p4dctl broke, because that happened before I ran p4d manually. But at least this is something.
Interesting. I ran p4d with the arguments you mentioned. When I run it in servers/master it works, and that does appear to be a new server I accidentally created β although most of the db files say July 2020 when I do ls -l, so that's odd. BUT when I run p4d with those arguments in servers/master/root which is where my server actually is, nothing happens.
Or at least nothing is returned. It doesn't say Perforce starting... in that case.
And p4 commands don't work afterwards, so I presume that means it didn't start the server.
that's a bit scary :\
So is this: if I run sudo apt-get upgrade I see this:
The following packages were automatically installed and are no longer required:
helix-cli helix-cli-base helix-p4d-base helix-p4d-base-20.2 net-tools
Use 'sudo apt autoremove' to remove them.
Why would apt think all the Perforce packages are no longer required? π°
They might have different packages they were superceded by. Do a search for other helix packages.
I wouldn't actually uninstall until you confirm though
That's true.
At this point I just need to figure out how to run my Perforce server so I can check when the last commit was made.
So I know how much progress we lose if I restore the VPS from backup.
dumb question but did you actually try connecting to the server (p4v) after starting it before?
i mean like 45 minutes ago
Yes. No change.
Definitely seems you were right that I accidentally created another server.
Right now I'm trying to figure out why the original server won't start.
alrighty. was just checking because it might not produce any output (i.e. "perforce starting") when run properly in daemon mode, and p4 commands might not be working unless you're manually specifying p4 user and pass in them too (I never rely on the env variables when debugging)
Right.
The amount of times I've had to set P4PORT, P4USER, etc. manually over the years is too damn high. lol
Trying to login with P4V after that silent run returned this:
Connect to server failed; check $P4PORT.
connect: [redacted]:1666: WSAECONNREFUSED, No connection could be made because the target machine actively refused it.
Indicating to me that the server was not running.
you might have done this by now but you could also omit the -d command and let it take over the terminal as per your original test, maybe it'll spit out some output that way. grabbing at straws of course by now π
only critical flags should just be the root and port (and journal but omit for default)
Still nothing. π¦
There aren't a lot of straws left to grasp at. I've never seen a Perforce server just not run before.
In my experience, if you run p4d in a folder that doesn't already have a server, it creates a new one (as we discussed earlier).
So I don't know what zero output means. Been looking through the docs for guidance, but no luck yet.
I found the log. I was looking at it the whole time but didn't realize there was more to see because scrolling with the mouse wheel is decoupled from scrolling with the down arrow.
@merry verge You were right all along: helix-p4dctl and p4d were updated so the db needed to be upgraded. I could've sworn I did that when you told me, but I just tried it again and now the service started. I'm back up and running. I could cry. lol
Ugh I feel you man haha. I've run into some weird issues like that before... Glad it's solved now.
I only tried again because I finally found the end of the log file and there were dozens of lines complaining about upgrading the db to "level 39". I wish that would've output to the command line, too.
Yeah. At this point I'm just glad it's solved so my client and I can both get back to work. π
Not the first time I've spent hours troubleshooting Perforce only to find the solution was simple (but not clear).
Yeeeep. I wish there were cheaper managed hosting options than assembla... Would help avoid this shit. But oh well...
Side note: I just learned about operator users and how they conveniently allow sys admin tasks without taking up a seat, but apparently they can't use P4Admin. Welp... lol
I guess it's really just a user for p4 tasks.
Oh well. Still a convenient feature that will make my life a little easier.
Well, maybe a little easier. It honestly can't do much that's useful. I can't even see what users exist or what the latest changelist is.
Hey guys, how would you fix this issue when let's say you're trying build unreal engine from source and you're using p4v. The .sln has been built successfully but whenever I try to load the project it's still telling me to try rebuilding from the source manually
hi has anybody encountered this before when trying to pull containers --
sudo docker pull ghcr.io/epicgames/unreal-engine:dev-4.27
Error response from daemon: manifest unknown
...i have already successfully linked my github and epic accounts, and gotten a personal access token to login with, still can't seem to get the images though...
actually https://ghcr.io/epicgames/unreal-engine still shows me 404... is that separately accessed than the unreal source repo (which I can definitely see) ?
Anyone ever encountered perforce syncing at like 1mbps?
Server is on DigitalOcean in London, I'm in US, I'm getting like 1mbps, ppl in europe are getting like 400
my ping is 70 to server
if someone zipped the built source it wont work, you need a special rocket build. Else you just need to rebuild it once
Either its taking ages to do the compression (due to weak cpu on one site) or its a function of your network quality/peering
Where do you host your unreal project remotes?
since both Github and Gitlab have limited LFS storage, i dont see any obvious solution here
limited if you want free yes
I think going the free route and using git Azure is probably your best bet
what does it do better?
It's free up to 5 users, I don't think they have a storage limit
11gb is a lot if you properly use lfs
A quick noobie question about Perforce:
I was working on a nice little class today, saved it but didn't submit changes.
I then rolled back to a previous version but changed my mind. Any way to go back to the future and get the pre-rollback version?
Thanks for your time
ye can vouch for azure
I don't think it's recoverrable.
but if it was a blueprint, UE4 makes backup of your assets from time to time
It was indeed a blueprint. I forgot about backups. thanks a bunch
it's located under Saved folder, hopefully you can find a good backup.
Is there a service for free SVN hosting as well?
i kinda liked that when i used it at a studio
11gb is LFS most certainly, it caches files in .git/lfs/objects
Hi, my Unreal project has about 30GB of content, however its full project size is ballooning increasingly over time to now 166GB. Normally I haven't seen a project file balloon this way. However, this is my first time using Git LFS collaborating with a small team. Previously I've used Perforce for larger Unreal projects. Not sure if that's a contributing factor, but that's the only difference I can think of. Any suggestions for managing this? Thanks!
Is there any way to diff a level?
A bug was introduced months ago in one of my levels but I have no idea what I changed to cause the bug
because I can't diff it to see what I changed
Shallow/Partial Clones are functionally the only way
perforce only keeps files on server, with git you have a copy of the whole repo history by default, so it taking more space is expected
oh god, that is what I was afraid of
I'm not familiar with that method. Is that something I could tell my team to easily do through the default GitHub desktop app? I'm dealing mainly with artists who only know the basics.
And this is a Good Thing. It makes people think before throwing terabytes of assets into repository.
It has its benefits yes, it also does have some drawbacks
I know the commandline etc, but I never use github desktop app so, no idea if you can shallow clone (set depth n ) or do partial clones (instructions for that is posted in the channel if you search)
Okay thank you. I feel confident I will get it working on my side, but will see if I can find an easy way for others who are less used to source control.
Anyone knows how to convert classic depot into stream depot?
Im following this instructions https://community.perforce.com/s/article/15345
but i get this error for first command I enter p4 -u <User> init -p <OriginalServerPort>
Matching server configuration from '....:port':
case-sensitive (-C0), unicode (-xi)
p4d server failed to initialize. A 2015.1 or later p4d server
must be in your path and runable.
Execution Failed: p4d.exe -r d:\Perforce\Server\.p4root -xn -u kazem -C0 -q -Joff: The system cannot find the file specified.
I have the latest version of P4V installed. actually I had to remove all perforce apps including Helix Versioning system. then installed P4V so in order to enable DVCS.
I checked and I do have p4d.exe inside ProgramFiles/Perforce/DVCS/p4d.exe
Should I add something to my environment variables?
Git LFS maintains a cache of files in .git/lfs/objects. You can use git-lfs prune to clean it up, but keep in mind it still has to cache all files in your working tree, so you can only get to about double size (~60GB in your case)
Partial clones and shallow clones like mentioned before are not at all a solution with LFS
With LFS, history is actually quite small
If you are on Mac, you can run git-lfs dedup to reduce the file duplication
(or Windows with ReFS, Linux with a CoW filesystem like btrfs)
There is also working on going to reduce the necessity for a full working tree cache of all objects, but as it stands, Git LFS checks out the full working tree upon pull, rather than updating changed files. This causes uncached files (but already downloaded to working tree) files to redownload into the LFS objects folder
I just had to copy p4d.exe into path that I was running the command from.
Ah okay thanks, that sounds good. I knew LFS stored data inefficiently remotely but had no idea it also stored it locally. 60gb is way better than 160
Oh good call on lfs prune - shallow clones do work to an extent tho
no, not at all
LFS does not fetch objects unless they're referenced, unless you specifically use git lfs fetch --recent
and that only does reachable objects within the last 7 days by default
LFS pointers, which get stored in git, are <2KB files, which get changed minimally when an LFS object changes
shallow clones will only help to reduce the usage of this part, which is negligible compared to most config & source files in your repo
and certainly negligible compared to LFS objects, which are many megabytes large in UE4 projects
Thanks, this is very helpful. However, I am baffled why the default behavior is to store the entire repo history locally? I get that the repo itself is storing all of that data, but it just didn't occur to me that it would store all of it locally as well. If I'm going backwards in my commit history I'm still accessing the remote repo and not looking at my local files.
You seem to know things about git-lfs... Any idea when git-lfs prune --force will get released? I've been waiting for it for ages, and actually implemented a substitute myself when I got tired of waiting. Because that would solve the discussed issue by wiping everything git lfs stores.
Accessing local data
- Is always faster
- The only way to work when you are offline
- More reliable
If you're sure that you pushed everything to the repo, you can just completely remove .git/lfs. What are you waiting for exactly? Like, issue number.
Thanks everyone - was super easy to fix with pruning. And now I see how I can completely remove the .git/lfs folder if desired (although I won't currently).
In terms of local data, I might also misunderstand and it might be working off my local data more than I realize.
for some of the repos I have we have a fair few files that arent LFS so shallow cloning drops about 1gb off the repo size
also lfs.pruneoffsetdays is useful
The git-lfs official docs mentions the --force option for prune, though that option is nowhere to be found on any lfs release.
https://github.com/git-lfs/git-lfs/blob/main/docs/man/git-lfs-prune.1.ronn
that's the main branch docs, 2.14 is pending, got no idea when it'll be released D:
it doesn't work very well last time i tried
because checkout will redownload all objects missing
instead of new objects required to replace pointer files
right, but you should be using LFS for any file that's decently large :) and shallow clones aren't so good anymore. better to use blobless clones afaik
uhh to a point
And shallow clones are fine, you just need to understand the limitations
shallow clones don't support many modern git features due to the lack of history
those features can speed up large repos
depends what you are doing with the repo
I mostly use shallow clones for Build infra
is this build infra permanent or provisioned in a VM per build?
Mix π
if it's the former, shallow clones are much slower than pulling, and they do slow down pulls even if you do pull after that
pulls take around 15 sec at worst π - as i said its workable, you just need to know the caveats and how to set it up
But yes, its a fair point about it not applying to LFS
local history is good to have. makes things fast and reliable. but obviously, keeping all asset history is not so useful for most cases. it's really just a consequence of LFS's origins and some lack of tuning for game dev workflows
sounds worse than a few hundred milliseconds, at similar space usage 
for our repo, we do an initial shallow clone for all machines, and do a background unshallow
Thanks, got it. Ultimately working with LFS is not as bad as I expected. I have read some people who hate using LFS with Unreal, but while it's not the same as Plastic or Perforce, it seems to not be a big hassle for me.
I think a lot of people have not configured it correctly, or used it very long ago. But mostly, there seems to be a stigma against Git from people who never used it, and that's where I've seen the most criticism, funnily enough. A lot of people just assume Git doesn't do this or that, but imo, it's the most well architectured source control software, and nothing comes close.
But to be fair, most of people are saying the truth, but only a truth of Git from very long ago. LFS has improved and become front and center, Git has become much faster for large repos thanks to Microsoft and Google, and the UE4 experience has gotten better.
I see, that does make sense! A lot of search results on the topic can end up being older as well.
I have had the same experience. Most of the criticism I hear is from people who tried LFS years ago when it was in its infancy. Some of them hadn't even used Git prior to trying LFS, so the entire experience was foreign to them.
Meanwhile, Perforce, while generally good at what it does, has serious design flaws; such as allowing a super user to remove their own permissions.
Powerful when it works; a nightmare when it doesn't.
Yeah, I haven't used Perforce myself, but I've looked at a lot about it. It's kinda worrying to me that they're owned by an investment company, with much of their talent leaving in the acquisition in 2016. And that, combined with the only new feature since then being streams, something that I've seen a lot of unhappiness with, to the point that even Epic and others have made a completely new version of it in UGS, makes me happy not to use Perforce. I also think that while the server centric model is cool and powerful, it has a lot of pitfalls especially with remote work where the server latency becomes a critical problem.
I'm a bit confused by "Epic and others have made a completely new version of it in UGS"... my understanding is they leverage streams if you have them. They didn't reimplement perforce's branching.
in fact I'm pretty sure UGS is stream-agnostic - it doesn't care if you use them or not. It's just part of the branch path as far as it knows.
I thought UGS was just a custom client for wrangling Perforce projects.
it is, sort of
As far as I understood from the talks, the filter categories they have was using custom logic
I believe that's more about categorizing what good builds are for different groups of people
nothing to do with branching
On an average day, Epic developers submit over 500 changes to Fortnite's mainline. In this talk, Lead Engineer Ben Marsh discusses Epic's development infrastructure and workflow including how we set up our branches, how we get builds of the editor to our artists and designers, how we set up our build system and escalate problems to devs, and how...
I'm still very curious to learn more about the virtual asset system coming in UE5, and what that means for version control.
Here they say they were unhappy with streams.
they seem to be unhappy specifically with virtual streams
which is one specific feature
Ok, thank you
But still, I see a lot of complaints about don't use this or that feature in Perforce, it's garbage
I just gave an example which I didn't use the exact terminology for, but the point still stands imo
I've almost never seen that. There are a lot of features, and not everyone needs them because they were designed with specific workflows in mind. If you don't use those features, it isn't like they get in your way - you just don't use them.
It's already in UE5, and it's just an extension to source control, currently implemented in Perforce plugin
It's not in Early Access as far as I know.
I use launcher builds so if it's on main, I'm out of the loop.
Nah, that's not what I'm talking about, I'm talking about people specifically saying they had to compromise with a workflow because of Perforce features being terrible
I'm sure it's worked for you
I'm curious to know what those are, because the virtual stream bit wasn't really a perforce feature being garbage but that virtual streams weren't really made for the workflow they had.
Yes, but shouldn't software for a given purpose accomodate those workflows?
But it does... they didn't completely sidestep perforce, they just avoided one feature.
And I could go on at length about other features, but I just don't care enough to entertain the questions from you
Not saying they did. I'm saying they had to implement something outside the software, for a case that should be totally provided for within the software
And with that, I'm going to bounce from this convo, because I don't have interest in convincing siliex#1214 of anything
I merely was dropping a tangential rant :)
Fair enough, it just seems unfair to say "perforce has garbage features" and then not expand on it. I get you personally don't like perforce for whatever reasons, and I won't try to convince you otherwise either.
Cheers!
Yeah, that's right, not in early access, I thought it was, sorry. But here's the commit: https://github.com/EpicGames/UnrealEngine/commit/18dc0643353634cdd445ffa7dde9b40135ebd75e
essentially, just asks the remote, spit out contents of this file, and then writes that
Interesting. Looks like the system might be called Mirage.
Cool (and fitting) name for such a feature.
yeah, can't wait to see how it works in total, and implement it in Git :)
it all really depends on how they plan to describe the virtualized assets
Yeah. I noticed it says only implemented in Perforce "at the moment", so they might have plans to do more.
Fixed: it's garbage that you're also expected to pay for.
The biggest issue with git is mostly just teaching artists who are used to the perforce way of working
Their business model is one of my major gripes about the company.
Free for 5 users, but when you want to add #6, everyone becomes a paid seat and they only have annual plans. So you go from free to over $3,000 a year.
"free for 5" is just a demoversion
Perforce has its issues (price, p4v is just pretty garbage, and the way some of their staff act), but it does handle huge repos a bit better than git
Sure. Both have their issues. When Perforce is working, it does the job very well.
it does handle huge repos a bit better than git
Sorry, no.p4 reconcileis orders of magnitude slower thangit status(and there are technical reasons whyp4 reconcileis so bad), even though they answer the same question - find out what is modified in working copy. And the larger your working copy, the more painfulp4 reconcilebecomes.
Never had big issues with it back when I last used p4 (circa 2015-2016)
Even with huge repos
But we also basiclaly never used work offline for perforce
It would be strange if you had issues with the thing that you do not use!
I am a huge proponent of git and use it for pretty much all the stuff I work on now, but I do recognise p4 does have some things that do make it work well for some cases
git is bae until you have artists that don't get git
i cant upload my unreal project to Azure
but could push a smaller test repo with only a text file
well you're not showing full log
any ideas?
logs don't say much here π€
still the same if you keep trying?
my guess would be you hit some sort of limit
but idk
i've tried it a couple of times now
there is a 5GB limit for pushes, but apparently it doesnt apply to LFS objects
and i added .uasset files to LFS, as it says in my gitattributes
.uasset filter=lfs diff=lfs merge=lfs -text
oh okay the regular "objects" dir is still 10GB
I'm wondering at what point its easier to just set up my own server to host this stuff lol
Try running git config http.version HTTP/1.1 also make sure your host url are for visual studio instead of the default azure.dev
I needed to change my host URL to https://{organisation}.visualstudio.com
Both of those I needed to do to get azure to work. I need to run the git config on every repo I create
but i had it working on another test repo i created today
Yeah same here. Then you try to push something close to 2GB and it doesnβt work
Sometimes it was working, sometimes it didnβt. Those were the steps I took after hours and hours of troubleshooting, and thatβs currently how azure is working for us
Also make sure your gitattributes are pushed to your repo first
i'll try that
Anyone run into this error utilizing the MultiUser Server
SourceControl: Error: CommandMessage Command: UpdateStatus, Error: E:/UE_4.27/Engine/Content/... - file(s) not in client view.
SourceControl: Error: CommandMessage Command: UpdateStatus, Error: E:/UE_4.27/Engine/Plugins/2D/Paper2D/Content/... - file(s) not in client view.
SourceControl: Error: CommandMessage Command: UpdateStatus, Error: E:/UE_4.27/Engine/Plugins/Enterprise/DatasmithContent/Content/... - file(s) not in client view.
SourceControl: Error: CommandMessage Command: UpdateStatus, Error: E:/UE_4.27/Engine/Plugins/FX/Niagara/Content/... - file(s) not in client view.
SourceControl: Error: CommandMessage Command: UpdateStatus, Error: E:/UE_4.27/Engine/Plugins/Editor/SpeedTreeImporter/Content/... - file(s) not in client view.
SourceControl: Error: CommandMessage Command: UpdateStatus, Error: E:/UE_4.27/Engine/Plugins/Editor/GeometryMode/Content/... - file(s) not in client view.
@verbal terrace I've had issues with personal repos that were not present on organization repos. Maybe you could try an organization repo instead of a personal one?
i think it is an organization repo, the organization is just called "Thane5" because i didnt find a way to make a personal one when i made it
Is anyone here a Plastic SCM whiz? I've checked out a bunch of files and I want to revert/checkin all the ones that are identical to the server. How would I do this?
Nevermind, found it!
@ornate willow i think the git config http.version HTTP/1.1 did the trick
Hey Guys, this question may be quite stupid, but im new to Perforce, so yesterday i set up a Helix Perforce server and made a WorkSpace, me and my friend are both connected, i tried cloning the workspace onto his device and stuff like that, but my question is, how to work together in one WorkSpace, since i saw a Perforce forum saying: Working together in 1 WorkSpace is ACTIVLY DISCOURAGED, but how am i supposed to work on the same files as my buddy then? Greetings Eagle.
A 'workspace' tracks what version of files you have on your machine, so you should have a unique workspace for each machine you sync the project to.
He should make his own workspace which syncs the Depot in the same way your workspace is setup then you can work on the same project π
How you can undo absense of any changes? That doesn't make any sense.
That is a classic
probably undo check out?
It's basically undoing checkout if the file is still identical to the server. Sometimes files get checked out by accident, it happens a lot!
ahh honestly that makes a lot of sense... thanks buddy!
Huh. In P4 you can even commit file without changes. And P4 will claim that now file has a newer revision that is 100% identical to the previous one.
Would anyone be able to help me out with GitHub for team collaboration within unreal engine? If you could help please dm me.
Nice thats good news. Also sometimes if you get completed with errors when pushing and pulling, just try it again it should go through on the second time. Very strange but it's whats happened to me a few times, it might have been sourcetree I was using instead of azure
- That thing won't show any files as modified.
- You need to be very explicit about your will to create an empty commit
and perforce has an option to not submit unchanged files. Why it's not the default idk, probably for backwards compatibility (makes sense for p4, doesn't really make sense for P4V)
as for why you'd ever want to submit unchanged files... to test triggers or CI I guess? definitely an odd default though.
shhh siliex, don't disrupt the perforce haters in their natural habitat
So, does submitting unchanged files (and recording that fact in repo history) make any sense to you? We're all ears, what's the benefit of such thing.
I am in simple agreement with what siliex said (and why yes, I do have several dozen iterations of unchanged file submissions to test my CI triggers
)
I believe my statement comes down to: It is in fact useful to have the ability to submit unchanged files, especially to test CI (and both perforce and git let you do this). That perforce defaults to allowing you to do so rather than it being opt-in like git is is odd but meh.
The point is to test CI triggers (or triggers for other systems), not just the CI itself.
enough experience will simply reveal that: git has things that suck about it, and perforce has things that suck about it, and jenkins has things that suck about it, and last but not least, teamcity has things that suck about it.
... 
which makes the real solution to use a barbaric amalgamation of every VCS in existence. Store your git repos in an SVN repo in a perforce depot. And have jenkins trigger on git changes but teamcity trigger on perforce changes.
you zip up the perforce server directory and store that on dropbox, every time someone needs to work on the project they start up their own perforce server instance.
I think I'll continue to use the VCS which is actively used by the largest software projects in the world like Chromium, Linux, Windows and Office
and is maintained by the developers of that software, rather than depending on an investment company to slowly update the software while they rake in shittons of money mostly dependent on legacy usage
You seem to be under the impression that I don't like git - that's not true. I do, but I also think that perforce is better suited for large-scale game development. I use both regularly for my job, and I'd never want to use perforce for pure code projects (services, tools, etc) but I also wouldn't want to use git for projects that are primarily content based (AAA games).
I think the aversion to using Git in content based projects is based on a lack of third party tooling similar to Perforce's ecosystem, or a lack of understanding
I'm simply saying that Git is totally viable for what you claim Perforce is better at, and is architectured better. It's simply just legacy investment into Perforce which drives it's usage (from what I see)
I do think git has gotten better at this stuff in recent years, but LFS locks are a dealbreaker in my mind. They still lock across all branches, right?
That makes branches completely useless - need to make a content update on a release branch that'll never be merged back to main? Too bad, someone in main has the lock despite it being completely unrelated.
Yes, they do
Fix that and I'd say git is much closer to usable for AAA (tooling requirements aside). The other bit I'd need to see is whether VFS for git plays nice with LFS and locking.
What do you mean it isn't needed anymore?
LFS already has pointer files which can be used for selective update/fetch
Partial clone/sparse checkout can be used to exclude entire trees from fetch/checkout
That's good and gets closer, but just selecting which trees you want to download isn't good enough for where I work. Our entire depot is ~6TB for a full checkout, and it's impossible to choose exactly which trees you'll need.
To be perfectly fair, perforce doesn't solve this either and we have a custom filesystem driver to handle this stuff...
Yeah.
If that's what you need, you can exclude all LFS fetch by default, and then make a filesystem driver to selectively pull files on request
Well, that's basically what VFS did.
Yeah
But you'd need a new custom filesystem driver to get it working with the LFS fetch workflow
Yep. Honestly this sort of workflow needs a bunch of custom tooling regardless of VCS.
VFS got close but didn't have the locking aspect.
Yeah, and that's IMO, the problem
people invest a ton into Perforce, and don't notice it a lot of the time
which is what I was trying to say earlier, there's a lot of sunk cost with UGS, and such
because of things that should be in VCS
and that causes lock-in
Git is perfectly functional IMO, if they invested that same effort into it instead of Perforce
and the added benefit is that it's open source, so you get multiplicative benefits from other studios using it
I agree, if you were starting completely from scratch. The sunk cost bit is the problem and not something that'll change easily.
I do think perforce workflow is better (though maybe not to the point where it's a huge deal) for artist-focused scenarios - and git being much more confusing at the start doesn't help either. That's a problem of getting people to learn, but it is still a higher barrier to entry that large studios don't want to (or don't have time to) pay. Most git tools being programmer focused doesn't help either.
@long hull an update on this, they're moving up to LFS v3
imo, I don't think the Perforce workflow is better. It's very remote focused, so very dependent on server verification and an internet connection. Works well at studios with a LAN server, but you can experience dropouts otherwise. Very disruptive. Then, there's the whole issue of shelving changelists, it's IMO very disruptive in Perforce to do local changes and switch out different things you're working on.
As for Git, I think all of those workflow internals that people find confusing aren't really relevant to the user. They wouldn't be with the right investment into tooling, like in source control plugins, external clients, etc.
The per file versioning also has a lot of bad implications for some workflows
also, imo, absolute workspace paths can really destroy some flexibility in how people want to set things up on their PC
Regarding remote stuff - it really depends on where you work. If you're a pure remote team with tools built to support that I agree. I don't work somewhere like that and while we very quickly pivoted to be able to work remotely due to the pandemic, you still need to be connected to VPN almost all the time on a good connection and not due to source control. Also, if you're heavy into LFS locking workflows git doesn't really win out either unless you're purely dealing with code/mergeable files.
Shelves I agree with in some cases, disagree in others. Being able to organize things quickly without having to juggle branches is nice depending on what you're doing - I don't think git is strictly better unless you only work with code.
Git has stashing, which works, like the rest of the git, with snapshots, rather than file revisions
so it's way easier to preserve and manage stashes, IMO
I'm aware of stashes. My take is more around being able to easily move files around, separate them out, share small chunks of work with others, etc. I know git can do all of that, but I've always found perforce's tools simply easier to use for those purposes, and imo that's a huge deal with large teams.
I should preface everything I've said that this is coming from the point of view of a large team. I don't think I'd recommend most individuals here use perforce unless they already know what they're doing (though part of that is just having to maintain a server themselves... I cringe a bit every time someone recommends running a p4d server to someone with no sysadmin experience). I only use it for personal projects myself because I happen to like the workflow, but I'd probably drop it and move to ADO or selfhosted gitlab if I got to the point where I had to pay for it.
always found perforce's tools simply easier to use for those purposes
I think that's more of a tooling/investment problem. I know Perforce provides a visual client, and it's decent enough, but in the Git ecosystem, the main project's purpose isn't to provide a GUI. I think with that said, there isn't really a third party client sufficient enough to use for video game workflows. But I see it again, as an investment problem, because a AAA studio could easily make one available to use for all these sorts of fine-grained file management you see with content and such.
there isn't really a third party client sufficient enough to use for video game workflows.
Absolutely agreed, and if there was one I'd probably have a completely different perspective.
My main point is that the fact that they're happy to do this for Perforce, but not for Git doesn't come from any architectural superiority on the side of Perforce, but really just sunk cost.
Perforce, from my view, comes from a generation of VCS before Git.
Well, on the tooling side P4V already exists so it's not really the same - perforce provides a better visual client out of the box. As far as in-house tooling goes yes, I agree.
But the in-house tooling has to be built either way
You see this model that Perforce in a lot of VCS from that era
Yeah, I understand the part about p4v, but I'm just saying, Git doesn't have that goal to make GUI, so some other vendor has to make it
It just so happens that the same vendor produces both for P4
I applaud Microsoft for moving away from TFS (which is that same generation of VCS as Perforce) to Git
They invested a lot into Git, and everyone was able to benefit
fyi they moved from Source Depot (which is based on perforce) to git. TFS was never used for the windows depot afaik.
Your point remains the same regardless, just nitpicking π
commit graphs, partial clones, sparse checkout, native file monitoring, etc, etc
I thought they did use it for Office?
Not sure about office. THe main effort to move to git came from windows which was on SD though.
I think both are on Git now
Yeah, they both are. I'm not sure what Office was on beforehand.
But yeah, I expect that ecosystem in Git, through both first party investment and community engagement, to grow to match the demands of any AAA studio
just like it has for other software developers
but one has to make that leap
I would think the Perforce subscription costs would be enough incentive
I certainly hope that's the case at some point, and I do think it'll get there. I don't like that perforce is the standard for AAA, but I also understand why.
I would think the Perforce subscription costs would be enough incentive
Eh. I don't know that it'll make a difference due to that - companies like paying for corporate support.
and it's like, I see ongoing cost, in both that subscription cost and the development cost to maintain support for tooling and extend it over time
but like, I just see a lot of disdain for Git, as if it's just architectured in a way that makes it impossible to be good for content and artists
and I see that a lot in the Unreal community, possibly due to the outdated plugin in the engine, the long standing misunderstandings about Git's feature profile due to impressions made in the community years ago
of course, that isn't to say there are shortcomings
you mentioned multi-branch locking as one
and of course, there's a lot of nice things Git could do that Perforce doesn't do out of the box, that could be used to entice a switch
for example, a VFS for LFS
but, I just think that the major performance and workflow benefits from the decentralized, snapshot based model of Git should make it pretty attractive to devs. Add that with the very large, open ecosystem it has, and I think it has a lot to justify investment in the areas it lacks in.
Just want to say it was great reading through the rousing conversation from earlier this evening about Perforce vs. Git. There's a lot of nuance expressed here that doesn't come out often enough. Most conversations I see devolve quickly because of preconceived notions about one or the other, rather than real world experience.
I'm all for these conversations. I absolutely hate when someone just calls something garbage - there's no nuance or understanding in that, especially when the topic is choice of tools which is incredibly based on preference.
except when someone just calls perforce's licensing scheme garbage. no nuance required for that 
lol, I can't argue with that
Hahah, yeah I have to agree with that.
Definitely a major weakness of the Perforce ecosystem.
Indeed. And that preference is often based on a combination of anecdotes and a single bad experience that arose from misunderstanding the tool.
Plenty of times it's also based on what the developer likes, for whatever reason, which is perfectly valid. But the conversation is difficult to have when the people involved don't actually have much experience.
I think more people should be open to trying something again when they've been away from it for a few years.
More often than not, the problems someone had with either Perforce or Git five years ago are easier to deal with now.
A simple example: many people still try to follow Allar's great-but-outdated Perforce tutorial, when it now offers a very simple package-based installation that is almost entirely automated.
It is way easier to spin up a Perforce server than it used to be.
I often find myself wishing someone could make a GitHub-like platform for Perforce. For me, GitHub is a huge advantage for the Git ecosystem, and why I use it for my solo projects where file locking doesn't matter.
I mean, there's assembla. Which also costs a stupid amount of money. And from the way they're advertised, I wouldn't be surprised if they have an exclusive contract with perforce to be the only cloud host so I doubt it'll change anytime soon.
GitHub makes Git way more accessible to a broad audience. I think it would be very cool if Perforce had something like it. I doubt it will ever happen, given the type of company Perforce is. I mean they made a GitHub-like platform for everything but their own VCS, and I believe Assembla is still the only cloud provider, and it's really not comparable to GitHub imo.
They do have an exclusive contract last I looked into it.
I used Assembla for a large client project once, and it left me disappointed for the most part.
It was for SVN, though, not Perforce.
So it was much cheaper. π
We've been using assembla with perforce for 4 years and it's reliable and pretty damn slow.
I've been trying Plastic this week and it does faster but maybe less full-featured
After all these years I still haven't tried Plastic. I've heard interesting things from the few people I know who have.
It definitely sounds like a unique take, but appears to have some weird quirks.
Plastic seems interesting to me... except that I think you can't do sparse/partial checkouts unless you use a gluon workspace. But then you're stuck with gluon and can't use the normal tools.
Yeah it's weird that they have that separation.
Gluon seems like a neat client for artists. Perforce actually made something similar recently.
did they?
Yes, believe it or not. π
It's a bit too simple though, imo.
Helix Sync β the desktop client for creatives β streamlines workflows for non-coders. Designers and artists can use their preferred tools and simply drag and drop assets to quickly version. Teams get a single source of truth, faster builds, and seamless collaboration.
By "too simple" I mean you can't touch workspaces with it.
ooh
It's basically just for logging in, syncing your workspace with a depot, and checking in/out files.
Everything else still requires P4V.
It's certainly a nice-looking GUI, especially coming from Perforce.
It's only compatible with workspaces that have Allwrite enabled, too.
If you don't, you get this when you login:
It also actively encourages you to submit changes without describing them. π¦
ooof
You can click a big Upload changes button without adding a commit message, and adding a commit message is hidden in a dropdown.
If you don't add one, it adds a generic "Submitted with Helix Sync" message or something. It's nasty.
I will say one thing it does well is how it presents changes.
There's two tabs: one for your changes with buttons to upload them, and one for changes by others with buttons to download them.
It's a pretty clean way to see what you have checked out, and what work from others you haven't synced yet.
Protecting garbage software that cost you/your company shit-ton of bucks is a Stockholm syndrome.
Oh hey, just what I was talking about.
Thanks for proving their point.
by default yes, but you can extend it to per branch
Its possible, but the licensing is prohibitive (exclusive cloud host license + perforce just generally only care if you are a huge company giving them all the $$)
does anyone know if there is a tutorial for how to install perforce on ubuntu linux 20.04 vps? i found one but it does not explain typemap p4, so there will be read/write errors afaik
Any info on that? I've looked around for info on LFS locks and branching and the info is painfully sparse.
I did with some custom code based heavily around gitlab EE
Ah, so not an officially supported thing yet. Shame.
EE has the feature, I extended it to work with regular pushes, not via webgui
Ah ok.
if I have a month free (lol probably never happen), I might try and include it in lfs proper
functionally, its just a rest api that checks per branch and some git hooks
(hence being tied into gitlabs APIs)
@neat grotto
Is there a proper channel in this server to ask simple questions regarding licensing of UE?
Use-case seemingly not explicitly stated in EULA.
Mostly hoping to avoid long email correspondence if answer is here in slack/discord.
Question being: Can UE be repurposed as renderer middleware in a more capable in-house engine? If so, does it entitle licensee to usage of the Epic photogrammetry library?
Does it entitle licensee to usage of third-party libraries such as RAD and 3Lateral?
Question assumes that yes, all applicable royalties as dictated by EULA will be paid to Epic.
You should probably post this in #ue4-general
You also shouldn't ping the server owner with random questions
I'm also going to be very surprised if you could be successful at leveraging UE as a rendering engine inside of another app
I'm also going to be very surprised if your in house engine is actually "more capable" than UE if you're trying to find a renderer for your engine (maybe if your use case is completely outside of normal UE uses)
The inquiry wasn't about opinions, it is regarding licensing; thanks.
This server isn't official - it isn't operated by Epic and any responses to licencing inquiries here are going to be opinions. And this is still the wrong channel to be asking for those.
I see, I didn't realize this wasn't operated by Epic. Thank you for letting me know
Is there a Slack channel operated by Epic?
Not a public one, no
I suggest you contact Epic directly, they have a contact form on the custom licencing page.
Yes, thank you. We will do - only asked here for sake of convenience as we are just scoping.
afaik you can have partial workspaces with the command line utility. For plastic SCM Gui, you can use the (hacky) solution of the cloaked.conf file (add files you don't need to that file and they will be ignored)
Mmm. I haven't actually used plastic and the wonky separation of workspace types has turned me off from trying it. Glad to hear it isn't quite as divided as I thought but it sounds like it still isn't quite as clean as it should be.
you can have multiple workspaces of different modes (partial, full) and easily convert between them. However, keeping the cloaked.conf and your gluon configuration in sync is tedious work and it's recommended to mostly work in one mode. The underlying repositories are completely compatible to both modes and developers working in modes they like
the distinction can be roughly like that: as a programmer you probably want to work with branches, and for branches (generating them, merging, ...) you need Plastic SCM anyways. The solution is: use Plastic SCM, add directories with pure art assets to cloaked.conf if you don't need them.
As an artist you can't merge binary files and want an easy workflow. Branches don't make sense and you often don't need the full product, but want to easily add/remove files from the repository to your workspace. The solution is: use Gluon.
Switching between them is easy enough (especially in recent version, literally just one click), but takes some time.
Anyone using Helix Swarm with Projects? Not quite understanding how the Branch Paths are supposed to work.
Documentation says to just add a path in depot format, which I did, but when going to Files afterwards, it doesn't use the depot path and can't find my folder.
Do I actively have to create a branch on P4s end that I mirror here?
Also typically, when searching for problems with P4, all you find is documentation that doesn't answer the problem
Also, iirc, P4 doesn't have branches in that regard, they only have Branch Mapping?
I could branch off, but why would I branch off if I don't need to. Swarm Projects should be able to just map to an existing non-branch path?
Main overview of Swarm lets me go through the depot just fine
Actually, it does find the path, testing with a wrong path, but the last folder in the path never opens up and reports 404. If I add another, deeper, folder at the end of the path, it goes one further. Is it expecting some file here?
Okay, branching doesn't actually solve this. Probably again one of those times where they multiuse a word
Hi! I tried looking around but does anyone has had any experience with using Git for your source control with a team of 15-30 people? 
ye
Do you think it works well? What would be your opinion on it? Have you implemented file lock or did you find a workflow without it?
its fine
I think perforce might be easier for artists
but its very workable
Locks work but there is a bug that needs fixing
We're currently using Plastic but Git is free so I might have a look at it, I was just afraid the usual git workflow with many branch and no lock would create tons of issue when working with many assets, maps and blueprints
locks are global not branch independent without doing a lot of work
Is GH good enough for a small indie project?
or should I future proof it/standardize it with perforce?
Yes. I use it for all my solo projects (usually 1-5 GB repo size) and one client project with 3 team members and ~10 GB repo size.
Just be aware that Unreal's built-in Git plugin doesn't support file locking; you'll need to get the latest version for that. https://github.com/SRombauts/UE4GitPlugin
thanks, I dont think I will need file locking yet.
I tried to setup Perforce but AWS wont send an SMS to my phone for some reason xD
so fuck it
I'll go with Git
Would anyone want a 1 Click Perforce Deployment Button in their Unreal Engine Editor? And a 1 Button Interface for already Linked Perforce Servers? <.< just wondering.
What are you referring to exactly?
Made a Terraform Package for Deploying a perforce service, and wrapped it up in a Golang Restful API. I was thinking of making a Editor Plugin that would allow you to Check your Current Status on a Perforce Server, or if you don't have one. It would ask you for specific permissions and deploy it for you on a Cloud Platform of your choice. Right now I've coded it for AWS and GCP I'm working on Azure and It should work on Digital Ocean but via a restful API call not a terraform package.
cause man, I see alot of people ask about perforce XD and it annoyed the living hell out of me to setup the first time lol so I had to automate it
@.@
like this is the bash script I wrote for automating the perforce setup process
#!/usr/bin/env bash
set -e
P4USER=$(terraform output -raw perforce_username)
P4PASSWORD=$(terraform output -raw perforce_password)
HOST=$(terraform output -raw perforce_address)
echo -e "\033[0;32m Perforce Setup: \033[0m Clearing $HOST from known_hosts"
ssh-keygen -f "/home/$USER/.ssh/known_hosts" -R "$HOST"
echo -e "\033[0;32m Perforce Setup: \033[0m Installing apt-key"
ssh -o "StrictHostKeyChecking no" -i output/private_key ${DEV_USERNAME}@${HOST} "sudo wget -qO - https://package.perforce.com/perforce.pubkey | sudo apt-key add -"
echo -e "\033[0;32m Perforce Setup: \033[0m Adding perforce to apt sources list"
ssh -i output/private_key ${DEV_USERNAME}@${HOST} "sudo cat <<EOF | sudo tee /etc/apt/sources.list.d/perforce.list
deb http://package.perforce.com/apt/ubuntu focal release
EOF"
echo -e "\033[0;32m Perforce Setup: \033[0m Installing Perforce...."
ssh -i output/private_key ${DEV_USERNAME}@${HOST} <<EOF
sudo apt-get update -y
sudo apt-get install helix-p4d ufw -y
sudo adduser perforce
sudo mkdir /opt/perforce/servers/${PERFORCE_NAME}
sudo chown perforce:perforce /opt/perforce/servers/${PERFORCE_NAME}
sudo mkdir /opt/perforce/servers/${PERFORCE_NAME}/ssl
sudo chown perforce:perforce /opt/perforce/servers/${PERFORCE_NAME}/ssl
sudo mkdir /var/log/perforce
sudo chown perforce:perforce /var/log/perforce
sudo /opt/perforce/sbin/configure-helix-p4d.sh ${PERFORCE_NAME} -n -p "ssl:1666" -r "/opt/perforce/servers/${PERFORCE_NAME}" -u ${P4USER} -P "${P4PASSWORD}" --case 1
# https://github.com/CB-Productions/PerforceGuideUE4/blob/master/index.md
# p4d -Gc # This needs to be Researched More~
p4dctl start -t p4d ${PERFORCE_NAME}
p4 trust -y
EOF
echo -e "\033[0;32m Perforce Setup: \033[0m Setting up p4config for default User..."
ssh -i output/private_key ${DEV_USERNAME}@${HOST} "sudo cat > ~/.p4config <<EOF
P4USER=${P4USER}
P4PORT=ssl:1666
P4PASSWD=${P4PASSWORD}
EOF"
ssh -i output/private_key ${DEV_USERNAME}@${HOST} <<EOF
sudo chmod 0600 ~/.p4config
sudo chown perforce:perforce ~/.p4config
EOF
echo -e "\033[0;32m Perforce Setup: \033[0m Logging into Perforce..."
ssh -i output/private_key ${DEV_USERNAME}@${HOST} "p4 login <<EOF
${P4PASSWORD}
EOF"
echo -e "\033[0;32m Perforce Setup: \033[0m Securing Perforce"
ssh -i output/private_key ${DEV_USERNAME}@${HOST} <<EOF
p4 configure set dm.user.noautocreate=2
p4 configure set run.users.authorize=1
p4 configure set dm.keys.hide=2
EOF
echo -e "\033[0;32m Perforce Setup: \033[0m Adding Perforce Typemaps.."
ssh -i output/private_key ${DEV_USERNAME}@${HOST} <<EOF
(p4 typemap -o; echo " binary+w //....exe") | p4 typemap -i
(p4 typemap -o; echo " binary+w //....dll") | p4 typemap -i
(p4 typemap -o; echo " binary+w //....lib") | p4 typemap -i
(p4 typemap -o; echo " binary+w //....app") | p4 typemap -i
(p4 typemap -o; echo " binary+w //....dylib") | p4 typemap -i
(p4 typemap -o; echo " binary+w //....stub") | p4 typemap -i
(p4 typemap -o; echo " binary+w //....ipa") | p4 typemap -i
(p4 typemap -o; echo " binary //....bmp") | p4 typemap -i
(p4 typemap -o; echo " text //....ini") | p4 typemap -i
(p4 typemap -o; echo " text //....config") | p4 typemap -i
(p4 typemap -o; echo " text //....cpp") | p4 typemap -i
(p4 typemap -o; echo " text //....h") | p4 typemap -i
(p4 typemap -o; echo " text //....c") | p4 typemap -i
(p4 typemap -o; echo " text //....cs") | p4 typemap -i
(p4 typemap -o; echo " text //....m") | p4 typemap -i
(p4 typemap -o; echo " text //....mm") | p4 typemap -i
(p4 typemap -o; echo " text //....py") | p4 typemap -i
(p4 typemap -o; echo " binary+l //....uasset") | p4 typemap -i
(p4 typemap -o; echo " binary+l //....umap") | p4 typemap -i
(p4 typemap -o; echo " binary+l //....upk") | p4 typemap -i
(p4 typemap -o; echo " binary+l //....udk") | p4 typemap -i
(p4 typemap -o; echo " binary+w //....pdb") | p4 typemap -i
(p4 typemap -o; echo " binary+l //....umap") | p4 typemap -i
(p4 typemap -o; echo " binary+w //....so") | p4 typemap -i
(p4 typemap -o; echo " text+w //....target") | p4 typemap -i
(p4 typemap -o; echo " text+w //....modules") | p4 typemap -i
(p4 typemap -o; echo " text+w //....exe.config") | p4 typemap -i
(p4 typemap -o; echo " text+w //....dll.config") | p4 typemap -i
(p4 typemap -o; echo " text+w //....target.xml") | p4 typemap -i
(p4 typemap -o; echo " text+w //....version") | p4 typemap -i
(p4 typemap -o; echo " text //....uplugin") | p4 typemap -i
(p4 typemap -o; echo " text //....uproject") | p4 typemap -i
(p4 typemap -o; echo " text //....xml") | p4 typemap -i
(p4 typemap -o; echo " binary //....png") | p4 typemap -i
(p4 typemap -o; echo " text+w //....Automation.xml") | p4 typemap -i
EOF
echo -e "\033[0;32m Perforce Setup: \033[0m Setting up & Turning on Firewall."
ssh -i output/private_key ${DEV_USERNAME}@${HOST} <<EOF
sudo ufw allow 22
sudo ufw allow 1666
echo "y" | sudo ufw enable
EOF
echo -e "\033[0;32m Perforce Setup: \033[0m COMPLETE!"
let me know if you got any suggestions for it @neat grotto β€οΈ
but that'll more or less automate the deployment of your perforce. Well Minus some changes you'll have to make. And that is only for Linux based Systems. I can write a powershell one if you anyone needs.
Environment Variables
DEV_USERNAME=devuser
HOST=1.1.1.1
P4PASSWORD=test
P4USER=devuser
That's pretty cool. I'm sure there are people who would like to simplify their deployment process. π
Personally I don't mind spinning up a Perforce server these days because it's gotten a lot easier with their package-based installation, although further automating the spin up of a VPS and all that would be nice too.
I made a whole terraform package but i've talked too abuncha other ue4 engineers they don't wanna mess with terraform XD or anything devops LoL
β€οΈ then i'll continue to work on it.
I wrote one for jenkins also
and UnrealMultiUser Service
XD
lol
Nice. Automate all the things. π
damn right~
lolol
I also did 1 for GKE, and EKS but I doubt alot of peeps would use those here @.@
I'm pretty close to writing a new, up-to-date Perforce/Unreal tutorial. Most of the ones out there are out of date or incomplete, and I get a lot of clients asking me to set up Perforce for them.
Oh then i'm not going to finish mine β€οΈ
use my code if you want π
its 100% correct
though i'm sure there is more typemaps too be added that i'm missing
I just haven't added them cause i don't know them
know what i mean?
Yeah. I'm not sure where to find an up to date typemap for UE4, hm... depends on how many new source assets are supported recently.
Probably at least a few with all the new virtual production features.
neither do I so yeah haven't added that too my setup script
yeah that was my thought
but yeah i'm going to make a lil Editor Plugin & Website for Automating a Deployment of Perforce too a Cloud Provider, it will ask for specific things and then bobs your uncle it'll deploy it for yah.
Nice.
Did the backend, so it works really well XD lol but yeahhhhh frontend work ;-; I hate it.
anyways i'll let yah go :3 if you think of anything infrastructure wise that needs automated π tell me β€οΈ I would love a challenge lol
I will. Looking forward to seeing the final result of your deployment solution! Sounds neat.
hey sorry for the late reply but I took a look at this today and since I'm running the latest EA of UE5 I installed the latest commit from your pb-changes-ue5 branch - installation works great as well as connection but given the UI difference of UE4 and UE5 I can't seem to find the source control options for push/pull/sync etc, am I missing or not understanding something?
I haven't tested UE5 so much, but I tried to see what changes were made in the engine for source control. I'm not sure if the workflow changes now require interacting directly with assets in the content browser, and I don't really have time to test it though so if you can provide more info about how it's intended to work it would help out!
use the other one that got improved from here
If you're talking about mastercoms' custom version, there are no binaries yet.
It has to be built manually.
@quaint obsidian If I build a binary and distribute it is that cool
sure
Ill try find some time this week then
all right, I see, I'll certainly provide you with that if I can get it up and running - on closer inspection I think the main issue is that I'm getting two errors in the source control log when, for example, saving an asset:
fatal: .md5: no such path in the working tree. Use 'git <command> -- <path>...' to specify paths that do not exist locally.
any ideas on this?
ah! we use .md5 for editor binary verification, so kinda included that into the workflow without thinking about those who don't use PBSync
I'll look into fixing that but as a workaround, you can add that as an empty file to your repo
oh I guess I can just add --
Noob question here: How can I share my c++ project with another dev without them having to rebuild? We're using Perforce, but every time he gets the project he has to rebuild in VS and it's a pain.
like I answered in the other channel, if it's a source engine build you probably should look at UGS
Sorry - didn't see your reply over there! Hadn't heard of UGS, but I'll look into it. Thanks!
there's limited documentation, you'll find out about it by googling for UnrealGameSync
you can have sync filters in it too which are much faster than virtual streams
Cool, def sounds useful
By "built manually" you mean "dropped into game Plugins directory"? How that is "more manual" than dropping plugin dlls into game Plugins directory?
How do I make a developement stream in perforce without copying large files?
heya,
is it possible to have a shared global folder to use in several projects stored on a depot in perforce?
Working on a tv show atm and thinking about wether it makes sense to split it up per episode, because of the huge filesizes, but then having to migrate the global folders with presets and master materials etc...
Originally we had planned to work on one episode at a time, but now we have to start working on several episodes at the same time, which makes the migration of the glbal folders seem like a bad idea...
What do you mean by shared global folder?
If you're asking whether you can have multiple projects under the same depot, the answer is yes. Just throw them into separate folders.
//depot/MyProject1/..., //depot/MyProject2/..., etc.
if it's a stream depot that makes things a little harder as streams always need a 2-level deep path for branches, but you could still work around it.
Well, lets say we have Season 1 episode 1, with a global folder in the content folder, where we store material libraries etc.
Now we wanna start working on Season 1 episode 2, in a new project, but have the same global folder.
My brain wants to think thats possible, but I donΒ΄t think it is.
you can import whatever folders from whatever depots/streams in whatever other depots/streams you want, via stream or workspace setup
So, instead we would have one large project for the whole season and use the global folder in there.
Yeah, but I donΒ΄t just wanna import that folder, I wanna sync it from each separate project...:)
Wait are you asking about having a shared folder between multiple projects?
Exactly
Perforce will allow it... but unreal might not like it.
do you use streams or classic?
With perforce it's dead simple to map a separate folder to your workspace either in a classic depot or with a virtual stream.
Yeah, but if Unreal doesnt like that, its no use.
It's something you'd have to test. The perforce side of things is easy.
In a classic depot you'd end up with something like this in your workspace view. Stream depot would be similar but you'd be setting up a virtual stream to do this rather than a per-workspace view.
//Episode1/... //YOUR-WORKSPACE/...
//Shared/Content/GlobalContent/... //YOUR-WORKSPACE/Content/GlobalContent/...
perforce is pretty flexible about mapping depot paths to wherever you want in a workspace. So it's just a question of whether unreal will like it. And even if unreal works with it, you have to be super careful not to reference assets outside of the "global" folder from within it.
Though I'd honestly say you should rethink having separate projects at this point.
I guess UE might not like it because of import ID's or something right? I do this already with code/resource plugins but no Content
Yeah, it depends on what project-specific stuff UE might serialize with content.
there's a reason you use the migrate button to move content between proejcts
Yeah, I donΒ΄t have the time to test it in Unreal, weΒ΄re already in full swing...
Its easier to just move everything into one big project.
We were mainly worried about having to backup huge files, as we canΒ΄t only rely on the VPS server in the cloud for that.
Exactly.
I'd definitely say just throw everything in one big project and avoid the issue altogether.
You can even unmap some content folders if you don't want stuff from a finished episode or whatever
provided nothing depends on them.
Yeah, thats the idea now.
Use local workspaces to sort the data you need per episode and then have a backup workspace to sync all of the project.
Yep, you can do that pretty easily - for a classic depot this would map everything except Content/OldEpisodeYouDontNeed
//depot/MyProject/... //your-workspace/...
-//depot/MyProject/Content/OldEpisodeYouDontNeed/... //your-workspace/MyProject/Content/OldEpisodeYouDontNeed/...
Thanks, but IΒ΄ll just do that manually in P4V. Its not that many people working on the project.
I just read too much about things going wrong and since its our first Unreal project, all these things are pretty anxiety inducing...:)
CanΒ΄t even simply rename or move an asset inside unreal without having to "fix up redirectors"....
One quick question though...
Can I simply rename a stream/depot?
Because we named our depot/stream with "Episode 01" now, but would like to rename it to "Season 1" instead.
Uhh, maybe? P4Admin might be able to (or the equivalent command line stuff) but you'd probably have to have everyone update their workspaces to point at the new name. Which would be a bit of a pain.
i don't think it's trivial to rename a depot or parent stream
i've researched it once a long time ago and remember it sounded like a huge PITA
Yeah, its also not necessary. I just hate it if things have the wrong name, but we can live with it for the first season...:)
yeah I screwed up our game's mainline stream name too and it bugs me all the time π
Hey, the project I'm on changed codenames mid-development so our depot and a lot of other tools have the old name but there's also a ton of stuff with the new name. The names aren't even remotely similar or have anything to do with each other lol.
I want to develop a project for multiple versions for marketplace
My main project is about 1GB
when I create a developement stream without branching, It wants me to copy everything.
How do I avoid this?
If I branch, the server makes a duplicate. Is this ok? I want to be able to easily switch between streams
just like branches in Git
This is all via command line, but you can find the same operations in the UI and it gives a good overview of the intended workflow for streams: https://www.perforce.com/blog/vcs/how-use-perforce-streams-101
Is it possible to have the perforce server run on my computer
And my friend to connect to it using my public ip
all I ever do is smallbrain mainline-only dev, but I think (???) based on my very limited experimentation, the way perforce has to work is it will always create a copy of all the files for the new stream on the server. it's kinda crap, though I really haven't experimented much with that yet
it's technically an "integrate" operation (populate, usually used to setup branches, is just a large integrate). Not sure how that actually gets stored - if it's a literal copy or not - but it does retain history information.
Task streams are more akin to git lightweight branches - they only store actually changed files. But they're meant for small bits of work
my server definitely doubled its disk usage when I made a release branch π
guess I never tried task the same way
that sounds good/ok though
it sucked for me to test a release stream because it took like two hours to make the release branch ... and then, dismayed, I went back to mainline dev 
Perforce does not duplicate files on the server when they are branched, it just references them. Perforce use the term lazy copy and I think there's a way to view them somehow
Trying to work from home and lab PC. What's the most easy to set up and use way to get source control working?
release stream definitely makes copies of files on the server, unless I'm a retard (entirely possible)
gotta play with it this weekend
Thanks a lot. I had to branch while creating stream indeed. now I can switch between streams quickly @merry verge
Is this good? π
As for the disk usage, it doesn't get duplicated on server which is good π
this is diskspace usage before and after I created 6 extra streams. (main stream is about 1 GB)
Its only getting more unstable π , but can't copy up because newer versions are not compatible with older versions.
Are you able to get Git LFS 2 working with 4.27?
The instructions on https://github.com/SRombauts/UE4GitPlugin just say to dump it in the plugins directory. But I guess you actually have to put it in and rename it as the folder names do not match, UE4GitPlugin-2.17-beta vs GitSourceControl)
Supporting a 3 year old engine seems silly... Other than that, seeing what you're doing now, I don't think this idea makes sense. Each version should stand alone and be in parallel from mainline. Or, maybe don't do any of this at all? Code compatibility for every engine all in one monolithic plugin version. If I had to guess I'd think that's what most plugin devs do anyway. Probably right and wrong depending
@quaint obsidian I remember finding an LFSv3 page with all the features they were hoping to add - cant seem to find it anymore. You dont happen to know where it is?
Unfortunately these are blueprint assets. so for example something is deprecated or changed in 4.22, I fix the issue in that version. I would like the changes to automatically integrate to later versions.
lets say I get a conflict during this integration, for example in 4.24 I have had added a feature to a blueprint. since blueprints can't be merged, I have to manually fix 4.24 (instead of merging 4.23 to 4.24) and automatically integrate 4.24 to later versions. I hope that makes sense
If I make all versions parallel from 4.20, I can't integrate from middle versions to later versions. or can I? (well i guess I can but I have to do it manually and be more careful about doing it)
It didn't turn out the way I wanted to. even though base files are identical, the integration process wants me to resolve manually for binary files. tedious π¦
I'm not quite sure what you're doing, but the p4 cmd line is quite powerful for automating integrations, and in fact in the past I wrote a python script to automatically respond to each question in the integrate step automatically.
using this option fixed my problem
Sorry, was naively thinking of code of course
Does connecting ue4 to git not include cpp classes?
Do I need to set that seperately?
yeah, unreal engine source control generally does not support anything other than Content & Config folders, and uproject file
visual studio can also be connected to git to control that side of your project.
help guys
VS git doesn't work with LFS last I checked, so be careful
it can corrupt your commits
Who faced this problem? The project weighed 20.5 GB, I divided the assets and transferred them to another folder, now the project began to weigh 6.5 GB, but still the error indicates that the file is too large, the Internet connection is stable, the LAN speed is 600 Mbps. I tried different methods with changing the buffer value and other fixes, but nothing helps.
π heya, how do you handle engine content with git? specifically the Perception Neuron Mocap Plugin, I'm unable to migrate or copy the content to my project content (empty folders). Set up another repo for the engine content?
Using the git bash console, tried using the command line, through the Git Desktop application and through Visual Studio, the same errors come out, the server does not give permission for large amounts of information.
Up to 2 GB uploads and stops file transfers to a remote Github server.
hey sorry input, wasn't meant as an answer to your problem haha
@swift oriole I don't use git but I know to ask: are you using LFS?
doesnt look like it
we just have a plugins monorepo that is included as a submodule in our engine repo's plugins folder
@quaint obsidian i see, thank you! project is only a few weeks duration and it's only one checkbox, not sure if worth it XD
Yes, it was only through git lfs that I managed to place the repository, I tried all the tips that are on the Internet on the forums.
This probably gets asked all the time...but I wanna switch my shortfilm project to UE5.
Whats the recommended way to do this with perforce?
I have the UE4 version on perforce.
I also have opened the project with UE5, which creates a copy in a different folder.
Should I now....:
A) Simply copy over the UE5 folder to the workspace folder of the UE4 project and then submit everything as changes?
B) format the perforce server and set it up fresh with the UE5 project?
A for sure - you can copy it over then use Reconcile Offline Work to capture all the changes.
C) Create a new branch/stream for the UE5 one?
Is a feature branch workflow common in game dev?
P4V question - is there an easy way to break an exclusive lock someone has over a particular file (so that I can steal said lock)?
I have seen it a few times, but tbh, I'm not sure managing it is worth it at all
seems to introduce all manner of weirdness depending on your various pipelines and introduces never-ending faff
Ive been a professional developer for over a decade and ive only ever used git with a feature branch rebase workflow... so having some learning pains trying to imagine an alternate universe where everyone just pushes whatever to master
its a me problem not a source control problem, i was just curious
pushing to master is fine - you just need to make sure production is on top of it and you schedule periods of time wherein you're not committing potentially damaging changes / are more interested in promoting fixes and stability
branching is a huge pain when you have a lot of binary assets that frequently get revised or passed around
yeah thats definitely the X factor here, not used to dealing with binaries
you can't merge them, so anywhere where you get dependencies becomes hell
especially if you set up things like overnight processes, e.g. for building lightmaps, LoDs etc
and you have to maintain approximate binary parity between multiple branches
then there's the possible issue of data loss wherein your engineering branch might splat over the archetypal versions of assets etc
I think I saw something about plastic trying to help this by supporting different workflows for artists vs developers, but i dont know how successful or complicated it is. I am just reading about options now as I learn about UE and want to start on an actual project
we have a custom layer on top of Perforce that prevents content creators and artists from syncing past any change list marked as 'content breaking' by the respective engineer (i.e content requires new executable binaries etc), and also have a little personal discipline involved wherein engineers don't commit those changes until end of day
it's not ideal, but it does work at least
Alright, I appreciate your insight. Off to look for simple perforce hosting
as an admin you can force unlock, not sure if its possible in P4V, but on commadn line you can
Or you do the way we implemented: per branch baking
that... doesn't make sense - you're just doubling your computational requirements for no actual gain? You still have to merge the branches at some point, so why not do it after things like baking?
Like, if an artist commits changes that require a rebuild of HLODs and lighting, build it, then merge it into the master or merge it into the master and build it
building twice just means running twice as many overnight tasks?
We build once at the root of each branch, then only rebake the branch if a map changes
Yes its extra compute, but its not that expensive in compute time
dont make a copy, just do it in place and run resave commandlet
also we do feature branching for programmers, they keep a lock until it gets merged into one of our main branches
but we much prefer trunk based now because there's so many problems with the workflow in general
it makes things less of a team effort, and branches become stale during review
of course, there's a few cases where it's useful for isolating very large breaking changes that go on for a while, but usually that's an anti pattern vs. incremental change
That would be something like this?
"Make a batch file running your engine, and project, and include the commandlet. I used something like this:
"c:/Program Files/Epic Games/UE_4.16/Engine/Binaries/Win64/UE4Editor-Cmd.exe" "INSERTPROJECTPATH.uproject" -run=resavepackages
yeah
Anyone use git/lfs with UE4? I'm trying to determine if I want to use it over PlasticSCM for future projects.
Does anybody use Source Tree? Is it possible to expose Custom Actions on toolbar?
I've used PlasticSCM with UE4 in a 20 members team, and I would not recommend it, due to lack of community and bad merge logic..
@vale carbon Git+LFS is a good option. At least you always find help, as git is very popular. And I guess most of game developers use Git+LFS, including myself.
I've used Plastic for a year and a half and it's been fine (team size was ~10), but long term I don't want to pay when my team grows. Perforce is just too expensive also. I've used git for a long time, but never for UE4 so I'm testing it atm with a small project. I was just curious if there's any gotchas with git and how popular it is with UE4?
I've been using git for personal projects and with teams. It does not have any issues, at least when you know how to use it properly..
At least you can try. Make suure you setup LFS
Yeah lol. I wouldn't use regular git for this haha.
you use Git-LFS? Does it always do locking and stuff correctly?
Yep!
hey i am trying to setup perforce, but i have some questions.
i have a workspace folder where inside is the project i want
i sumbited everything i want to depot
everytime i open the pc should i open first the p4 and then the project
?
@quaint obsidian do you use branching? What's the workflow for adding a new feature etc?
I am trying to get a Helix Core Server running on my local machine, unfortunately it is not working the way I think it should. I have forwarded port 1666 on my router, through my local computer (server) IP. Unfortunately the connection with the Helix Core Client fails. Can someone help me?
Ah awesome. Thanks for the links. π
Can someone here please help me understand why does unrealtournament editor hard crash without any explanation in the crash log after I try to connect to source control
Here are some images, in the first one I can open my project from perforce meaning I have copied over the files from unrealtournamenteditor to perforce. I have submitted a map with a name. But in the second image when I try to connect to perforce it insta crashes
Can someone help me figure out how to get rid of this? We had a temporary file in the depot that was to be replaced with our name for the folder. This DeleteMe.txt is preventing me from submitting to source control. Cant figure out how to remove it / prevent UE from trying to upload this
Sorry for another late reply. This worked great, everything related to the git operations now seem to work fine. However, I've been doing some workflow testing and I can't really find the sync/pull equivalent as detailed in UE4. Am I looking in the wrong place? In UE5 the button is located in the lower right corner.
Git LFS v3.0.0 changelog: https://github.com/git-lfs/git-lfs/pull/4629/files
highlights:
- Pure SSH protocol support
- Prune can now be more aggressive, and clear the entire LFS object cache, reducing disk usage by half!
- Added multiple arguments to lock and unlock
- Improved file pattern matching
Note to self, gitlab's unreal git ignore does not play nice with c++ projects, but is fine with blueprint projects, okay then.
This has worked for us in production: https://github.com/ProjectBorealis/Base-Project/blob/master/.gitignore
Question for anyone who works in a large team with perforce. Do you take advantage of perforce' multi server architecture ? Or does the one perforce server the teams need ? I only have the one and that's all I need, but I'm just curious as I came across it the other day while transferring my windows home server to a linux server (twice).
I've seen in a few places that teams have a single main server, then multiple Edge servers for distributing load. For example auto build/test machines have one Edge, other company sites would have an Edge, even teams within the same building might connect via an Edge server.
but the last place I worked had a single server for ~80 people with no problems.
Hi all π I am running an investigation on Source Control. If any of you Perforce users can answer me a question it will be very appreciated. If you have an asset open (but you're not editing it); someone else's check in a new version of the asset and you try to update your local revision to the new one, does it actually update? I am trying with another SCM and it looks like Unreal blocks the asset if there is an editor using it. For instance, if I open a map using a certain material and someone else's update the material, I can't get the latest revision for that material as long as the editor is open.
the source control plugins for unreal do something for this
I think doing this on any vcs will cause this issue unless it's specific through a unreal ui for that vcs
So @rotund bobcat you mean if I do the same operation with the plugin or the vcs client I won't get the same result? :S
at least with git I know that pulling from e.g. cmd with the editor open causes those issues, while pulling with the plugin of unreal does not
Ok thank you, I'll check with the plugin π
Hi i'm trying to push my project to source control with github desktop but it say cannot publish unborn HEAD so i added a readme files to the repo first but stil giving the error, i tried also to commit first but some files are over 100mb
I personally believe it's a very bad practice to pull any updates with the project open, because if there might have been any code/dll updates you might really screw things up, you'd have to close and reopen anyway... But I'm sure lots of people will disagree with me π
I am 100% with you @woven sluice, however there's lot of people used to this bad practice.
The "single source of truth" principle is broken in my opinion if you're able to partially update your workspace tree.
But sometimes it is not about what you think is correct but about what you can do π
Well what you can do is
those team members 
Hahaha
From experience - with a large setup (multi-studio AAA project with 1000+ people on it, for context) multiple perforce proxies is all but required. At least one proxy per major studio location to make sure latency isn't an issue for developers working out of that office. It also provides some resiliency - for example, the studio uses a separate proxy just for the CI pipeline so that the heavy load from the build system constantly resyncing files across hundreds of machines doesn't affect any of the developer-facing proxies or main server.
It's very much something you don't need to think about unless you're working IT at a large studio though.
Further to this, its also likely to be required if you are a geographically remote team
I have a problem whit the clients Checkout. the client cant the server files not download. can anyone help me?
Never seen that before. Does it happen everytime?
with a ue4 default project it works. I don't know where the problem is. When I set up the server two months ago, everything seemed to work fine.
I think hardly anyone in here uses SVN... there are all kinds of suggestions on google/stack overflow for that error I guess
Git LFS v3 coming out today @long hull
Yes I saw that, thanks for the heads-up and all the info π
With Perfoce, I have similar problems. I think it has the same reason, but I do not know it. When I upload an empty UE4 project it works.
That's super weird... Are the SVN server and the perforce server both using the same disk drive?
Yes, I have already tried it on my SSD as well as on the HDD. I have uninstalled Subversion SVN in the meantime.
I have also tried the same procedure with another machine (same result).
I have now created a new Unreal project (empty project). This works fine until now.
But the files downloaded from the Unreal Engine Marketplace (assests, maps) seem to cause problems.
It gives me several errors when uploading, as well as when checking out the client. The errors are different each time. Sometimes there are 3, then again 8 or more.
It seems that the content folder is the problem. Better said something that is in it.
Because even on the HTTP SVN page I could not download the content folder without server crash.
I had to download all subfolders individually.
it says files are corrupted. did you check what's wrong with those files? @trim rune
maybe delete them, or temporarily ignore them.
In an ue project using cpp, are the any files that I can include in git so that an artist can work on it without building/having visual studio installed?
the development editor dlls on the binaries folder
Thank you!
Any idea why when I list Binaries/ in the .p4ignore file it actually ignores the appropriate file, while if I list GameName/Binaries/ it doesn't ignore it anymore? Is that not the correct way to tell P4 to ignore the GameName/Binaries folder?
anyone got any idea how to copy a specific version of a file from the depot to some arbitrary location.
E.g changelist 243 has one blueprint.uasset that I want to look at
I might be wrong, but the copy files option might work for what you're trying to do
get revision on that files history worked, but only if I reverted the current checked out version of the file first in my case with shelve + revert
forgot to mention this was in p4, for future ref
Hi there, I'm interested on using this tool with my team. Can I ask how are you getting along with the features documentation? This is so that I can present it as an option to the other devs. Thanks!
Hi, thanks for your interest! I've been fixing a few bugs reported and I'm nearly done with that. Then I'll be able to write up that doc.
Hey guys
I'm getting this error when trying to push my changes to the GitHub repository. Not sure how to get around it. I'm learning UE4 version control distancing myself from Unity colloborate. I have almost 6k items I'm pushing
Any help would be appreciated
This is my initial commit, if you guys have any ideas please @ me with any ideas
Isn't it pretty well documented the push limit is 2gb? Are you using LFS? @jolly fog
@woven sluice Thank you for the response
I have it installed
Let me see if it is being utilized
Ah, quick question. Does it work with Unreal 4.27?
It should
I don't think it is being used
Do I need to configure it to my repository or just make sure it is generally installed
Just ran these commands in git bash
git lfs track is per repo
and it should be umap and uasset
and then once you do that, you will need to recommit your assets, or rewrite history using the git lfs migrate command
Thank you mastercoms
Maybe I'm doing something dumb. I'm getting an error "The following modules are missing or built with a different engine version: GitSourceControl" Should I checkout any particular branch?
I just copied the git project into Myproject/Plugins
Binaries are not included with it, you have to recompile
righto
I managed to get it working it is going further than last time
Thank you @quaint obsidian
git bashed to the project directory then ran your said commands to use
you need to migrate
git lfs migrate import --fixup
Just ran that command it did something
i'll try it again now
i see the problem
I actually went over the LFS quota
My bad
received this error: Remote fatal pack exceeds maximum allowed size
Is there anyway I can split the push into 2 seperate ones
To get it through it seems to be hung up on 1 large push
That would not help if you are going over the LFS quota