forum

Version control, team collaboration on mapping

posted
Total Posts
5
Topic Starter
Drum-Hitnormal
Problem statement:
osu doesn't have any version control, or support for team collaboration on a song compilation project.

Solution:
set up git and song folder somewhere else, use symbolic link to osu\song
Windows:
mklink /J "C:\Program Files (x86)\osu!\Songs\{your map folder}" "D:\some other folder\{your map folder}"

then you can keep track of history and not upload the .git folder

Edit: ppy said he planned something better for lazer
lewski
otherwise very cool (and I agree that a junction is the way to go if you want to use git with osu!) but I'm honestly not sure if git can actually improve the collab workflow meaningfully

e: also osu! is installed under %localappdata% by default on windows so that guide is a bit misleading, although I really hope anyone who's tech-savvy enough to actually do this would also know where their game is installed lol

if all you need is version history then yeah it should work great, but most of a .osu file isn't easily human-readable so I think handling merge conflicts in a collab would be a pain, so you'd just have to do it the usual way of either working on the collab one person at a time or manually combining a bunch of files with each person's parts in one file (unless you can just make git slam in all the changes one by one and not worry about it, it's been a while since I actually worked with git)

in a proper mapping vcs you'd probably want to do something akin to file locking but with timestamps so that people could only add or edit lines with timestamps within their own sections, maybe even go as far as to actually have each part in its own file under the hood and only include those in commits while what you see in-game is compiled from all those files
Topic Starter
Drum-Hitnormal
for collab usage,

there's actually no merge conflict, if Person A is edit song 1, and Person B edit song 2.
you would get conflict if they edit same timestamp.

for personal usage,

create Branch Pattern1, Pattern2, Pattern3
create branch SV1, SV2, SV3

now you can easily test out Pattern1+SV1, or Pattern 2 + SV3 , etc

and ofc version control and reverting changes

although git compare doesn't show you visually what changed, you can at least see the timestamp and check if someone changed things they shouldn't change

more than anything It gives me peace of mind whatever change I do I can always revert it. and nothing will be lost.
McEndu

lewski wrote:

if all you need is version history then yeah it should work great, but most of a .osu file isn't easily human-readable so I think handling merge conflicts in a collab would be a pain, ...
The merge conflict format is quite simple, as it is delimited by unique markers. It can be relatively easy to write a tool that splits a map with merge conflicts into two maps. In osu!mania where a comparison (Open for reference) feature is available, such a tool would make dealing with merge conflicts easier than what you think.

The following is what I think would happen when the tool is used...

- /
  - merge_conflict.osu.pending  The .osu with merge conflicts
  - merge_conflict.ours.osu     What the .osu was before merging
  - merge_conflict.theirs.osu   The .osu of your collabmate
Topic Starter
Drum-Hitnormal
here's an example project where Im applying this:
https://github.com/dudehacker/saikawa-yui-kyuuseigou-wa-kyuuteisha
Please sign in to reply.

New reply