{"type": "body", "content": "", "style": null, "bbox": [8, 16, 1264, 1801], "children": [{"type": "header", "content": "", "style": null, "bbox": [8, 16, 1264, 129], "children": [{"type": "nav", "content": "", "style": null, "bbox": [8, 16, 1264, 129], "children": [{"type": "ul", "content": "", "style": null, "bbox": [8, 16, 1264, 129], "children": [{"type": "li", "content": "", "style": null, "bbox": [48, 16, 1224, 18], "children": [{"type": "a", "content": "/home", "style": null, "bbox": [48, 16, 40, 17], "children": []}]}, {"type": "li", "content": "", "style": null, "bbox": [48, 34, 1224, 18], "children": [{"type": "a", "content": "~/misc", "style": null, "bbox": [48, 34, 43, 17], "children": []}]}, {"type": "li", "content": "", "style": null, "bbox": [48, 52, 1224, 18], "children": [{"type": "a", "content": "~/notes", "style": null, "bbox": [48, 52, 46, 17], "children": []}]}, {"type": "li", "content": "", "style": null, "bbox": [48, 70, 1224, 18], "children": [{"type": "a", "content": "~/categories", "style": null, "bbox": [48, 70, 77, 17], "children": []}]}, {"type": "li", "content": "", "style": null, "bbox": [48, 88, 1224, 18], "children": [{"type": "a", "content": "~/links", "style": null, "bbox": [48, 88, 44, 17], "children": []}]}, {"type": "li", "content": "", "style": null, "bbox": [48, 106, 1224, 18], "children": [{"type": "a", "content": "~/about me", "style": null, "bbox": [48, 106, 72, 17], "children": []}]}, {"type": "li", "content": "", "style": null, "bbox": [48, 124, 1224, 21], "children": [{"type": "form", "content": "", "style": null, "bbox": [48, 124, 1224, 21], "children": [{"type": "input", "content": "", "style": "", "bbox": [48, 124, 177, 21], "children": []}, {"type": "input", "content": "", "style": "", "bbox": [229, 124, 177, 21], "children": []}, {"type": "button", "content": "Bing", "style": null, "bbox": [410, 124, 42, 21], "children": []}]}]}]}]}]}, {"type": "div", "content": "", "style": null, "bbox": [8, 200, 1264, 144], "children": [{"type": "h1", "content": "", "style": null, "bbox": [8, 200, 1264, 37], "children": [{"type": "span", "content": "Deploy A Local SVN Repo For Unreal Source Control", "style": null, "bbox": [8, 200, 733, 36], "children": []}]}, {"type": "p", "content": "2023/08/02", "style": null, "bbox": [8, 258, 1264, 18], "children": []}, {"type": "p", "content": "", "style": null, "bbox": [8, 292, 1264, 18], "children": [{"type": "a", "content": "2023/08/02", "style": null, "bbox": [70, 292, 72, 17], "children": []}]}, {"type": "p", "content": "", "style": null, "bbox": [8, 326, 1264, 18], "children": [{"type": "a", "content": "UE", "style": null, "bbox": [84, 326, 21, 17], "children": []}]}]}, {"type": "nav", "content": "", "style": null, "bbox": [8, 360, 1264, 54], "children": [{"type": "ul", "content": "", "style": null, "bbox": [8, 360, 1264, 54], "children": [{"type": "li", "content": "", "style": null, "bbox": [48, 360, 1224, 54], "children": [{"type": "a", "content": "Taking Subversion (SVN) as Source Control", "style": null, "bbox": [48, 360, 285, 17], "children": []}, {"type": "ul", "content": "", "style": null, "bbox": [48, 378, 1224, 36], "children": [{"type": "li", "content": "", "style": null, "bbox": [88, 378, 1184, 18], "children": [{"type": "a", "content": "Error: Expected FS format error", "style": null, "bbox": [88, 378, 205, 17], "children": []}]}, {"type": "li", "content": "", "style": null, "bbox": [88, 396, 1184, 18], "children": [{"type": "a", "content": "Error: Could not be successfully checked out assets", "style": null, "bbox": [88, 396, 329, 17], "children": []}]}]}]}]}]}, {"type": "aside", "content": "", "style": null, "bbox": [8, 433, 1264, 94], "children": [{"type": "h3", "content": "Table of contents", "style": null, "bbox": [8, 433, 1264, 22], "children": []}, {"type": "nav", "content": "", "style": null, "bbox": [8, 474, 1264, 54], "children": [{"type": "ul", "content": "", "style": null, "bbox": [8, 474, 1264, 54], "children": [{"type": "li", "content": "", "style": null, "bbox": [48, 474, 1224, 54], "children": [{"type": "a", "content": "Taking Subversion (SVN) as Source Control", "style": null, "bbox": [48, 474, 285, 17], "children": []}, {"type": "ul", "content": "", "style": null, "bbox": [48, 492, 1224, 36], "children": [{"type": "li", "content": "", "style": null, "bbox": [88, 492, 1184, 18], "children": [{"type": "a", "content": "Error: Expected FS format error", "style": null, "bbox": [88, 492, 205, 17], "children": []}]}, {"type": "li", "content": "", "style": null, "bbox": [88, 510, 1184, 18], "children": [{"type": "a", "content": "Error: Could not be successfully checked out assets", "style": null, "bbox": [88, 510, 329, 17], "children": []}]}]}]}]}]}]}, {"type": "main", "content": "", "style": null, "bbox": [8, 544, 1264, 1197], "children": [{"type": "p", "content": "", "style": null, "bbox": [8, 544, 1264, 18], "children": []}, {"type": "div", "content": "", "style": "padding: 18px; line-height: 24px; margin-bottom: 24px; border-radius: 4px; color: #444; background: #e7f2fa; background: #fff2db", "bbox": [8, 578, 1264, 36], "children": []}, {"type": "p", "content": "", "style": "margin: -18px -18px 12px; padding: 4px 18px; border-radius: 4px 4px 0 0; font-weight: 700; color: #fff; background: #6ab0de", "bbox": [-10, 620, 1300, 28], "children": [{"type": "span", "content": "", "style": "display: inline-flex; align-self: center; margin-right: 8px", "bbox": [8, 624, 16, 16], "children": [{"type": "svg", "content": "", "style": "height: 1em; width: 1em; fill: currentColor; top: 0.125em; position: relative", "bbox": [8, 626, 16, 16], "children": []}]}]}, {"type": "p", "content": "Engine Version: 5.2.0", "style": null, "bbox": [8, 664, 1264, 18], "children": []}, {"type": "p", "content": "", "style": null, "bbox": [8, 698, 1264, 36], "children": [{"type": "strong", "content": "Perforce", "style": null, "bbox": [8, 698, 58, 17], "children": []}, {"type": "a", "content": "", "style": null, "bbox": [98, 716, 109, 17], "children": [{"type": "code", "content": "UnrealGameSync", "style": null, "bbox": [98, 719, 109, 15], "children": []}]}]}, {"type": "p", "content": "Although perforce is the best choice for Unreal Engine, it's not free, and it's not easy to setup a local perforce server for personal use.", "style": null, "bbox": [8, 750, 1264, 18], "children": []}, {"type": "p", "content": "", "style": null, "bbox": [8, 784, 1264, 54], "children": [{"type": "strong", "content": "Local", "style": null, "bbox": [390, 784, 38, 17], "children": []}, {"type": "strong", "content": "small", "style": null, "bbox": [459, 784, 36, 17], "children": []}, {"type": "a", "content": "", "style": null, "bbox": [1044, 784, 85, 17], "children": [{"type": "code", "content": "Lyra Sample", "style": null, "bbox": [1044, 787, 85, 15], "children": []}]}]}, {"type": "h1", "content": "Taking Subversion (SVN) as Source Control", "style": null, "bbox": [8, 859, 1264, 37], "children": []}, {"type": "p", "content": "", "style": null, "bbox": [8, 918, 1264, 36], "children": [{"type": "code", "content": "Git", "style": null, "bbox": [1209, 921, 23, 15], "children": []}, {"type": "code", "content": "git-lfs", "style": null, "bbox": [326, 939, 54, 15], "children": []}]}, {"type": "p", "content": "Back to the point, Epic has a documentation about how to deploy a local SVN repo, and associate it with Unreal Editor.", "style": null, "bbox": [8, 970, 1264, 18], "children": []}, {"type": "blockquote", "content": "", "style": null, "bbox": [48, 1004, 1184, 21], "children": [{"type": "p", "content": "", "style": null, "bbox": [48, 1004, 1184, 21], "children": [{"type": "a", "content": "Using SVN as Source Control for Unreal Engine | Unreal Engine 5.2 Documentation", "style": null, "bbox": [128, 1007, 543, 17], "children": []}]}]}, {"type": "p", "content": "", "style": null, "bbox": [8, 1041, 1264, 18], "children": [{"type": "code", "content": "VisualSVN", "style": null, "bbox": [504, 1044, 70, 15], "children": []}]}, {"type": "h2", "content": "Error: Expected FS format error", "style": null, "bbox": [8, 1079, 1264, 27], "children": []}, {"type": "blockquote", "content": "", "style": null, "bbox": [48, 1126, 1184, 21], "children": [{"type": "p", "content": "", "style": null, "bbox": [48, 1126, 1184, 21], "children": [{"type": "a", "content": "SVN source control error within UE4 - Development / Pipeline & Plugins - Epic Developer Community Forums", "style": null, "bbox": [96, 1129, 719, 17], "children": []}]}]}, {"type": "p", "content": "", "style": null, "bbox": [8, 1163, 1264, 18], "children": [{"type": "code", "content": "svn: E160043: Expected FS format between '1' and '7'; found format '8'", "style": null, "bbox": [8, 1166, 546, 15], "children": []}]}, {"type": "p", "content": "", "style": null, "bbox": [8, 1197, 1264, 36], "children": [{"type": "code", "content": "svn, version 1.9.5 (r1770682)", "style": null, "bbox": [653, 1200, 226, 15], "children": []}, {"type": "code", "content": "Setup.bat", "style": null, "bbox": [934, 1200, 70, 15], "children": []}, {"type": "code", "content": "", "style": null, "bbox": [8, 1218, 390, 15], "children": []}]}, {"type": "p", "content": "To fix this, we need to create our local repo in using commandline tool with additional flag:", "style": null, "bbox": [8, 1249, 1264, 18], "children": []}, {"type": "pre", "content": "", "style": null, "bbox": [8, 1283, 1264, 15], "children": [{"type": "code", "content": "svnadmin create --compatible-version 1.9 --fs-type fsfs <repoName>", "style": null, "bbox": [8, 1283, 514, 15], "children": []}]}, {"type": "h2", "content": "Error: Could not be successfully checked out assets", "style": null, "bbox": [8, 1317, 1264, 27], "children": []}, {"type": "blockquote", "content": "", "style": null, "bbox": [48, 1364, 1184, 21], "children": [{"type": "p", "content": "", "style": null, "bbox": [48, 1364, 1184, 21], "children": [{"type": "a", "content": "How to solve \u201ccould not be successfully checked out\u201d with SVN and Unreal Engine 4 Editor - IT World", "style": null, "bbox": [96, 1367, 665, 17], "children": []}]}]}, {"type": "p", "content": "It's an another common pitfall for local repo.\nFor a newly created local SVN repo, there is no security check and no username and password are needed.\nIn Unreal Editor Source Control plugin, inputting repo url without specifying username and password may seems work(Unreal Editor won't complains).\nBut when you try to check out files, it will fail.", "style": null, "bbox": [8, 1401, 1264, 36], "children": []}, {"type": "p", "content": "", "style": null, "bbox": [8, 1453, 1264, 36], "children": [{"type": "code", "content": "SVN Lock", "style": null, "bbox": [283, 1456, 62, 15], "children": []}]}, {"type": "p", "content": "To fix it, just specify a username (password is not needed) in the below window.", "style": null, "bbox": [8, 1505, 1264, 18], "children": []}, {"type": "p", "content": "", "style": null, "bbox": [8, 1539, 1264, 202], "children": [{"type": "img", "content": "", "style": null, "bbox": [8, 1539, 592, 198], "children": []}]}]}, {"type": "footer", "content": "", "style": null, "bbox": [8, 1757, 1264, 60], "children": [{"type": "nav", "content": "", "style": null, "bbox": [8, 1757, 1264, 21], "children": [{"type": "span", "content": "", "style": null, "bbox": [8, 1760, 177, 17], "children": [{"type": "a", "content": "D3D11_Filter \u679a\u4e3e\u7ec4\u88c5", "style": null, "bbox": [28, 1760, 157, 17], "children": []}]}, {"type": "span", "content": "", "style": null, "bbox": [189, 1760, 341, 17], "children": [{"type": "a", "content": "Unreal Loads Packages Slowly On Actor Deletion", "style": null, "bbox": [189, 1760, 321, 17], "children": []}]}]}, {"type": "hr", "content": "", "style": null, "bbox": [8, 1786, 1264, 2], "children": []}, {"type": "a", "content": "Hugo", "style": null, "bbox": [76, 1799, 35, 17], "children": []}, {"type": "a", "content": "hugo-classic", "style": null, "bbox": [122, 1799, 79, 17], "children": []}, {"type": "a", "content": "RSS Feed", "style": null, "bbox": [213, 1799, 63, 17], "children": []}]}]}
<!DOCTYPE html>

