diff --git a/Dockerfile b/Dockerfile index 9e75e70..2b2346c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,9 +13,10 @@ RUN apk add --no-cache git # Git Safe Directory für gemountete Windows-Verzeichnisse konfigurieren (system-weit für alle User) RUN git config --system --add safe.directory '*' -# Git-Benutzer konfigurieren (für Commits) +# Git-Benutzer und Standard-Branch konfigurieren (für Commits) RUN git config --system user.email "taskmate@local" && \ - git config --system user.name "TaskMate" + git config --system user.name "TaskMate" && \ + git config --system init.defaultBranch main # Package-Dateien kopieren COPY backend/package*.json ./ diff --git a/backend/services/gitService.js b/backend/services/gitService.js index 12bb714..f1f3410 100644 --- a/backend/services/gitService.js +++ b/backend/services/gitService.js @@ -448,14 +448,8 @@ function pushWithUpstream(localPath, branch = null, remoteName = 'origin') { return { success: false, error: 'Kein Git-Repository' }; } - // Aktuellen Branch ermitteln falls nicht angegeben - if (!branch) { - const branchResult = execGitCommand('git branch --show-current', localPath); - branch = branchResult.success && branchResult.output ? branchResult.output : 'main'; - } - // Prüfe ob Commits existieren - const logResult = execGitCommand('git rev-parse HEAD', localPath); + let logResult = execGitCommand('git rev-parse HEAD', localPath); if (!logResult.success) { // Keine Commits - erstelle einen initialen Commit const statusResult = execGitCommand('git status --porcelain', localPath); @@ -472,13 +466,55 @@ function pushWithUpstream(localPath, branch = null, remoteName = 'origin') { } logger.info('Initialer Commit erstellt vor Push'); + + // Verifiziere dass der Commit erstellt wurde + logResult = execGitCommand('git rev-parse HEAD', localPath); + if (!logResult.success) { + return { success: false, error: 'Commit wurde erstellt aber HEAD existiert nicht' }; + } } else { return { success: false, error: 'Keine Commits und keine Dateien zum Committen vorhanden' }; } } + // Aktuellen Branch ermitteln NACH dem Commit + const branchResult = execGitCommand('git branch --show-current', localPath); + if (branchResult.success && branchResult.output) { + branch = branchResult.output; + logger.info(`Aktueller Branch: ${branch}`); + } else { + // Fallback: Branch aus git branch auslesen + const branchListResult = execGitCommand('git branch', localPath); + logger.info(`Branch-Liste: ${branchListResult.output}`); + + if (branchListResult.success && branchListResult.output) { + const lines = branchListResult.output.split('\n'); + for (const line of lines) { + if (line.includes('*')) { + branch = line.replace('*', '').trim(); + break; + } + } + } + + if (!branch) { + // Letzter Fallback: Versuche den Branch zu erstellen + logger.info('Kein Branch gefunden, erstelle main'); + execGitCommand('git checkout -b main', localPath); + branch = 'main'; + } + } + + logger.info(`Push auf Branch: ${branch}`); + // Push mit -u für Upstream-Tracking - return execGitCommand(`git push -u ${remoteName} ${branch}`, localPath, { timeout: 120000 }); + const pushResult = execGitCommand(`git push -u ${remoteName} ${branch}`, localPath, { timeout: 120000 }); + + if (!pushResult.success) { + logger.error(`Push fehlgeschlagen: ${pushResult.error}`); + } + + return pushResult; } /** diff --git a/backups/backup_2025-12-22T11-19-54-427Z.db-wal b/backups/backup_2025-12-22T11-19-54-427Z.db-wal deleted file mode 100644 index e273b61..0000000 Binary files a/backups/backup_2025-12-22T11-19-54-427Z.db-wal and /dev/null differ diff --git a/backups/backup_2025-12-22T11-29-31-161Z.db-wal b/backups/backup_2025-12-22T11-29-31-161Z.db-wal deleted file mode 100644 index f5f2c9f..0000000 Binary files a/backups/backup_2025-12-22T11-29-31-161Z.db-wal and /dev/null differ diff --git a/backups/backup_2025-12-22T11-29-31-161Z.db b/backups/backup_2025-12-28T21-37-16-598Z.db similarity index 82% rename from backups/backup_2025-12-22T11-29-31-161Z.db rename to backups/backup_2025-12-28T21-37-16-598Z.db index 0fdc965..ecad564 100644 Binary files a/backups/backup_2025-12-22T11-29-31-161Z.db and b/backups/backup_2025-12-28T21-37-16-598Z.db differ diff --git a/backups/backup_2025-12-28T21-37-16-598Z.db-wal b/backups/backup_2025-12-28T21-37-16-598Z.db-wal new file mode 100644 index 0000000..65b1853 Binary files /dev/null and b/backups/backup_2025-12-28T21-37-16-598Z.db-wal differ diff --git a/backups/backup_2025-12-22T11-19-54-427Z.db b/backups/backup_2025-12-28T21-51-26-664Z.db similarity index 73% rename from backups/backup_2025-12-22T11-19-54-427Z.db rename to backups/backup_2025-12-28T21-51-26-664Z.db index eec6ffd..7bef75d 100644 Binary files a/backups/backup_2025-12-22T11-19-54-427Z.db and b/backups/backup_2025-12-28T21-51-26-664Z.db differ diff --git a/backups/backup_2025-12-28T21-51-26-664Z.db-wal b/backups/backup_2025-12-28T21-51-26-664Z.db-wal new file mode 100644 index 0000000..e69de29 diff --git a/data/taskmate.db b/data/taskmate.db index ecad564..7bef75d 100644 Binary files a/data/taskmate.db and b/data/taskmate.db differ diff --git a/data/taskmate.db-shm b/data/taskmate.db-shm index 91d5fb5..3f7f07e 100644 Binary files a/data/taskmate.db-shm and b/data/taskmate.db-shm differ diff --git a/data/taskmate.db-wal b/data/taskmate.db-wal index 65b1853..9ef4444 100644 Binary files a/data/taskmate.db-wal and b/data/taskmate.db-wal differ diff --git a/logs/app.log b/logs/app.log index 4c91974..99da4b6 100644 --- a/logs/app.log +++ b/logs/app.log @@ -29634,3 +29634,153 @@ [2025-12-28T21:36:42.131Z] [INFO] CSRF: Token missing or not stored for user 1, generated new token [2025-12-28T21:36:42.131Z] [INFO] POST /api/git/push/4 403 2ms [2025-12-28T21:36:42.154Z] [ERROR] Git-Befehl fehlgeschlagen: git remote get-url origin "Command failed: git remote get-url origin\nerror: No such remote 'origin'\n" +[2025-12-28T21:36:42.155Z] [INFO] POST /api/git/push/4 200 21ms +[2025-12-28T21:36:42.191Z] [ERROR] Git-Befehl fehlgeschlagen: git rev-parse HEAD "Command failed: git rev-parse HEAD\nfatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.\nUse '--' to separate paths from revisions, like this:\n'git [...] -- [...]'\n" +[2025-12-28T21:36:45.384Z] [INFO] Initialer Commit erstellt vor Push +[2025-12-28T21:36:45.419Z] [ERROR] Git-Befehl fehlgeschlagen: git push -u origin main "Command failed: git push -u origin main\nerror: src refspec main does not match any\nerror: failed to push some refs to 'origin'\n" +[2025-12-28T21:36:45.420Z] [INFO] POST /api/git/init-push/4 200 3262ms +[2025-12-28T21:36:49.229Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:37:16.604Z] [INFO] Backup erstellt: backup_2025-12-28T21-37-16-598Z.db +[2025-12-28T21:37:16.608Z] [INFO] Altes Backup gelöscht: backup_2025-12-22T11-19-54-427Z.db +[2025-12-28T21:37:16.608Z] [INFO] Fälligkeits-Check für Benachrichtigungen gestartet +[2025-12-28T21:37:21.607Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:37:34.018Z] [INFO] Socket disconnected: HG (tw6de05sUDpLUR8eAAAB) +[2025-12-28T21:37:53.959Z] [INFO] GET /api/health 200 1ms +[2025-12-28T21:38:26.370Z] [INFO] GET /api/health 200 1ms +[2025-12-28T21:38:58.803Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:50:21.986Z] [ERROR] Fehler beim Abrufen der Upload-Einstellungen: +[2025-12-28T21:50:22.016Z] [INFO] Datenbank-Tabellen erstellt +[2025-12-28T21:50:22.017Z] [INFO] Datenbank initialisiert +[2025-12-28T21:50:22.018Z] [INFO] Server läuft auf Port 3000 +[2025-12-28T21:50:22.018Z] [INFO] Umgebung: production +[2025-12-28T21:50:22.019Z] [INFO] Backup-Scheduler gestartet (alle 24 Stunden) +[2025-12-28T21:50:22.019Z] [INFO] Automatische Backups aktiviert +[2025-12-28T21:50:26.875Z] [INFO] GET /api/health 200 4ms +[2025-12-28T21:50:35.250Z] [INFO] GET / 304 1ms +[2025-12-28T21:50:35.272Z] [INFO] GET /css/variables.css 304 1ms +[2025-12-28T21:50:35.273Z] [INFO] GET /css/base.css 304 0ms +[2025-12-28T21:50:35.277Z] [INFO] GET /css/components.css 304 1ms +[2025-12-28T21:50:35.278Z] [INFO] GET /css/modal.css 304 2ms +[2025-12-28T21:50:35.279Z] [INFO] GET /css/board.css 304 3ms +[2025-12-28T21:50:35.279Z] [INFO] GET /css/notifications.css 304 1ms +[2025-12-28T21:50:35.287Z] [INFO] GET /css/admin.css 304 6ms +[2025-12-28T21:50:35.287Z] [INFO] GET /css/calendar.css 304 7ms +[2025-12-28T21:50:35.286Z] [INFO] GET /css/proposals.css 304 6ms +[2025-12-28T21:50:35.286Z] [INFO] GET /css/responsive.css 304 5ms +[2025-12-28T21:50:35.288Z] [INFO] GET /css/gitea.css 304 7ms +[2025-12-28T21:50:35.288Z] [INFO] GET /css/list.css 304 7ms +[2025-12-28T21:50:35.303Z] [INFO] GET /js/app.js 304 13ms +[2025-12-28T21:50:35.315Z] [INFO] GET /js/store.js 304 0ms +[2025-12-28T21:50:35.317Z] [INFO] GET /js/api.js 304 1ms +[2025-12-28T21:50:35.317Z] [INFO] GET /js/auth.js 304 1ms +[2025-12-28T21:50:35.318Z] [INFO] GET /js/sync.js 304 2ms +[2025-12-28T21:50:35.318Z] [INFO] GET /js/offline.js 304 2ms +[2025-12-28T21:50:35.325Z] [INFO] GET /js/task-modal.js 304 7ms +[2025-12-28T21:50:35.319Z] [INFO] GET /js/board.js 304 2ms +[2025-12-28T21:50:35.326Z] [INFO] GET /js/shortcuts.js 304 6ms +[2025-12-28T21:50:35.326Z] [INFO] GET /js/calendar.js 304 7ms +[2025-12-28T21:50:35.327Z] [INFO] GET /js/undo.js 304 7ms +[2025-12-28T21:50:35.327Z] [INFO] GET /js/list.js 304 8ms +[2025-12-28T21:50:35.327Z] [INFO] GET /js/admin.js 304 7ms +[2025-12-28T21:50:35.342Z] [INFO] GET /js/proposals.js 304 14ms +[2025-12-28T21:50:35.342Z] [INFO] GET /js/utils.js 304 14ms +[2025-12-28T21:50:35.341Z] [INFO] GET /js/notifications.js 304 13ms +[2025-12-28T21:50:35.342Z] [INFO] GET /js/gitea.js 304 14ms +[2025-12-28T21:50:35.366Z] [INFO] GET /assets/icons/task.svg 304 3ms +[2025-12-28T21:50:35.370Z] [INFO] GET /api/auth/users 401 5ms +[2025-12-28T21:50:36.982Z] [INFO] GET /sw.js 304 1ms +[2025-12-28T21:50:59.244Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:51:26.669Z] [INFO] Backup erstellt: backup_2025-12-28T21-51-26-664Z.db +[2025-12-28T21:51:26.675Z] [INFO] Altes Backup gelöscht: backup_2025-12-22T11-29-31-161Z.db +[2025-12-28T21:51:26.676Z] [INFO] Fälligkeits-Check für Benachrichtigungen gestartet +[2025-12-28T21:51:31.693Z] [INFO] GET /api/health 200 1ms +[2025-12-28T21:52:04.101Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:52:36.516Z] [INFO] GET /api/health 200 1ms +[2025-12-28T21:53:08.877Z] [INFO] GET /api/health 200 1ms +[2025-12-28T21:53:33.728Z] [INFO] Login erfolgreich: hendrik_gebhardt@gmx.de +[2025-12-28T21:53:33.729Z] [INFO] POST /api/auth/login 200 196ms +[2025-12-28T21:53:33.740Z] [INFO] GET /api/auth/users 304 2ms +[2025-12-28T21:53:33.751Z] [INFO] Socket connected: HG (cMUXMIseh8juylWkAAAC) +[2025-12-28T21:53:33.752Z] [INFO] Socket connected: HG (MYc7PfjjCaWlCyB-AAAD) +[2025-12-28T21:53:33.762Z] [INFO] HG joined project:[object Object] +[2025-12-28T21:53:33.758Z] [INFO] GET /api/projects 304 3ms +[2025-12-28T21:53:33.774Z] [INFO] GET /api/tasks/project/4 304 3ms +[2025-12-28T21:53:33.767Z] [INFO] GET /api/stats/dashboard?projectId=4 304 3ms +[2025-12-28T21:53:33.770Z] [INFO] GET /api/columns/4 304 6ms +[2025-12-28T21:53:33.769Z] [INFO] GET /api/labels/4 304 5ms +[2025-12-28T21:53:33.780Z] [INFO] GET /api/proposals?sort=date&archived=0&projectId=4 304 2ms +[2025-12-28T21:53:33.786Z] [INFO] GET /api/notifications 304 2ms +[2025-12-28T21:53:35.631Z] [INFO] GET /api/applications/4 304 3ms +[2025-12-28T21:53:35.937Z] [INFO] GET /api/git/branches/4 200 301ms +[2025-12-28T21:53:35.977Z] [INFO] GET /api/git/commits/4?limit=10 200 341ms +[2025-12-28T21:53:35.896Z] [INFO] GET /api/git/status/4 200 260ms +[2025-12-28T21:53:41.342Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:53:45.392Z] [INFO] POST /api/git/push/4 200 296ms +[2025-12-28T21:53:45.620Z] [INFO] GET /api/git/status/4 304 224ms +[2025-12-28T21:53:45.659Z] [INFO] GET /api/git/branches/4 304 38ms +[2025-12-28T21:53:45.699Z] [INFO] GET /api/git/commits/4?limit=10 304 78ms +[2025-12-28T21:54:13.750Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:54:21.923Z] [INFO] GET / 304 0ms +[2025-12-28T21:54:21.930Z] [INFO] Socket disconnected: HG (cMUXMIseh8juylWkAAAC) +[2025-12-28T21:54:21.931Z] [INFO] Socket disconnected: HG (MYc7PfjjCaWlCyB-AAAD) +[2025-12-28T21:54:21.945Z] [INFO] GET /css/admin.css 304 0ms +[2025-12-28T21:54:21.940Z] [INFO] GET /css/variables.css 304 1ms +[2025-12-28T21:54:21.944Z] [INFO] GET /css/components.css 304 1ms +[2025-12-28T21:54:21.944Z] [INFO] GET /css/base.css 304 1ms +[2025-12-28T21:54:21.946Z] [INFO] GET /css/board.css 304 1ms +[2025-12-28T21:54:21.950Z] [INFO] GET /css/calendar.css 304 3ms +[2025-12-28T21:54:21.949Z] [INFO] GET /css/notifications.css 304 3ms +[2025-12-28T21:54:21.949Z] [INFO] GET /css/proposals.css 304 3ms +[2025-12-28T21:54:21.949Z] [INFO] GET /css/modal.css 304 3ms +[2025-12-28T21:54:21.950Z] [INFO] GET /css/gitea.css 304 3ms +[2025-12-28T21:54:21.950Z] [INFO] GET /css/list.css 304 3ms +[2025-12-28T21:54:21.966Z] [INFO] GET /css/responsive.css 304 15ms +[2025-12-28T21:54:21.967Z] [INFO] GET /js/app.js 304 15ms +[2025-12-28T21:54:21.979Z] [INFO] GET /js/store.js 304 2ms +[2025-12-28T21:54:21.979Z] [INFO] GET /js/auth.js 304 2ms +[2025-12-28T21:54:21.980Z] [INFO] GET /js/offline.js 304 3ms +[2025-12-28T21:54:21.979Z] [INFO] GET /js/api.js 304 2ms +[2025-12-28T21:54:21.980Z] [INFO] GET /js/sync.js 304 2ms +[2025-12-28T21:54:21.987Z] [INFO] GET /js/calendar.js 304 6ms +[2025-12-28T21:54:21.987Z] [INFO] GET /js/shortcuts.js 304 6ms +[2025-12-28T21:54:21.980Z] [INFO] GET /js/board.js 304 2ms +[2025-12-28T21:54:21.987Z] [INFO] GET /js/list.js 304 6ms +[2025-12-28T21:54:21.988Z] [INFO] GET /js/task-modal.js 304 7ms +[2025-12-28T21:54:21.988Z] [INFO] GET /js/admin.js 304 7ms +[2025-12-28T21:54:21.988Z] [INFO] GET /js/undo.js 304 7ms +[2025-12-28T21:54:22.003Z] [INFO] GET /js/gitea.js 304 14ms +[2025-12-28T21:54:22.003Z] [INFO] GET /js/proposals.js 304 14ms +[2025-12-28T21:54:22.003Z] [INFO] GET /js/notifications.js 304 14ms +[2025-12-28T21:54:22.003Z] [INFO] GET /js/utils.js 304 13ms +[2025-12-28T21:54:22.022Z] [INFO] GET /assets/icons/task.svg 304 1ms +[2025-12-28T21:54:22.032Z] [INFO] GET /api/auth/users 304 2ms +[2025-12-28T21:54:22.024Z] [INFO] GET /api/auth/users 304 1ms +[2025-12-28T21:54:22.035Z] [INFO] Socket connected: HG (oYW9EIKPXtULSyWjAAAF) +[2025-12-28T21:54:22.042Z] [INFO] GET /api/projects 304 1ms +[2025-12-28T21:54:22.052Z] [INFO] GET /api/columns/4 304 4ms +[2025-12-28T21:54:22.054Z] [INFO] GET /api/tasks/project/4 304 6ms +[2025-12-28T21:54:22.051Z] [INFO] GET /api/stats/dashboard?projectId=4 304 3ms +[2025-12-28T21:54:22.056Z] [INFO] GET /api/labels/4 304 8ms +[2025-12-28T21:54:22.061Z] [INFO] GET /api/proposals?sort=date&archived=0&projectId=4 304 1ms +[2025-12-28T21:54:22.068Z] [INFO] GET /api/notifications 304 1ms +[2025-12-28T21:54:22.183Z] [INFO] HG joined project:[object Object] +[2025-12-28T21:54:23.500Z] [INFO] GET /sw.js 304 0ms +[2025-12-28T21:54:23.512Z] [INFO] GET /api/applications/4 200 2ms +[2025-12-28T21:54:23.755Z] [INFO] GET /api/git/status/4 304 238ms +[2025-12-28T21:54:23.798Z] [INFO] GET /api/git/branches/4 304 281ms +[2025-12-28T21:54:23.840Z] [INFO] GET /api/git/commits/4?limit=10 304 323ms +[2025-12-28T21:54:32.677Z] [INFO] POST /api/git/push/4 200 268ms +[2025-12-28T21:54:32.913Z] [INFO] GET /api/git/status/4 304 233ms +[2025-12-28T21:54:32.951Z] [INFO] GET /api/git/branches/4 304 38ms +[2025-12-28T21:54:32.991Z] [INFO] GET /api/git/commits/4?limit=10 304 39ms +[2025-12-28T21:54:46.136Z] [INFO] GET /api/health 200 1ms +[2025-12-28T21:55:18.512Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:55:50.892Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:56:23.283Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:56:55.658Z] [INFO] GET /api/health 200 1ms +[2025-12-28T21:57:28.128Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:58:00.512Z] [INFO] GET /api/health 200 0ms +[2025-12-28T21:58:32.884Z] [INFO] GET /api/health 200 1ms +[2025-12-28T21:59:05.278Z] [INFO] GET /api/health 200 1ms +[2025-12-28T21:59:37.716Z] [INFO] GET /api/health 200 1ms +[2025-12-28T22:00:10.092Z] [INFO] GET /api/health 200 0ms