diff --git a/Editor/GitPanel.cs b/Editor/GitPanel.cs index 2679bf7..068d617 100644 --- a/Editor/GitPanel.cs +++ b/Editor/GitPanel.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; public class GitPanel : EditorWindow { private string commitMessage = ""; + private string remoteUrlInput = ""; // NEU: Speicher für die Remote-URL private bool hasRepo = false; private string[] changedFiles = new string[0]; private Vector2 scrollPositionChanges; @@ -18,7 +19,7 @@ public class GitPanel : EditorWindow private struct CommitInfo { public string hash; public string date; public string message; } private List commitHistory = new List(); - [MenuItem("Tools/Git-Tool")] + [MenuItem("Tools/MrUnknownDE/Git-Tool")] public static void ShowWindow() { GitPanel window = GetWindow("Source Control"); @@ -26,9 +27,25 @@ public class GitPanel : EditorWindow } private void OnEnable() + { + RefreshData(); + } + + private void OnFocus() + { + RefreshData(); + } + + public void RefreshData() { CheckRepoStatus(); - SetDefaultCommitMessage(); + + if (string.IsNullOrWhiteSpace(commitMessage) || commitMessage.StartsWith("Auto-Save:")) + { + SetDefaultCommitMessage(); + } + + Repaint(); } private void SetDefaultCommitMessage() @@ -58,13 +75,42 @@ public class GitPanel : EditorWindow private void RenderInitUI() { EditorGUILayout.HelpBox("No local Git repository found. Initialize current project folder?", MessageType.Warning); + + GUILayout.Space(10); + GUILayout.Label("Remote Repository URL (Optional):", EditorStyles.boldLabel); + remoteUrlInput = EditorGUILayout.TextField(remoteUrlInput, GUILayout.Height(25)); + EditorGUILayout.HelpBox("e.g., https://github.com/user/repo.git or git@gitea.domain.com:user/repo.git", MessageType.Info); + GUILayout.Space(10); + if (GUILayout.Button("Initialize Repository", GUILayout.Height(30))) { RunGitCommand("init"); + + // Branch direkt sauber auf "main" setzen (verhindert Konflikte mit alten "master" Defaults) + RunGitCommand("branch -M main"); + + // Remote URL hinzufügen, falls angegeben + if (!string.IsNullOrWhiteSpace(remoteUrlInput)) + { + RunGitCommand($"remote add origin \"{remoteUrlInput.Trim()}\""); + } + GenerateUnityGitIgnore(); RunGitCommand("add .gitignore"); RunGitCommand("commit -m \"Initial commit (GitIgnore)\""); - CheckRepoStatus(); + + // Initialen Push ausführen, wenn ein Remote existiert + if (!string.IsNullOrWhiteSpace(remoteUrlInput)) + { + RunGitCommand("push -u origin main"); + UnityEngine.Debug.Log("Git-Tool: Repository initialized and pushed to remote!"); + } + else + { + UnityEngine.Debug.Log("Git-Tool: Local repository initialized successfully."); + } + + RefreshData(); } } @@ -81,8 +127,8 @@ public class GitPanel : EditorWindow RunGitCommand($"commit -m \"{commitMessage}\""); RunGitCommand("push"); - SetDefaultCommitMessage(); - CheckRepoStatus(); + commitMessage = ""; + RefreshData(); UnityEngine.Debug.Log("Git-Tool: Changes successfully pushed!"); } GUI.backgroundColor = Color.white; @@ -95,8 +141,7 @@ public class GitPanel : EditorWindow GUILayout.Label($"CHANGES ({changedFiles.Length})", EditorStyles.boldLabel); if (GUILayout.Button("↻", GUILayout.Width(25))) { - CheckRepoStatus(); - SetDefaultCommitMessage(); + RefreshData(); } EditorGUILayout.EndHorizontal(); @@ -275,4 +320,20 @@ obj } catch { return ""; } } +} + +public class GitSaveListener : UnityEditor.AssetModificationProcessor +{ + public static string[] OnWillSaveAssets(string[] paths) + { + EditorApplication.delayCall += () => + { + if (EditorWindow.HasOpenInstances()) + { + EditorWindow.GetWindow().RefreshData(); + } + }; + + return paths; + } } \ No newline at end of file