forgegit 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -0
- package/config.cmd +15 -0
- package/init.cmd +193 -0
- package/lib/git-ops.cmd +69 -0
- package/lib/templates.cmd +79 -0
- package/lib/ui.cmd +63 -0
- package/package.json +35 -0
- package/templates/abrir.cmd.tpl +51 -0
- package/templates/auditar.cmd.tpl +340 -0
- package/templates/gitignore.tpl +78 -0
- package/templates/guardar.cmd.tpl +73 -0
- package/templates/historial.cmd.tpl +85 -0
- package/templates/readme.md.tpl +25 -0
- package/templates/snapshots.cmd.tpl +329 -0
- package/templates/subir.cmd.tpl +97 -0
- package/tests/test.cmd +155 -0
- package/tools/bin/forge-update.cmd +7 -0
- package/tools/bin/forge.cmd +141 -0
- package/tools/install.cmd +141 -0
- package/tools/pack.cmd +57 -0
- package/tools/release.cmd +53 -0
- package/tools/restore.cmd +71 -0
- package/tools/uninstall.cmd +54 -0
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal EnableDelayedExpansion
|
|
3
|
+
chcp 65001 >nul 2>nul
|
|
4
|
+
|
|
5
|
+
cd /d "%~dp0"
|
|
6
|
+
|
|
7
|
+
REM --- Detectar soporte ANSI (Windows 10+ / Windows Terminal) ---
|
|
8
|
+
set "ANSI=1"
|
|
9
|
+
for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
|
|
10
|
+
|
|
11
|
+
REM --- Fallback si no hay soporte ANSI ---
|
|
12
|
+
if "!ESC!"=="" set "ANSI=0"
|
|
13
|
+
|
|
14
|
+
if "!ANSI!"=="1" (
|
|
15
|
+
set "C_CYAN=!ESC![36m"
|
|
16
|
+
set "C_BCYAN=!ESC![96m"
|
|
17
|
+
set "C_GREEN=!ESC![32m"
|
|
18
|
+
set "C_YELLOW=!ESC![33m"
|
|
19
|
+
set "C_RED=!ESC![31m"
|
|
20
|
+
set "C_GRAY=!ESC![90m"
|
|
21
|
+
set "C_DIM=!ESC![2m"
|
|
22
|
+
set "C_WHITE=!ESC![97m"
|
|
23
|
+
set "C_RESET=!ESC![0m"
|
|
24
|
+
) else (
|
|
25
|
+
set "C_CYAN="
|
|
26
|
+
set "C_BCYAN="
|
|
27
|
+
set "C_GREEN="
|
|
28
|
+
set "C_YELLOW="
|
|
29
|
+
set "C_RED="
|
|
30
|
+
set "C_GRAY="
|
|
31
|
+
set "C_DIM="
|
|
32
|
+
set "C_WHITE="
|
|
33
|
+
set "C_RESET="
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
REM --- Help flag ---
|
|
37
|
+
if /i "%~1"=="--help" goto :help
|
|
38
|
+
if /i "%~1"=="-h" goto :help
|
|
39
|
+
if /i "%~1"=="help" goto :help
|
|
40
|
+
|
|
41
|
+
if not exist ".git" (
|
|
42
|
+
echo !C_RED![X]!C_RESET! No hay repositorio Git. Ejecuta: init.cmd
|
|
43
|
+
exit /b 1
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
REM --- Banner ---
|
|
47
|
+
echo.
|
|
48
|
+
echo !C_CYAN!============================================!C_RESET!
|
|
49
|
+
echo !C_BCYAN! AUDITAR!C_RESET! !C_GRAY!- Reportes de cambios!C_RESET!
|
|
50
|
+
echo !C_CYAN!============================================!C_RESET!
|
|
51
|
+
echo.
|
|
52
|
+
echo !C_GRAY!Genera un .txt con los cambios entre dos puntos del!C_RESET!
|
|
53
|
+
echo !C_GRAY!historial. Ideal para auditar con IA o revisar un rango.!C_RESET!
|
|
54
|
+
echo.
|
|
55
|
+
|
|
56
|
+
REM --- 1. Estado actual ---
|
|
57
|
+
for /f "tokens=*" %%b in ('git branch --show-current 2^>nul') do set "BRANCH=%%b"
|
|
58
|
+
|
|
59
|
+
echo !C_CYAN!●!C_RESET! !C_GRAY!Branch:!C_RESET! !C_WHITE!!BRANCH!!C_RESET!
|
|
60
|
+
|
|
61
|
+
git add -A >nul 2>nul
|
|
62
|
+
git diff --cached --quiet
|
|
63
|
+
if errorlevel 1 (
|
|
64
|
+
set "NCH=0"
|
|
65
|
+
for /f %%c in ('git diff --cached --name-only ^| find /c /v ""') do set "NCH=%%c"
|
|
66
|
+
echo !C_CYAN!●!C_RESET! !C_GRAY!Cambios:!C_RESET! !C_YELLOW!!NCH! archivos sin commitear!C_RESET!
|
|
67
|
+
) else (
|
|
68
|
+
echo !C_CYAN!●!C_RESET! !C_GRAY!Cambios:!C_RESET! !C_GREEN!limpio!C_RESET!
|
|
69
|
+
)
|
|
70
|
+
echo.
|
|
71
|
+
|
|
72
|
+
REM --- 2. Cuantos commits listar ---
|
|
73
|
+
set "LIMIT=10"
|
|
74
|
+
set "INPUT="
|
|
75
|
+
set /p "INPUT= !C_BCYAN!Cuantos commits listar?!C_RESET! !C_GRAY![10 por defecto, T=todos]!C_RESET!: "
|
|
76
|
+
if /i "!INPUT!"=="T" (
|
|
77
|
+
set "LIMIT=9999"
|
|
78
|
+
) else if not "!INPUT!"=="" (
|
|
79
|
+
set "LIMIT=!INPUT!"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
REM --- 3. Log a temp ---
|
|
83
|
+
set "TMPLOG=%TEMP%\forge_git_log.txt"
|
|
84
|
+
git log -n !LIMIT! --date=format:"%%Y-%%m-%%d %%H:%%M:%%S" --pretty=format:"%%h %%ad %%s" > "!TMPLOG!" 2>nul
|
|
85
|
+
|
|
86
|
+
REM --- 4. Tabla con separadores ---
|
|
87
|
+
echo.
|
|
88
|
+
echo !C_CYAN!-------------------------------------------------------------!C_RESET!
|
|
89
|
+
echo !C_BCYAN! HISTORIAL!C_RESET!
|
|
90
|
+
echo !C_CYAN!-------------------------------------------------------------!C_RESET!
|
|
91
|
+
echo !C_GRAY! IDX FECHA HASH MENSAJE!C_RESET!
|
|
92
|
+
echo !C_CYAN!-------------------------------------------------------------!C_RESET!
|
|
93
|
+
|
|
94
|
+
set "IDX=0"
|
|
95
|
+
set "FIRST=1"
|
|
96
|
+
for /f "delims=" %%L in ('type "!TMPLOG!"') do (
|
|
97
|
+
if "!FIRST!"=="0" (
|
|
98
|
+
echo !C_DIM!!C_GRAY! . . . . . . . . . . . . . . . . . . .!C_RESET!
|
|
99
|
+
)
|
|
100
|
+
set "LINE=%%L"
|
|
101
|
+
set "HASH=!LINE:~0,7!"
|
|
102
|
+
set "DATETIME=!LINE:~8,19!"
|
|
103
|
+
set "MSG=!LINE:~28!"
|
|
104
|
+
set "H_!IDX!=!HASH!"
|
|
105
|
+
echo !C_BCYAN![!IDX!]!C_RESET! !C_GRAY!!DATETIME!!C_RESET! !C_YELLOW!!HASH!!C_RESET! !C_WHITE!!MSG!!C_RESET!
|
|
106
|
+
set /a IDX=IDX+1
|
|
107
|
+
set "FIRST=0"
|
|
108
|
+
)
|
|
109
|
+
del "!TMPLOG!" >nul 2>nul
|
|
110
|
+
|
|
111
|
+
if !IDX! EQU 0 (
|
|
112
|
+
echo !C_RED![X]!C_RESET! No hay commits.
|
|
113
|
+
goto :end
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
echo !C_CYAN!-------------------------------------------------------------!C_RESET!
|
|
117
|
+
echo !C_GRAY!Total: !IDX! commits ^(0 = mas reciente^)!C_RESET!
|
|
118
|
+
echo.
|
|
119
|
+
|
|
120
|
+
REM --- 5. Modos de uso (ordenados por frecuencia) ---
|
|
121
|
+
echo !C_CYAN!-------------------------------------------------------------!C_RESET!
|
|
122
|
+
echo !C_BCYAN! MODOS DE USO!C_RESET!
|
|
123
|
+
echo !C_CYAN!-------------------------------------------------------------!C_RESET!
|
|
124
|
+
echo !C_YELLOW!0,W!C_RESET! !C_GRAY!Comparar ultimo commit vs estado actual!C_RESET! !C_GREEN![recomendado]!C_RESET!
|
|
125
|
+
echo !C_YELLOW!0,3!C_RESET! !C_GRAY!Comparar commit [0] vs commit [3]!C_RESET!
|
|
126
|
+
echo !C_YELLOW!0-3!C_RESET! !C_GRAY!Alias de 0,3!C_RESET!
|
|
127
|
+
echo !C_YELLOW![Enter]!C_RESET! !C_GRAY!Solo ver historial (sin reporte)!C_RESET!
|
|
128
|
+
echo !C_CYAN!-------------------------------------------------------------!C_RESET!
|
|
129
|
+
echo.
|
|
130
|
+
|
|
131
|
+
REM --- 6. Pedir rango ---
|
|
132
|
+
set "RANGE="
|
|
133
|
+
set /p "RANGE= !C_BCYAN!Rango a auditar:!C_RESET! !C_GRAY![Enter=0,W]!C_RESET!: "
|
|
134
|
+
if "!RANGE!"=="" (
|
|
135
|
+
set "RANGE=0,W"
|
|
136
|
+
echo !C_GRAY!Usando default: 0,W!C_RESET!
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
set "A="
|
|
140
|
+
set "B="
|
|
141
|
+
for /f "tokens=1,2 delims=,-" %%a in ("!RANGE!") do (
|
|
142
|
+
set "A=%%a"
|
|
143
|
+
if not "%%b"=="" set "B=%%b"
|
|
144
|
+
)
|
|
145
|
+
if "!A!"=="" (
|
|
146
|
+
echo !C_RED![X]!C_RESET! Rango invalido.
|
|
147
|
+
goto :end
|
|
148
|
+
)
|
|
149
|
+
if "!B!"=="" set "B=!A!"
|
|
150
|
+
|
|
151
|
+
if /i "!A!"=="W" (
|
|
152
|
+
echo !C_RED![X]!C_RESET! El primer valor debe ser indice numerico. Formato: !C_YELLOW!5,W!C_RESET!
|
|
153
|
+
goto :end
|
|
154
|
+
)
|
|
155
|
+
if /i "!A!"=="WORK" (
|
|
156
|
+
echo !C_RED![X]!C_RESET! El primer valor debe ser indice numerico. Formato: !C_YELLOW!5,W!C_RESET!
|
|
157
|
+
goto :end
|
|
158
|
+
)
|
|
159
|
+
if /i "!A!"=="HEAD" (
|
|
160
|
+
echo !C_RED![X]!C_RESET! El primer valor debe ser indice numerico. Formato: !C_YELLOW!5,W!C_RESET!
|
|
161
|
+
goto :end
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
set "HA=!H_%A%!"
|
|
165
|
+
if "!HA!"=="" (
|
|
166
|
+
echo !C_RED![X]!C_RESET! Indice !A! no existe.
|
|
167
|
+
goto :end
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
set "H_NEW="
|
|
171
|
+
set "H_OLD=!HA!"
|
|
172
|
+
set "IS_WORK=0"
|
|
173
|
+
|
|
174
|
+
if /i "!B!"=="W" set "IS_WORK=1"
|
|
175
|
+
if /i "!B!"=="WORK" set "IS_WORK=1"
|
|
176
|
+
if /i "!B!"=="HEAD" set "IS_WORK=1"
|
|
177
|
+
|
|
178
|
+
if "!IS_WORK!"=="1" (
|
|
179
|
+
set "H_OLD=!HA!"
|
|
180
|
+
set "H_NEW="
|
|
181
|
+
set "OLD_IDX=!A!"
|
|
182
|
+
set "NEW_IDX=WORK"
|
|
183
|
+
set "NEW_LABEL=working tree"
|
|
184
|
+
) else (
|
|
185
|
+
set "HB=!H_%B%!"
|
|
186
|
+
if "!HB!"=="" (
|
|
187
|
+
echo !C_RED![X]!C_RESET! Indice !B! no existe.
|
|
188
|
+
goto :end
|
|
189
|
+
)
|
|
190
|
+
set "OLD_IDX=!A!"
|
|
191
|
+
set "NEW_IDX=!B!"
|
|
192
|
+
if !A! LSS !B! (
|
|
193
|
+
set "OLD_IDX=!B!"
|
|
194
|
+
set "NEW_IDX=!A!"
|
|
195
|
+
)
|
|
196
|
+
set "H_OLD=!H_%OLD_IDX%!"
|
|
197
|
+
set "H_NEW=!H_%NEW_IDX%!"
|
|
198
|
+
set "NEW_LABEL=!H_NEW!"
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
echo.
|
|
202
|
+
echo !C_CYAN!●!C_RESET! !C_GRAY!Comparando:!C_RESET!
|
|
203
|
+
echo !C_GRAY![antiguo]!C_RESET! !C_YELLOW!!H_OLD!!C_RESET! !C_GRAY!^(idx !OLD_IDX!^)!C_RESET!
|
|
204
|
+
if "!IS_WORK!"=="1" (
|
|
205
|
+
echo !C_GRAY![reciente]!C_RESET! !C_GREEN!working tree!C_RESET!
|
|
206
|
+
) else (
|
|
207
|
+
echo !C_GRAY![reciente]!C_RESET! !C_YELLOW!!H_NEW!!C_RESET! !C_GRAY!^(idx !NEW_IDX!^)!C_RESET!
|
|
208
|
+
)
|
|
209
|
+
echo.
|
|
210
|
+
|
|
211
|
+
REM --- 7. Crear audits/ ---
|
|
212
|
+
if not exist "audits" mkdir "audits"
|
|
213
|
+
|
|
214
|
+
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd_HHmmss"') do set "TS=%%i"
|
|
215
|
+
|
|
216
|
+
if "!IS_WORK!"=="1" (
|
|
217
|
+
set "REPORT=audits\audit_!TS!_!OLD_IDX!-WORK.txt"
|
|
218
|
+
) else (
|
|
219
|
+
set "REPORT=audits\audit_!TS!_!OLD_IDX!-!NEW_IDX!.txt"
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
REM --- 8. Escribir reporte (SIN colores) ---
|
|
223
|
+
(
|
|
224
|
+
echo # Reporte de auditoria
|
|
225
|
+
echo.
|
|
226
|
+
echo # Generado: %DATE% %TIME%
|
|
227
|
+
echo # Proyecto: %CD%
|
|
228
|
+
echo # Rango: !H_OLD! -^> !NEW_LABEL!
|
|
229
|
+
echo.
|
|
230
|
+
if "!IS_WORK!"=="1" (
|
|
231
|
+
echo # Comparar: git diff !H_OLD!
|
|
232
|
+
) else (
|
|
233
|
+
echo # Comparar: git diff !H_OLD! !H_NEW!
|
|
234
|
+
)
|
|
235
|
+
echo.
|
|
236
|
+
echo # ============================================================
|
|
237
|
+
echo # COMMITS EN EL RANGO
|
|
238
|
+
echo # ============================================================
|
|
239
|
+
echo.
|
|
240
|
+
if "!IS_WORK!"=="1" (
|
|
241
|
+
git log !H_OLD!..HEAD --date=format:"%%Y-%%m-%%d %%H:%%M:%%S" --pretty=format:" %%ad %%h %%s"
|
|
242
|
+
) else (
|
|
243
|
+
git log !H_OLD!^..!H_NEW! --date=format:"%%Y-%%m-%%d %%H:%%M:%%S" --pretty=format:" %%ad %%h %%s"
|
|
244
|
+
)
|
|
245
|
+
echo.
|
|
246
|
+
echo.
|
|
247
|
+
echo # ============================================================
|
|
248
|
+
echo # DIFF COMPLETO
|
|
249
|
+
echo # ============================================================
|
|
250
|
+
echo.
|
|
251
|
+
if "!IS_WORK!"=="1" (
|
|
252
|
+
git diff !H_OLD!
|
|
253
|
+
) else (
|
|
254
|
+
git diff !H_OLD! !H_NEW!
|
|
255
|
+
)
|
|
256
|
+
echo.
|
|
257
|
+
echo.
|
|
258
|
+
echo # ============================================================
|
|
259
|
+
echo # ESTADO ACTUAL (sin commitear)
|
|
260
|
+
echo # ============================================================
|
|
261
|
+
echo.
|
|
262
|
+
git status --short
|
|
263
|
+
) > "!REPORT!" 2>&1
|
|
264
|
+
|
|
265
|
+
REM --- 9. Resumen ---
|
|
266
|
+
echo !C_GREEN![OK]!C_RESET! Reporte generado
|
|
267
|
+
echo.
|
|
268
|
+
for %%f in ("!REPORT!") do set "SIZE=%%~zf"
|
|
269
|
+
for /f %%l in ('find /c /v "" ^< "!REPORT!"') do set "LINES=%%l"
|
|
270
|
+
|
|
271
|
+
echo !C_GRAY!Archivo:!C_RESET! !C_WHITE!!REPORT!!C_RESET!
|
|
272
|
+
echo !C_GRAY!Tamano:!C_RESET! !C_WHITE!!SIZE! bytes!C_RESET!
|
|
273
|
+
echo !C_GRAY!Lineas:!C_RESET! !C_WHITE!!LINES!!C_RESET!
|
|
274
|
+
echo.
|
|
275
|
+
|
|
276
|
+
REM --- 10. Abrir ---
|
|
277
|
+
where code >nul 2>nul
|
|
278
|
+
if not errorlevel 1 (
|
|
279
|
+
set "OPEN="
|
|
280
|
+
set /p "OPEN= !C_BCYAN!Abrir en VS Code?!C_RESET! !C_GRAY![S/n]!C_RESET!: "
|
|
281
|
+
if /i not "!OPEN!"=="n" (
|
|
282
|
+
echo !C_GRAY!Abriendo...!C_RESET!
|
|
283
|
+
code "!REPORT!"
|
|
284
|
+
)
|
|
285
|
+
) else (
|
|
286
|
+
echo !C_GRAY![INFO] VS Code CLI no disponible.!C_RESET!
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
echo.
|
|
290
|
+
goto :end
|
|
291
|
+
|
|
292
|
+
REM ============================================================
|
|
293
|
+
REM :help
|
|
294
|
+
REM ============================================================
|
|
295
|
+
:help
|
|
296
|
+
echo.
|
|
297
|
+
echo !C_CYAN!============================================!C_RESET!
|
|
298
|
+
echo !C_BCYAN! AUDITAR!C_RESET! !C_GRAY!- Ayuda!C_RESET!
|
|
299
|
+
echo !C_CYAN!============================================!C_RESET!
|
|
300
|
+
echo.
|
|
301
|
+
echo !C_BCYAN!USO:!C_RESET!
|
|
302
|
+
echo !C_WHITE!auditar.cmd!C_RESET! Modo interactivo
|
|
303
|
+
echo !C_WHITE!auditar.cmd --help!C_RESET! Esta ayuda
|
|
304
|
+
echo.
|
|
305
|
+
echo !C_BCYAN!QUE HACE:!C_RESET!
|
|
306
|
+
echo !C_GRAY!Genera un reporte .txt en audits/ con los cambios!C_RESET!
|
|
307
|
+
echo !C_GRAY!entre dos puntos del historial Git.!C_RESET!
|
|
308
|
+
echo.
|
|
309
|
+
echo !C_BCYAN!MODOS:!C_RESET!
|
|
310
|
+
echo !C_YELLOW!0,W!C_RESET! !C_GRAY!Comparar ultimo commit vs estado actual!C_RESET! !C_GREEN![recomendado]!C_RESET!
|
|
311
|
+
echo !C_YELLOW!0,3!C_RESET! !C_GRAY!Comparar commit 0 vs commit 3!C_RESET!
|
|
312
|
+
echo !C_YELLOW!0-3!C_RESET! !C_GRAY!Alias de 0,3!C_RESET!
|
|
313
|
+
echo !C_YELLOW![Enter]!C_RESET! !C_GRAY!Solo ver historial!C_RESET!
|
|
314
|
+
echo.
|
|
315
|
+
echo !C_BCYAN!EJEMPLOS:!C_RESET!
|
|
316
|
+
echo !C_WHITE!auditar.cmd!C_RESET!
|
|
317
|
+
echo !C_GRAY!Cuantos commits? 10!C_RESET!
|
|
318
|
+
echo !C_GRAY!Rango: 0,W!C_RESET!
|
|
319
|
+
echo !C_GRAY!-> audits\audit_2026-09-12_163200_0-WORK.txt!C_RESET!
|
|
320
|
+
echo.
|
|
321
|
+
echo !C_BCYAN!SALIDA:!C_RESET!
|
|
322
|
+
echo !C_GRAY!Los reportes se guardan en audits\!C_RESET!
|
|
323
|
+
echo !C_GRAY!(excluida del repo por .gitignore^)!C_RESET!
|
|
324
|
+
echo.
|
|
325
|
+
goto :end
|
|
326
|
+
|
|
327
|
+
:end
|
|
328
|
+
call :shell_if_double_click
|
|
329
|
+
endlocal
|
|
330
|
+
exit /b 0
|
|
331
|
+
|
|
332
|
+
:shell_if_double_click
|
|
333
|
+
if "%NO_PAUSE%"=="1" goto :eof
|
|
334
|
+
echo %cmdcmdline% | find /i "%~nx0" >nul
|
|
335
|
+
if errorlevel 1 goto :eof
|
|
336
|
+
echo.
|
|
337
|
+
echo Sesion interactiva. Escribe 'exit' para cerrar.
|
|
338
|
+
echo.
|
|
339
|
+
cmd /k
|
|
340
|
+
goto :eof
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# ==== Sistema operativo ====
|
|
2
|
+
Thumbs.db
|
|
3
|
+
ehthumbs.db
|
|
4
|
+
Desktop.ini
|
|
5
|
+
$RECYCLE.BIN/
|
|
6
|
+
*.lnk
|
|
7
|
+
.DS_Store
|
|
8
|
+
|
|
9
|
+
# ==== Editor / IDE ====
|
|
10
|
+
.vscode/
|
|
11
|
+
.idea/
|
|
12
|
+
*.swp
|
|
13
|
+
*.swo
|
|
14
|
+
*~
|
|
15
|
+
|
|
16
|
+
# ==== Node.js ====
|
|
17
|
+
node_modules/
|
|
18
|
+
npm-debug.log*
|
|
19
|
+
yarn-debug.log*
|
|
20
|
+
yarn-error.log*
|
|
21
|
+
pnpm-debug.log*
|
|
22
|
+
package-lock.json
|
|
23
|
+
yarn.lock
|
|
24
|
+
pnpm-lock.yaml
|
|
25
|
+
|
|
26
|
+
# ==== Python ====
|
|
27
|
+
__pycache__/
|
|
28
|
+
*.py[cod]
|
|
29
|
+
.Python
|
|
30
|
+
venv/
|
|
31
|
+
.venv/
|
|
32
|
+
env/
|
|
33
|
+
.env
|
|
34
|
+
|
|
35
|
+
# ==== Rust ====
|
|
36
|
+
target/
|
|
37
|
+
Cargo.lock
|
|
38
|
+
|
|
39
|
+
# ==== Go ====
|
|
40
|
+
*.test
|
|
41
|
+
*.out
|
|
42
|
+
|
|
43
|
+
# ==== Build / dist ====
|
|
44
|
+
dist/
|
|
45
|
+
build/
|
|
46
|
+
out/
|
|
47
|
+
.cache/
|
|
48
|
+
.parcel-cache/
|
|
49
|
+
.vite/
|
|
50
|
+
|
|
51
|
+
# ==== Modelos / cache IA ====
|
|
52
|
+
*.onnx
|
|
53
|
+
*.bin
|
|
54
|
+
*.wasm
|
|
55
|
+
*.pb
|
|
56
|
+
models/
|
|
57
|
+
cache/
|
|
58
|
+
.huggingface/
|
|
59
|
+
|
|
60
|
+
# ==== Backups manuales ====
|
|
61
|
+
versiones/
|
|
62
|
+
old_versions/
|
|
63
|
+
backup/
|
|
64
|
+
backups/
|
|
65
|
+
|
|
66
|
+
# ==== Reportes de auditoria ====
|
|
67
|
+
audits/
|
|
68
|
+
|
|
69
|
+
# ==== Temporales ====
|
|
70
|
+
*.log
|
|
71
|
+
*.tmp
|
|
72
|
+
*.bak
|
|
73
|
+
*.orig
|
|
74
|
+
|
|
75
|
+
# ==== Capturas ====
|
|
76
|
+
screenshots/
|
|
77
|
+
capturas/
|
|
78
|
+
test-output/
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal EnableDelayedExpansion
|
|
3
|
+
chcp 65001 >nul 2>nul
|
|
4
|
+
|
|
5
|
+
cd /d "%~dp0"
|
|
6
|
+
|
|
7
|
+
for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
|
|
8
|
+
if "!ESC!"=="" (
|
|
9
|
+
set "C_CY=" & set "C_BC=" & set "C_GR=" & set "C_YE="
|
|
10
|
+
set "C_RE=" & set "C_GY=" & set "C_WH=" & set "C_RS="
|
|
11
|
+
) else (
|
|
12
|
+
set "C_CY=!ESC![36m" & set "C_BC=!ESC![96m"
|
|
13
|
+
set "C_GR=!ESC![32m" & set "C_YE=!ESC![33m"
|
|
14
|
+
set "C_RE=!ESC![31m" & set "C_GY=!ESC![90m"
|
|
15
|
+
set "C_WH=!ESC![97m" & set "C_RS=!ESC![0m"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
if not exist ".git" (
|
|
19
|
+
echo !C_RE![X]!C_RS! No hay repositorio Git. Ejecuta: !C_WH!init.cmd!C_RS!
|
|
20
|
+
exit /b 1
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
git add -A >nul 2>nul
|
|
24
|
+
git diff --cached --quiet
|
|
25
|
+
if not errorlevel 1 (
|
|
26
|
+
echo !C_GY!Sin cambios para guardar.!C_RS!
|
|
27
|
+
exit /b 0
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
echo.
|
|
31
|
+
echo !C_CY!------------------------------------------------------------!C_RS!
|
|
32
|
+
echo !C_BC! GUARDAR!C_RS! !C_GY!- Commit local!C_RS!
|
|
33
|
+
echo !C_CY!------------------------------------------------------------!C_RS!
|
|
34
|
+
echo.
|
|
35
|
+
echo !C_GY!Archivos a guardar:!C_RS!
|
|
36
|
+
git diff --cached --name-only | findstr /n "^"
|
|
37
|
+
echo.
|
|
38
|
+
echo !C_GY!Evita usar: " # : + / , en el mensaje!C_RS!
|
|
39
|
+
echo.
|
|
40
|
+
echo !C_BC!Mensaje del commit!C_RS! !C_GY![Enter = Sin definir]!C_RS!
|
|
41
|
+
set "MSG="
|
|
42
|
+
set /p MSG=
|
|
43
|
+
if "!MSG!"=="" set "MSG=Sin definir"
|
|
44
|
+
|
|
45
|
+
git commit -q -m "!MSG!"
|
|
46
|
+
if errorlevel 1 (
|
|
47
|
+
echo.
|
|
48
|
+
echo !C_RE![X]!C_RS! Commit fallo. Revisa el mensaje.
|
|
49
|
+
exit /b 1
|
|
50
|
+
)
|
|
51
|
+
echo.
|
|
52
|
+
echo !C_GR![OK]!C_RS! Commit: !C_WH!!MSG!!C_RS!
|
|
53
|
+
echo.
|
|
54
|
+
|
|
55
|
+
if "%SKIP_HISTORIAL%"=="1" goto :skip_hist
|
|
56
|
+
set "NO_PAUSE=1"
|
|
57
|
+
call "%~dp0historial.cmd"
|
|
58
|
+
set "NO_PAUSE="
|
|
59
|
+
:skip_hist
|
|
60
|
+
|
|
61
|
+
call :shell_if_double_click
|
|
62
|
+
endlocal
|
|
63
|
+
exit /b 0
|
|
64
|
+
|
|
65
|
+
:shell_if_double_click
|
|
66
|
+
if "%NO_PAUSE%"=="1" goto :eof
|
|
67
|
+
echo %cmdcmdline% | find /i "%~nx0" >nul
|
|
68
|
+
if errorlevel 1 goto :eof
|
|
69
|
+
echo.
|
|
70
|
+
echo !C_GY!Sesion interactiva. Escribe 'exit' para cerrar.!C_RS!
|
|
71
|
+
echo.
|
|
72
|
+
cmd /k
|
|
73
|
+
goto :eof
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal EnableDelayedExpansion
|
|
3
|
+
chcp 65001 >nul 2>nul
|
|
4
|
+
|
|
5
|
+
cd /d "%~dp0"
|
|
6
|
+
|
|
7
|
+
REM --- Colores ANSI ---
|
|
8
|
+
for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
|
|
9
|
+
if "!ESC!"=="" (
|
|
10
|
+
set "C_CY=" & set "C_BC=" & set "C_GR=" & set "C_YE="
|
|
11
|
+
set "C_RE=" & set "C_GY=" & set "C_WH=" & set "C_RS="
|
|
12
|
+
) else (
|
|
13
|
+
set "C_CY=!ESC![36m" & set "C_BC=!ESC![96m"
|
|
14
|
+
set "C_GR=!ESC![32m" & set "C_YE=!ESC![33m"
|
|
15
|
+
set "C_RE=!ESC![31m" & set "C_GY=!ESC![90m"
|
|
16
|
+
set "C_WH=!ESC![97m" & set "C_RS=!ESC![0m"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
echo.
|
|
20
|
+
echo !C_CY!============================================!C_RS!
|
|
21
|
+
echo !C_BC! HISTORIAL!C_RS! !C_GY!- Vista rapida del proyecto!C_RS!
|
|
22
|
+
echo !C_CY!============================================!C_RS!
|
|
23
|
+
echo.
|
|
24
|
+
|
|
25
|
+
REM --- COMMITS ---
|
|
26
|
+
if not exist ".git" (
|
|
27
|
+
echo !C_RE![X]!C_RS! Sin repositorio Git.
|
|
28
|
+
goto :tags
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
echo !C_CY!-------------------------------------------------------------!C_RS!
|
|
32
|
+
echo !C_BC! ULTIMOS 20 COMMITS!C_RS!
|
|
33
|
+
echo !C_CY!-------------------------------------------------------------!C_RS!
|
|
34
|
+
echo !C_GY! IDX FECHA HASH MENSAJE!C_RS!
|
|
35
|
+
echo !C_CY!-------------------------------------------------------------!C_RS!
|
|
36
|
+
|
|
37
|
+
git log -n 20 --date=format:"%%Y-%%m-%%d %%H:%%M:%%S" --pretty=format:"%%h %%ad %%s" > "%TEMP%\fgh_log.txt" 2>nul
|
|
38
|
+
|
|
39
|
+
set "IDX=0"
|
|
40
|
+
for /f "delims=" %%L in ('type "%TEMP%\fgh_log.txt"') do (
|
|
41
|
+
set "LINE=%%L"
|
|
42
|
+
set "HASH=!LINE:~0,7!"
|
|
43
|
+
set "DT=!LINE:~8,19!"
|
|
44
|
+
set "MSG=!LINE:~28!"
|
|
45
|
+
echo !C_YE![!IDX!]!C_RS! !C_GY!!DT!!C_RS! !C_YE!!HASH!!C_RS! !C_WH!!MSG!!C_RS!
|
|
46
|
+
set /a IDX+=1
|
|
47
|
+
)
|
|
48
|
+
del "%TEMP%\fgh_log.txt" >nul 2>nul
|
|
49
|
+
echo !C_CY!-------------------------------------------------------------!C_RS!
|
|
50
|
+
echo.
|
|
51
|
+
|
|
52
|
+
:tags
|
|
53
|
+
echo !C_CY!-------------------------------------------------------------!C_RS!
|
|
54
|
+
echo !C_BC! TAGS!C_RS!
|
|
55
|
+
echo !C_CY!-------------------------------------------------------------!C_RS!
|
|
56
|
+
if exist ".git" git tag -l
|
|
57
|
+
echo.
|
|
58
|
+
|
|
59
|
+
echo !C_CY!-------------------------------------------------------------!C_RS!
|
|
60
|
+
echo !C_BC! SNAPSHOTS!C_RS!
|
|
61
|
+
echo !C_CY!-------------------------------------------------------------!C_RS!
|
|
62
|
+
if exist "versiones" goto :show_snaps
|
|
63
|
+
echo !C_GY!sin snapshots!C_RS!
|
|
64
|
+
goto :end_snaps
|
|
65
|
+
|
|
66
|
+
:show_snaps
|
|
67
|
+
dir /b /o-n "versiones" 2>nul
|
|
68
|
+
|
|
69
|
+
:end_snaps
|
|
70
|
+
echo !C_CY!-------------------------------------------------------------!C_RS!
|
|
71
|
+
echo.
|
|
72
|
+
|
|
73
|
+
call :shell_if_double_click
|
|
74
|
+
endlocal
|
|
75
|
+
exit /b 0
|
|
76
|
+
|
|
77
|
+
:shell_if_double_click
|
|
78
|
+
if "%NO_PAUSE%"=="1" goto :eof
|
|
79
|
+
echo %cmdcmdline% | find /i "%~nx0" >nul
|
|
80
|
+
if errorlevel 1 goto :eof
|
|
81
|
+
echo.
|
|
82
|
+
echo !C_GY!Sesion interactiva. Escribe 'exit' para cerrar.!C_RS!
|
|
83
|
+
echo.
|
|
84
|
+
cmd /k
|
|
85
|
+
goto :eof
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
Proyecto inicializado con `init.cmd`.
|
|
4
|
+
|
|
5
|
+
## Comandos
|
|
6
|
+
|
|
7
|
+
### Esenciales
|
|
8
|
+
- `init.cmd` — Bootstrap (una vez por proyecto)
|
|
9
|
+
- `abrir.cmd` — Abrir en VS Code
|
|
10
|
+
|
|
11
|
+
### Trabajo diario
|
|
12
|
+
- `guardar.cmd` — Commit de cambios
|
|
13
|
+
- `subir.cmd` — Push a GitHub
|
|
14
|
+
- `historial.cmd` — Ver commits recientes
|
|
15
|
+
|
|
16
|
+
### Ocasionales
|
|
17
|
+
- `snapshots.cmd` — Crear/restaurar copias
|
|
18
|
+
- `auditar.cmd` — Generar reporte diff
|
|
19
|
+
|
|
20
|
+
### Internos (no ejecutar)
|
|
21
|
+
- `config.cmd`, `lib/`, `templates/`
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
Generado por forge-git v{{FG_VERSION}}
|