<html><head></head><header><title>Deploy A Local SVN Repo For Unreal Source Control | Blurred code</title><nav><ul><li class="pull-left"><a>/home</a></li><li class="pull-left"><a>~/misc</a></li><li class="pull-left"><a>~/notes</a></li><li class="pull-left"><a>~/categories</a></li><li class="pull-left"><a>~/links</a></li><li class="pull-left"><a>~/about me</a></li><li class="pull-right"><form id="bingSearch"><input/><input/><button>Bing</button></form></li><div style="clear:both;"></div></ul></nav></header><body><br/><div class="article-meta"><h1><span class="title">Deploy A Local SVN Repo For Unreal Source Control</span></h1><p class="date">2023/08/02</p><p class="date">LastMod:<a>2023/08/02</a></p><p class="terms">
Categories: <a>UE</a></p></div><nav id="TableOfContents"><ul><li><a>Taking Subversion (SVN) as Source Control</a><ul><li><a>Error: Expected FS format error</a></li><li><a>Error: Could not be successfully checked out assets</a></li></ul></li></ul></nav><aside id="TableOfContentsContainer"><h3>Table of contents</h3><nav id="TableOfContents"><ul><li><a>Taking Subversion (SVN) as Source Control</a><ul><li><a>Error: Expected FS format error</a></li><li><a>Error: Could not be successfully checked out assets</a></li></ul></li></ul></nav></aside><main><p><svg height="0" width="0"><symbol id="tip-notice"><path></path></symbol><symbol id="note-notice"><path></path></symbol><symbol id="warning-notice"><path></path></symbol><symbol id="info-notice"><path></path></symbol></svg><div class="notice info"></div></p><p class="first notice-title"><span class="icon-notice baseline"><svg><use></use></svg></span>Info</p><p>Engine Version: 5.2.0</p><p><strong>Perforce</strong> is the first class source control system for Unreal Engine, Epic itself, along with many other game studios, including my current studio, are using it.
Epic develops an excellent tool to work with Perforce <a><code>UnrealGameSync</code></a>.</p><p>Although perforce is the best choice for Unreal Engine, it's not free, and it's not easy to setup a local perforce server for personal use.</p><p>It's common for developers, and also artists, to create some <strong>Local</strong> and <strong>small</strong> repos for prototyping ,bug testing and learning.
For example, developers may have a <a><code>Lyra Sample</code></a> as a playground and also a learning resource on their disks.
Personally, I may change code/assets from such testing project, to observe what may happen, but lately revert these experimental change.
Without source control, it's impossible to record what I changed and revert.</p><h1 id="taking-subversion-svn-as-source-control">Taking Subversion (SVN) as Source Control</h1><p>To be honest, I'm not a fan of SVN due to my unfavorable experience about its fragility.
I once worked on a fairly large project(about 600GB) and SVN complained from time to time.
But <code>Git</code> is an even bigger disaster for game projects, even with <code>git-lfs</code>.</p><p>Back to the point, Epic has a documentation about how to deploy a local SVN repo, and associate it with Unreal Editor.</p><blockquote><p>Reference：<a>Using SVN as Source Control for Unreal Engine | Unreal Engine 5.2 Documentation</a></p></blockquote><p>It's a good documentation, but it's just a little bit outdated and is based on the <code>VisualSVN</code>.
I have tested tortoiseSVN and it was OK, and I need to make some additions to make it work.</p><h2 id="error-expected-fs-format-error">Error: Expected FS format error</h2><blockquote><p>参考：<a>SVN source control error within UE4 - Development / Pipeline &amp; Plugins - Epic Developer Community Forums</a></p></blockquote><p><code>svn: E160043: Expected FS format between '1' and '7'; found format '8' </code></p><p>This error is because unreal doesn't use system installed subversion, but it downloads an old version(<code>svn, version 1.9.5 (r1770682)</code>) during <code>Setup.bat</code>.
See <code>&lt;EnginePath&gt;/Binaries/ThirdParty/svn/Win64/svn.exe</code>.</p><p>To fix this, we need to create our local repo in using commandline tool with additional flag:</p><pre><code>svnadmin create --compatible-version 1.9 --fs-type fsfs &lt;repoName&gt;
</code></pre><h2 id="error-could-not-be-successfully-checked-out-assets">Error: Could not be successfully checked out assets</h2><blockquote><p>参考：<a>How to solve “could not be successfully checked out” with SVN and Unreal Engine 4 Editor - IT World</a></p></blockquote><p>It's an another common pitfall for local repo.
For a newly created local SVN repo, there is no security check and no username and password are needed.
In Unreal Editor Source Control plugin, inputting repo url without specifying username and password may seems work(Unreal Editor won't complains).
But when you try to check out files, it will fail.</p><p>This is because Unreal Editor will execute <code>SVN Lock</code> command with the current system user name.
And after files are locked, the editor plugin will check if the files is locked by ourselves, but oops, we haven't specified any username and password, so the plugin fails the check and thinks the files are locked by others.</p><p>To fix it, just specify a username (password is not needed) in the below window.</p><p><img src="https://img.blurredcode.com/img/UE-SVN-Local-Repo-2023-08-02-23-41-00.jpg?x-oss-process=style/compress"/></p><button id="topBtn">Top</button></main><footer><nav class="post-nav"><span class="nav-prev">← <a>D3D11_Filter 枚举组装</a></span><span class="nav-next"><a>Unreal Loads Packages Slowly On Actor Deletion</a> →</span></nav><hr/>
自豪采用 <a>Hugo</a> | <a>hugo-classic</a> | <a>RSS Feed</a> | panda[at]blurredcode.com
</footer><style>#topBtn {
    display: none;
    position: fixed;
    bottom: 20px;
    right: 30px;
    z-index: 99;
    font-size: 18px;
    border: none;
    outline: none;
    background-color: #708090;
    color: white;
    cursor: pointer;
    padding: 15px;
    border-radius: 4px
    }
.notice {
    padding: 18px;
    line-height: 24px;
    margin-bottom: 24px;
    border-radius: 4px;
    color: #444;
    background: #e7f2fa
    }
.notice-title {
    margin: -18px -18px 12px;
    padding: 4px 18px;
    border-radius: 4px 4px 0 0;
    font-weight: 700;
    color: #fff;
    background: #6ab0de
    }
.notice.info {
    background: #fff2db
    }
.icon-notice {
    display: inline-flex;
    align-self: center;
    margin-right: 8px
    }
.icon-notice img, .icon-notice svg {
    height: 1em;
    width: 1em;
    fill: currentColor
    }
.icon-notice img, .icon-notice.baseline svg {
    top: 0.125em;
    position: relative
    }</style></body></html>