Go, Go, Godot!
  • 0

Update all resources after modifying a resource class

March 11, 2025

Godot’s resources are quite powerful. However, modifying a resource class doesn’t automatically update any corresponding .tres files, unless you happen to edit a scene that uses that resource in some way. This doesn’t impact runtime behavior — the game still runs as expected. But it can impact version control and result in a messier diff where seemingly unrelated files are modified, which increases the chance of merge conflicts.

A simple way to address this is to update all resources by re-saving them after modifying a resource class and check everything in with the same git commit. Godot doesn’t have that functionality built in, but it’s easy to create a script to do this.

@tool
extends EditorScript

## Crawls the entire codebase, loads, and re-saves every resource.
## Run this script with CTRL/CMD+SHIFT+X.


func _run() -> void:
	for filename in _build_file_list("res://", "tres", 20):
		var res: Resource = ResourceLoader.load(filename)
		ResourceSaver.save(res, res.resource_path)
	

static func _build_file_list(
	path: String, 
	suffix: String, 
	recursion_depth: int
) -> Array[String]:
	var dir = DirAccess.open(path)
	if not dir:
		push_error("An error occurred when trying to access path: %s" % [path])
		return []

	var files: Array[String]
	dir.list_dir_begin()
	var file_name = dir.get_next()
	while file_name != "":
		if dir.current_is_dir() and recursion_depth:
			var sub_dir: String = "%s/%s" % [path, file_name]
			files.append_array(_build_file_list(sub_dir, suffix, recursion_depth - 1))
		elif file_name.ends_with(suffix):
			var full_path = "%s/%s" % [path, file_name]
			files.append(full_path)
		file_name = dir.get_next()

	return files

gitgodotresourcesversion control
Posted in Godot.
Share
PreviousInventory System 2 Alpha 3 available
NextInventory System 2 Alpha 2 available

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Related Posts

  • October 9, 2023

    Design Patterns for Building Friendships

    In this 2018 GDC session, Spry Fox‘s Daniel Cook explains how to keep human beings from being treated as interchangeable, disposable, or abusable when designing multiplayer games. If you’re developing, or thinking about developing a multiplayer game, this is a great talk to better understand the challenges of designing multiplayer interactions that result in more …

  • October 10, 2024

    Inventory System v1.16 available

    A new version of the Inventory System is available. This version requires Godot Engine 4.3 and includes many refinements. New Drag and Drop system The Drag-and-Drop component has received a major overhaul. The previous system was quite complex and the separation of the classes that implemented the click-and-drag and click-and-release approaches had so much overlap …

  • Godot and Netlify
    January 22, 2023

    Quickly deploying Godot games on the web with Netlify

    When I think of video games, I generally still think of an application that is downloaded and runs on the client. Technically, that’s still the case with web-based exports from Godot Engine, since the web browser has to download the files before being able to run them. I thought maybe I could just run the …

  • April 21, 2024

    Inventory System v1.13 available

    It’s been a while, but it was worth the wait. The latest version of the Inventory System is now available, with a long list of features, improvements, fixes, and documentation. This time the focus is on multiplayer. Let’s cover the features first: Bug fixes:

    © 2026 GoGoGodot.io. All rights reserved.