[{"data":1,"prerenderedAt":1114},["ShallowReactive",2],{"/blog/git_for_server_updates":3,"/blog/git_for_server_updates-surround":1103},{"id":4,"title":5,"authors":6,"badge":12,"body":14,"date":1078,"description":1079,"extension":1080,"head":1081,"image":1092,"meta":1094,"navigation":307,"path":1095,"schemaOrg":1096,"seo":1099,"sitemap":1100,"stem":1101,"__hash__":1102},"posts/3.blog/git_for_server_updates.md","Using GitHub Desktop to Simplify FiveM Updates and Spot Every Change",[7],{"name":8,"to":9,"avatar":10},"Alec S.","/",{"src":11},"/web/pb3.png",{"label":13},"Git Workflow",{"type":15,"value":16,"toc":1066},"minimark",[17,22,36,56,60,74,79,93,121,125,128,166,187,190,194,197,393,408,410,414,417,523,525,529,532,549,559,583,593,614,623,625,629,635,645,708,711,713,717,720,978,980,984,1040,1042,1046,1059,1062],[18,19,21],"h2",{"id":20},"introduction","Introduction",[23,24,25,26,35],"p",{},"Every server owner knows the feeling. A new resource version drops, the changelog says ",[27,28,29,30,34],"em",{},"\"replace the ",[31,32,33],"code",{},"/config/framework"," folder\"",", and you freeze — because you spent hours tuning those files and you have no idea what the update actually touched. Do you overwrite and lose your work? Skip the folder and risk breaking the script? Copy lines back and forth by hand and hope you didn't miss anything?",[23,37,38,39,43,44,47,48,51,52,55],{},"There is a much better way — and you don't need to touch a single command. With a free app called ",[40,41,42],"strong",{},"GitHub Desktop",", you can ",[40,45,46],{},"see exactly what changed in any update",", ",[40,49,50],{},"keep your own customizations safe",", and ",[40,53,54],{},"roll back in seconds",", all through a simple point-and-click interface.",[18,57,59],{"id":58},"what-is-git-and-what-is-github-desktop","What Is Git, and What Is GitHub Desktop?",[23,61,62,65,66,69,70,73],{},[40,63,64],{},"Git"," is a ",[27,67,68],{},"version control system"," — think of it as an unlimited, perfect undo history for a folder. Every time you save a snapshot (called a ",[27,71,72],{},"commit","), it records the exact state of every file. Later you can compare any two snapshots line by line, restore an earlier state, or merge changes together.",[23,75,76,78],{},[40,77,42],{}," is a free, visual app that puts Git behind friendly buttons. No black terminal, no commands to memorize — just a clear window that shows you what changed and lets you commit, undo, and merge with a click.",[23,80,81,82,85,86,89,90],{},"For a FiveM server, the folder you track is your ",[31,83,84],{},"resources"," directory (or a single script inside it). Git turns ",[27,87,88],{},"\"I think I changed something in here a few weeks ago\""," into ",[27,91,92],{},"\"show me precisely what changed between last month and today.\"",[94,95,96],"note",{},[23,97,98,99,102,103,106,107,47,110,47,113,116,117,120],{},"GitHub Desktop works ",[40,100,101],{},"completely locally",". You do ",[40,104,105],{},"not"," have to upload anything to the internet — every feature in this guide runs offline on your own machine or VPS. Prefer a different app? ",[40,108,109],{},"Sourcetree",[40,111,112],{},"GitKraken",[40,114,115],{},"Fork",", and the built-in ",[40,118,119],{},"Source Control"," panel in VS Code all do the same job; the concepts below carry straight over.",[18,122,124],{"id":123},"why-this-is-perfect-for-resource-updates","Why This Is Perfect for Resource Updates",[23,126,127],{},"Updating a script the traditional way means working blind. Git gives you three superpowers:",[129,130,131,146,160],"ol",{},[132,133,134,137,138,141,142,145],"li",{},[40,135,136],{},"Change detection"," — after dropping in a new version, GitHub Desktop highlights every changed file and every changed line. The changelog tells you ",[27,139,140],{},"which folders"," to replace; Git shows you ",[27,143,144],{},"what actually changed"," so you can trust it.",[132,147,148,151,152,155,156,159],{},[40,149,150],{},"Safe customization"," — your edits live in commits. When a vendor update touches the same file, Git can ",[40,153,154],{},"merge"," the two sets of changes, keeping yours ",[27,157,158],{},"and"," theirs.",[132,161,162,165],{},[40,163,164],{},"Instant rollback"," — if an update breaks your server, you are one click away from the exact state you had five minutes ago. No \"where did I put that backup\" panic.",[167,168,169],"tip",{},[23,170,171,172,175,176,179,180,183,184,186],{},"This pairs perfectly with escrow-protected resources like ",[40,173,174],{},"Sky-Systems",". The encrypted ",[31,177,178],{},"source/"," folder never changes on your side, while everything you actually edit lives in the plaintext ",[31,181,182],{},"config/"," folder. Git tracks ",[31,185,182],{}," beautifully — which is exactly where your customizations and the vendor's updates collide.",[188,189],"hr",{},[18,191,193],{"id":192},"one-time-setup-with-github-desktop","One-Time Setup with GitHub Desktop",[23,195,196],{},"You only do this once per server.",[198,199,200,205,219,223,237,252,256,267,333,352,369,373,390],"steps",{},[201,202,204],"h3",{"id":203},"install-github-desktop","Install GitHub Desktop",[23,206,207,208,215,216,218],{},"Download and install it from ",[209,210,214],"a",{"href":211,"rel":212},"https://desktop.github.com",[213],"nofollow","desktop.github.com",". You can skip or close the sign-in prompt — an online account is only needed if you ever want to back up to GitHub, which this guide does ",[40,217,105],{}," require.",[201,220,222],{"id":221},"add-your-resources-folder","Add Your Resources Folder",[23,224,225,226,229,230,233,234,236],{},"In the menu bar, click ",[40,227,228],{},"File → Add local repository",", then ",[40,231,232],{},"Choose…"," and select your ",[31,235,84],{}," folder.",[23,238,239,240,243,244,247,248,251],{},"GitHub Desktop will notice it isn't tracked yet and show: ",[27,241,242],{},"\"This directory does not appear to be a Git repository.\""," Click the ",[40,245,246],{},"\"create a repository\""," link it offers. On the next screen, leave the defaults and click ",[40,249,250],{},"Create repository",".",[201,253,255],{"id":254},"protect-your-secrets","Protect Your Secrets",[23,257,258,259,262,263,266],{},"A FiveM server holds sensitive data that must ",[40,260,261],{},"never"," be saved into your history. In GitHub Desktop, open ",[40,264,265],{},"Repository → Repository settings → Ignored files"," and add rules like these:",[268,269,274],"pre",{"className":270,"code":271,"language":272,"meta":273,"style":273},"language-gitignore shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Never track secrets\n**/*.env\n**/secrets.lua\nserver.cfg\n\n# Caches, logs, build output\n**/cache/\n**/logs/\n**/.DS_Store\n","gitignore","",[31,275,276,284,290,296,302,309,315,321,327],{"__ignoreMap":273},[277,278,281],"span",{"class":279,"line":280},"line",1,[277,282,283],{},"# Never track secrets\n",[277,285,287],{"class":279,"line":286},2,[277,288,289],{},"**/*.env\n",[277,291,293],{"class":279,"line":292},3,[277,294,295],{},"**/secrets.lua\n",[277,297,299],{"class":279,"line":298},4,[277,300,301],{},"server.cfg\n",[277,303,305],{"class":279,"line":304},5,[277,306,308],{"emptyLinePlaceholder":307},true,"\n",[277,310,312],{"class":279,"line":311},6,[277,313,314],{},"# Caches, logs, build output\n",[277,316,318],{"class":279,"line":317},7,[277,319,320],{},"**/cache/\n",[277,322,324],{"class":279,"line":323},8,[277,325,326],{},"**/logs/\n",[277,328,330],{"class":279,"line":329},9,[277,331,332],{},"**/.DS_Store\n",[23,334,335,336,339,340,343,344,347,348,351],{},"You can also right-click any file in the ",[40,337,338],{},"Changes"," list and choose ",[40,341,342],{},"Ignore file"," (or ",[27,345,346],{},"Ignore all files of this type",") — GitHub Desktop adds it to ",[31,349,350],{},".gitignore"," for you.",[353,354,355],"warning",{},[23,356,357,360,361,364,365,368],{},[40,358,359],{},"Never commit credentials."," Database passwords, your ",[31,362,363],{},"sv_licenseKey",", Tebex secrets, Discord tokens, and webhook URLs must stay out of Git. Add them to the ignore list ",[40,366,367],{},"before"," your first commit — once something is committed, it stays in the history.",[201,370,372],{"id":371},"take-your-first-snapshot","Take Your First Snapshot",[23,374,375,376,378,379,382,383,386,387,251],{},"Switch to the ",[40,377,338],{}," tab (left sidebar). Every file appears in the list. In the bottom-left ",[40,380,381],{},"Summary"," box, type something like ",[31,384,385],{},"Baseline: working server before updates",", then click ",[40,388,389],{},"Commit to main",[23,391,392],{},"Done. You now have a safety net under your entire server.",[353,394,395],{},[23,396,397,400,401,404,405,251],{},[40,398,399],{},"Do not publish your paid resources."," If GitHub Desktop ever offers a blue ",[40,402,403],{},"\"Publish repository\""," button, leave it alone for any licensed or escrow-protected script. Uploading those files to a public repository violates the license and exposes paid content. Keep the repository ",[40,406,407],{},"local only",[188,409],{},[18,411,413],{"id":412},"the-update-workflow","The Update Workflow",[23,415,416],{},"This is the routine you repeat for every update. It takes about a minute.",[198,418,419,423,433,437,449,453,466,473,486,490,497,504,508,520],{},[201,420,422],{"id":421},"commit-your-current-state","Commit Your Current State",[23,424,425,426,428,429,432],{},"Open GitHub Desktop and check the ",[40,427,338],{}," tab. If anything is listed, commit it first with a summary like ",[31,430,431],{},"Pre-update snapshot",", so the update stands out cleanly. If the list is empty, you're ready.",[201,434,436],{"id":435},"drop-in-the-new-version","Drop In the New Version",[23,438,439,440,443,444,448],{},"Stop your server, then extract the new resource release ",[40,441,442],{},"over the top"," of the old files, overwriting them — exactly as the changelog instructs (for example, ",[27,445,29,446,34],{},[31,447,33],{},"). Don't worry about losing anything; your previous state is safely committed.",[201,450,452],{"id":451},"see-exactly-what-changed","See Exactly What Changed",[23,454,455,456,458,459,462,463,251],{},"Return to GitHub Desktop and open the ",[40,457,338],{}," tab. This is the magic moment: every file the update touched is listed, and clicking one shows its changes ",[40,460,461],{},"line by line"," — ",[40,464,465],{},"removed lines in red, added lines in green",[23,467,468,469,472],{},"You can now ",[27,470,471],{},"read"," precisely what the update did — new config options, changed defaults, renamed keys — instead of guessing.",[167,474,475],{},[23,476,477,478,481,482,485],{},"Glance down the file list and compare it against the changelog. If the changelog says only ",[31,479,480],{},"config/framework"," and ",[31,483,484],{},"config/banking"," changed, those should be the folders you see here. Anything unexpected is worth a closer look before you commit.",[201,487,489],{"id":488},"reconcile-your-customizations","Reconcile Your Customizations",[23,491,492,493,496],{},"If the update overwrote a file you had customized, the diff will show ",[40,494,495],{},"your"," settings in red (removed) and the vendor's defaults in green (added). Open that file in your editor, re-apply your values — the diff shows exactly which lines — and save. GitHub Desktop updates the comparison live as you type.",[23,498,499,500,503],{},"For a fully automatic reconcile, see the ",[40,501,502],{},"Pro Tip"," below.",[201,505,507],{"id":506},"commit-the-update","Commit the Update",[23,509,510,511,513,514,517,518,251],{},"Once everything looks right and your server boots cleanly, go back to the ",[40,512,338],{}," tab, enter a summary like ",[31,515,516],{},"Update sky_base to 1.21.0",", and click ",[40,519,389],{},[23,521,522],{},"You now have a labelled checkpoint you can always return to.",[188,524],{},[18,526,528],{"id":527},"rolling-back-when-something-breaks","Rolling Back When Something Breaks",[23,530,531],{},"An update misbehaves? Stay calm — GitHub Desktop gives you several options, from gentle to nuclear.",[23,533,534,537,538,540,541,544,545,548],{},[40,535,536],{},"Undo uncommitted changes."," In the ",[40,539,338],{}," tab, select the files (or all of them), right-click, and choose ",[40,542,543],{},"Discard Changes"," / ",[40,546,547],{},"Discard All Changes",". This restores them to your last commit.",[23,550,551,554,555,558],{},[40,552,553],{},"Go back to an earlier snapshot."," Open the ",[40,556,557],{},"History"," tab in the left sidebar to see every snapshot you've made:",[560,561,562,573],"ul",{},[132,563,564,565,568,569,572],{},"To ",[40,566,567],{},"safely undo"," an update while keeping a clean record, right-click the bad commit and choose ",[40,570,571],{},"Revert Changes in Commit",". This creates a new \"undo\" commit — nothing is lost.",[132,574,575,576,579,580,251],{},"To fully ",[40,577,578],{},"rewind"," to an earlier state, right-click the snapshot you want and choose ",[40,581,582],{},"Reset to commit",[353,584,585],{},[23,586,587,589,590,592],{},[40,588,582],{}," rewinds your project to that snapshot. Commit or stash anything you still want to keep first. When in doubt, prefer ",[40,591,571],{}," — it's the non-destructive option.",[23,594,595,598,599,602,603,606,607,610,611,251],{},[40,596,597],{},"Temporarily shelve your changes"," — handy for testing an update with a clean slate, then bringing your work back. Right-click the ",[40,600,601],{},"Changed files"," header and choose ",[40,604,605],{},"Stash All Changes",". To get them back, select ",[40,608,609],{},"Stashed Changes"," in the sidebar and click ",[40,612,613],{},"Restore",[94,615,616],{},[23,617,618,619,622],{},"GitHub Desktop keeps ",[40,620,621],{},"one"," stash at a time — stashing again replaces the previous one. Use it for short, temporary detours, and use commits for anything you want to keep.",[188,624],{},[18,626,628],{"id":627},"pro-tip-auto-merging-vendor-updates","Pro Tip: Auto-Merging Vendor Updates",[23,630,631,632,251],{},"Tired of re-applying your config edits by hand after every update? GitHub Desktop can do it for you using a ",[40,633,634],{},"three-way merge",[23,636,637,638,641,642,251],{},"The idea: keep one branch with ",[27,639,640],{},"pristine vendor releases"," and another with ",[27,643,644],{},"your edits on top",[198,646,647,651,666,670,683,687,701],{},[201,648,650],{"id":649},"create-a-vendor-branch","Create a Vendor Branch",[23,652,653,654,657,658,661,662,665],{},"Click the ",[40,655,656],{},"Current Branch"," dropdown at the top, then ",[40,659,660],{},"New Branch",", and name it ",[31,663,664],{},"vendor",". This branch will only ever hold untouched vendor files.",[201,667,669],{"id":668},"record-each-release-on-the-vendor-branch","Record Each Release on the Vendor Branch",[23,671,672,673,675,676,679,680,251],{},"When a new version comes out, switch to the ",[40,674,664],{}," branch (Current Branch dropdown), extract the ",[40,677,678],{},"unmodified"," release files over the top, then commit them with a summary like ",[31,681,682],{},"Vendor sky_base 1.21.0",[201,684,686],{"id":685},"merge-the-update-into-your-edits","Merge the Update Into Your Edits",[23,688,689,690,693,694,697,698,700],{},"Switch back to your ",[40,691,692],{},"main"," branch (Current Branch dropdown). Then open ",[40,695,696],{},"Branch → Merge into current branch…",", pick ",[40,699,664],{},", and click merge.",[23,702,703,704,707],{},"GitHub Desktop automatically combines the vendor's changes with your customizations. It only pauses to ask you when an update changes ",[40,705,706],{},"the exact same lines"," you customized — and it shows a clear screen to resolve those few spots. Everywhere else, both sets of changes are kept for you.",[23,709,710],{},"This is the same technique professional teams use to track upstream libraries without losing local changes — and it works just as well for your server.",[188,712],{},[18,714,716],{"id":715},"prefer-the-command-line","Prefer the Command Line?",[23,718,719],{},"If you're comfortable in a terminal, the entire workflow above maps to a handful of commands:",[268,721,725],{"className":722,"code":723,"language":724,"meta":273,"style":273},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# One-time setup (run inside your resources folder)\ngit init\ngit add .\ngit commit -m \"Baseline: working server before updates\"\n\n# Each update\ngit add . && git commit -m \"Pre-update snapshot\"   # snapshot first\n# ...drop in the new release, overwriting files...\ngit status            # which files changed\ngit diff --stat       # a compact per-file summary\ngit diff              # full line-by-line changes\ngit add . && git commit -m \"Update sky_base to 1.21.0\"\n\n# Rolling back\ngit restore \u003Cfile>    # undo changes to one file\ngit restore .         # undo all uncommitted changes\ngit log --oneline     # find a snapshot\ngit reset --hard \u003Cid> # rewind to it (destructive)\ngit stash / git stash pop   # shelve and restore temporarily\n","bash",[31,726,727,733,743,753,772,776,781,810,815,825,839,849,872,877,883,907,919,933,957],{"__ignoreMap":273},[277,728,729],{"class":279,"line":280},[277,730,732],{"class":731},"sHwdD","# One-time setup (run inside your resources folder)\n",[277,734,735,739],{"class":279,"line":286},[277,736,738],{"class":737},"sBMFI","git",[277,740,742],{"class":741},"sfazB"," init\n",[277,744,745,747,750],{"class":279,"line":292},[277,746,738],{"class":737},[277,748,749],{"class":741}," add",[277,751,752],{"class":741}," .\n",[277,754,755,757,760,763,767,769],{"class":279,"line":298},[277,756,738],{"class":737},[277,758,759],{"class":741}," commit",[277,761,762],{"class":741}," -m",[277,764,766],{"class":765},"sMK4o"," \"",[277,768,385],{"class":741},[277,770,771],{"class":765},"\"\n",[277,773,774],{"class":279,"line":304},[277,775,308],{"emptyLinePlaceholder":307},[277,777,778],{"class":279,"line":311},[277,779,780],{"class":731},"# Each update\n",[277,782,783,785,787,790,793,796,798,800,802,804,807],{"class":279,"line":317},[277,784,738],{"class":737},[277,786,749],{"class":741},[277,788,789],{"class":741}," .",[277,791,792],{"class":765}," &&",[277,794,795],{"class":737}," git",[277,797,759],{"class":741},[277,799,762],{"class":741},[277,801,766],{"class":765},[277,803,431],{"class":741},[277,805,806],{"class":765},"\"",[277,808,809],{"class":731},"   # snapshot first\n",[277,811,812],{"class":279,"line":323},[277,813,814],{"class":731},"# ...drop in the new release, overwriting files...\n",[277,816,817,819,822],{"class":279,"line":329},[277,818,738],{"class":737},[277,820,821],{"class":741}," status",[277,823,824],{"class":731},"            # which files changed\n",[277,826,828,830,833,836],{"class":279,"line":827},10,[277,829,738],{"class":737},[277,831,832],{"class":741}," diff",[277,834,835],{"class":741}," --stat",[277,837,838],{"class":731},"       # a compact per-file summary\n",[277,840,842,844,846],{"class":279,"line":841},11,[277,843,738],{"class":737},[277,845,832],{"class":741},[277,847,848],{"class":731},"              # full line-by-line changes\n",[277,850,852,854,856,858,860,862,864,866,868,870],{"class":279,"line":851},12,[277,853,738],{"class":737},[277,855,749],{"class":741},[277,857,789],{"class":741},[277,859,792],{"class":765},[277,861,795],{"class":737},[277,863,759],{"class":741},[277,865,762],{"class":741},[277,867,766],{"class":765},[277,869,516],{"class":741},[277,871,771],{"class":765},[277,873,875],{"class":279,"line":874},13,[277,876,308],{"emptyLinePlaceholder":307},[277,878,880],{"class":279,"line":879},14,[277,881,882],{"class":731},"# Rolling back\n",[277,884,886,888,891,894,897,901,904],{"class":279,"line":885},15,[277,887,738],{"class":737},[277,889,890],{"class":741}," restore",[277,892,893],{"class":765}," \u003C",[277,895,896],{"class":741},"fil",[277,898,900],{"class":899},"sTEyZ","e",[277,902,903],{"class":765},">",[277,905,906],{"class":731},"    # undo changes to one file\n",[277,908,910,912,914,916],{"class":279,"line":909},16,[277,911,738],{"class":737},[277,913,890],{"class":741},[277,915,789],{"class":741},[277,917,918],{"class":731},"         # undo all uncommitted changes\n",[277,920,922,924,927,930],{"class":279,"line":921},17,[277,923,738],{"class":737},[277,925,926],{"class":741}," log",[277,928,929],{"class":741}," --oneline",[277,931,932],{"class":731},"     # find a snapshot\n",[277,934,936,938,941,944,946,949,952,954],{"class":279,"line":935},18,[277,937,738],{"class":737},[277,939,940],{"class":741}," reset",[277,942,943],{"class":741}," --hard",[277,945,893],{"class":765},[277,947,948],{"class":741},"i",[277,950,951],{"class":899},"d",[277,953,903],{"class":765},[277,955,956],{"class":731}," # rewind to it (destructive)\n",[277,958,960,962,965,968,970,972,975],{"class":279,"line":959},19,[277,961,738],{"class":737},[277,963,964],{"class":741}," stash",[277,966,967],{"class":741}," /",[277,969,795],{"class":741},[277,971,964],{"class":741},[277,973,974],{"class":741}," pop",[277,976,977],{"class":731},"   # shelve and restore temporarily\n",[188,979],{},[18,981,983],{"id":982},"best-practices","Best Practices",[560,985,986,992,1005,1011,1021,1034],{},[132,987,988,991],{},[40,989,990],{},"Commit before every update."," A snapshot takes two seconds and saves hours.",[132,993,994,997,998,1000,1001,1004],{},[40,995,996],{},"Write clear summaries."," ",[31,999,516],{}," beats ",[31,1002,1003],{},"stuff"," when you're scanning history six months later.",[132,1006,1007,1010],{},[40,1008,1009],{},"Keep secrets ignored."," Credentials never belong in version history.",[132,1012,1013,1020],{},[40,1014,1015,1016,1019],{},"Commit ",[27,1017,1018],{},"after"," a clean boot, not before."," Label a snapshot as \"good\" only once the server actually runs.",[132,1022,1023,1029,1030,1033],{},[40,1024,1025,1026,1028],{},"Track your whole ",[31,1027,84],{}," folder in one repository."," That way a single rollback can recover from a bad update to ",[27,1031,1032],{},"any"," script.",[132,1035,1036,1039],{},[40,1037,1038],{},"Keep it local."," Never publish licensed or escrow-protected resources to a public repository.",[188,1041],{},[18,1043,1045],{"id":1044},"conclusion","Conclusion",[23,1047,1048,1049,47,1052,51,1055,1058],{},"Updating a FiveM server no longer has to mean guesswork, lost customizations, and frantic backup hunting. With a one-time GitHub Desktop setup and a one-minute routine, you can ",[40,1050,1051],{},"see every change an update makes",[40,1053,1054],{},"keep your own edits intact",[40,1056,1057],{},"undo any mistake instantly"," — all without typing a single command.",[23,1060,1061],{},"The next time a changelog tells you to replace a folder, you'll do it with confidence — because GitHub Desktop will show you exactly what changed, every single time.",[1063,1064,1065],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":273,"searchDepth":280,"depth":286,"links":1067},[1068,1069,1070,1071,1072,1073,1074,1075,1076,1077],{"id":20,"depth":286,"text":21},{"id":58,"depth":286,"text":59},{"id":123,"depth":286,"text":124},{"id":192,"depth":286,"text":193},{"id":412,"depth":286,"text":413},{"id":527,"depth":286,"text":528},{"id":627,"depth":286,"text":628},{"id":715,"depth":286,"text":716},{"id":982,"depth":286,"text":983},{"id":1044,"depth":286,"text":1045},"2026-06-15T00:00:00.000Z","A no-command-line guide for FiveM server owners: use GitHub Desktop to see exactly what changed in an update, keep your own config edits, and roll back instantly when something breaks.","md",{"script":1082},[1083],{"type":1084,"key":1085,"data-nuxt-schema-org":307,"nodes":1086},"application/ld+json","schema-org-graph",[1087],{"headline":5,"author":1088,"datePublished":1090,"@type":1091},{"name":8,"@type":1089},"Person","2026-06-15","BlogPosting",{"src":1093},"/blog/git_for_server_updates.png",{},"/blog/git_for_server_updates",[1097],{"headline":5,"author":1098,"datePublished":1090,"@type":1091},{"name":8,"@type":1089},{"title":5,"description":1079},{"loc":1095},"3.blog/git_for_server_updates","yMYy3l2dMq6CYccuHEmdqR4tOoQ909-G0sxIuGY_Y2g",[1104,1109],{"title":1105,"path":1106,"stem":1107,"description":1108,"children":-1},"FiveM Screen Effects List – All GTA V Post FX with Examples (2026)","/blog/fivem_screen_effects","3.blog/fivem_screen_effects","Complete FiveM screen effects list with preview images and ready-to-copy StartScreenEffect examples. Covers all GTA V post-processing FX, usage tips, performance notes, and best practices for FiveM servers.",{"title":1110,"path":1111,"stem":1112,"description":1113,"children":-1},"Why All-in-One Police Systems for FiveM Are More Cost-Effective","/blog/price_check","3.blog/price_check","A practical market price check for FiveM police systems. We compare the cost of buying similar police features individually versus choosing one integrated package, using a regular lifetime price of EUR 80 as the benchmark.",1781561651177]