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

  • November 27, 2024

    Toggling Visibility of Nested CanvasLayers

    I had a setup with nested CanvasLayer nodes. Toggling the visibility of the root CanvasLayer doesn’t hide any nested CanvasLayer nodes. My solution was to listen to the visibility_changed signal, find any CanvasLayer child nodes, and apply the same visibility to them.

  • February 25, 2024

    Inventory System v1.11 available

    The latest inventory system is now available and it focuses on multiplayer permissions. The new Access Manager component validates client requests to ensure players can’t cheat and interact with inventories they’re not supposed to be able to have access to. New features: Bug fixes:

  • March 27, 2025

    Inventory System 2 Alpha 5 available

    This release addresses an issue that arose due to Godot 4.4 changes in how JSON is deserialized. Relevant Godot issues: #103374 and #61464. Makes sense why it was changed, but it might impact anyone unaware who’s consuming a JSON-based API, and wondering why responses may not be as expected. In addition, this release now includes character damage and …

  • October 27, 2022

    Projectiles going through collision objects

    Ever had the problem where you’re firing a bullet or some kind of projectile at high speeds, and it just goes right through the collision object, instead of hitting it? Here’s a weapon that fires a bullet at random velocities, to demonstrate the issue: The bullets impact the character in various places, rather than at …

    © 2026 GoGoGodot.io. All rights reserved.