skill-family-engineering-kit 0.1.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.
Files changed (80) hide show
  1. package/CODE_OF_CONDUCT.md +131 -0
  2. package/CONTRIBUTING.md +69 -0
  3. package/LICENSE +201 -0
  4. package/README.md +74 -0
  5. package/SECURITY.md +34 -0
  6. package/data/licensing/registry.json +211 -0
  7. package/data/licensing/schema.json +207 -0
  8. package/docs/.nojekyll +0 -0
  9. package/docs/404.html +613 -0
  10. package/docs/architecture/index.html +904 -0
  11. package/docs/assets/images/favicon.png +0 -0
  12. package/docs/assets/javascripts/bundle.d7400e89.min.js +16 -0
  13. package/docs/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
  14. package/docs/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
  15. package/docs/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
  16. package/docs/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
  17. package/docs/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
  18. package/docs/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
  19. package/docs/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
  20. package/docs/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
  21. package/docs/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
  22. package/docs/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
  23. package/docs/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
  24. package/docs/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
  25. package/docs/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
  26. package/docs/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
  27. package/docs/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
  28. package/docs/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
  29. package/docs/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
  30. package/docs/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
  31. package/docs/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
  32. package/docs/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
  33. package/docs/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
  34. package/docs/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
  35. package/docs/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
  36. package/docs/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
  37. package/docs/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
  38. package/docs/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
  39. package/docs/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
  40. package/docs/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
  41. package/docs/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
  42. package/docs/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
  43. package/docs/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
  44. package/docs/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
  45. package/docs/assets/javascripts/lunr/tinyseg.js +206 -0
  46. package/docs/assets/javascripts/lunr/wordcut.js +6708 -0
  47. package/docs/assets/javascripts/workers/search.2c215733.min.js +42 -0
  48. package/docs/assets/stylesheets/main.ec1eaa64.min.css +1 -0
  49. package/docs/assets/stylesheets/palette.ab4e12ef.min.css +1 -0
  50. package/docs/git-lifecycle/index.html +976 -0
  51. package/docs/help/index.html +907 -0
  52. package/docs/index.html +837 -0
  53. package/docs/integration/audit/baseline/audit-codes.json +62 -0
  54. package/docs/integration/audit/failure-evidence/index.html +872 -0
  55. package/docs/integration/audit/independence/index.html +841 -0
  56. package/docs/integration/audit/index.html +826 -0
  57. package/docs/integration/audit/mutation-taxonomy/index.html +1022 -0
  58. package/docs/integration/audit/schemas/audit-evidence.schema.json +182 -0
  59. package/docs/integration/audit/version-compatibility/index.html +845 -0
  60. package/docs/migration/index.html +1213 -0
  61. package/docs/quickstart/index.html +842 -0
  62. package/docs/search/search_index.json +1 -0
  63. package/docs/setup/index.html +941 -0
  64. package/docs/sitemap.xml +51 -0
  65. package/package.json +42 -0
  66. package/src/adopt-plan.mjs +594 -0
  67. package/src/check.mjs +415 -0
  68. package/src/cli.mjs +230 -0
  69. package/src/errors.mjs +144 -0
  70. package/src/gitprobe.mjs +230 -0
  71. package/src/identity-check.mjs +563 -0
  72. package/src/index.mjs +233 -0
  73. package/src/license-texts/Apache-2.0.txt +201 -0
  74. package/src/license-texts/MIT.txt +21 -0
  75. package/src/licensing.mjs +299 -0
  76. package/src/migration.mjs +427 -0
  77. package/src/projection.mjs +397 -0
  78. package/src/scaffold.mjs +178 -0
  79. package/src/skeleton.mjs +886 -0
  80. package/src/workspace.mjs +236 -0
@@ -0,0 +1,976 @@
1
+
2
+ <!doctype html>
3
+ <html lang="zh" class="no-js">
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width,initial-scale=1">
8
+
9
+ <meta name="description" content="Skill Family 生命周期公共工程基础设施父工作区">
10
+
11
+
12
+
13
+ <link rel="canonical" href="https://ifoohoo.github.io/skill-family-engineering-kit/git-lifecycle/">
14
+
15
+
16
+ <link rel="prev" href="../quickstart/">
17
+
18
+
19
+ <link rel="next" href="../help/">
20
+
21
+
22
+
23
+
24
+
25
+ <link rel="icon" href="../assets/images/favicon.png">
26
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
27
+
28
+
29
+
30
+ <title>Git 生命周期指南 - Skill Family Foundation</title>
31
+
32
+
33
+
34
+ <link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
35
+
36
+
37
+ <link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+ <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
51
+
52
+
53
+
54
+
55
+
56
+ </head>
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
67
+
68
+
69
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
70
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
71
+ <label class="md-overlay" for="__drawer"></label>
72
+ <div data-md-component="skip">
73
+
74
+
75
+ <a href="#Git-生命周期指南" class="md-skip">
76
+ 跳转至
77
+ </a>
78
+
79
+ </div>
80
+ <div data-md-component="announce">
81
+
82
+ </div>
83
+
84
+
85
+
86
+
87
+
88
+
89
+ <header class="md-header md-header--shadow" data-md-component="header">
90
+ <nav class="md-header__inner md-grid" aria-label="页眉">
91
+ <a href=".." title="Skill Family Foundation" class="md-header__button md-logo" aria-label="Skill Family Foundation" data-md-component="logo">
92
+
93
+
94
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
95
+
96
+ </a>
97
+ <label class="md-header__button md-icon" for="__drawer">
98
+
99
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
100
+ </label>
101
+ <div class="md-header__title" data-md-component="header-title">
102
+ <div class="md-header__ellipsis">
103
+ <div class="md-header__topic">
104
+ <span class="md-ellipsis">
105
+ Skill Family Foundation
106
+ </span>
107
+ </div>
108
+ <div class="md-header__topic" data-md-component="header-topic">
109
+ <span class="md-ellipsis">
110
+
111
+ Git 生命周期指南
112
+
113
+ </span>
114
+ </div>
115
+ </div>
116
+ </div>
117
+
118
+
119
+ <form class="md-header__option" data-md-component="palette">
120
+
121
+
122
+
123
+
124
+ <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="切换到深色模式" type="radio" name="__palette" id="__palette_0">
125
+
126
+ <label class="md-header__button md-icon" title="切换到深色模式" for="__palette_1" hidden>
127
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
128
+ </label>
129
+
130
+
131
+
132
+
133
+
134
+ <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="切换到浅色模式" type="radio" name="__palette" id="__palette_1">
135
+
136
+ <label class="md-header__button md-icon" title="切换到浅色模式" for="__palette_0" hidden>
137
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
138
+ </label>
139
+
140
+
141
+ </form>
142
+
143
+
144
+
145
+ <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
146
+
147
+
148
+
149
+
150
+
151
+ <label class="md-header__button md-icon" for="__search">
152
+
153
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
154
+ </label>
155
+ <div class="md-search" data-md-component="search" role="dialog">
156
+ <label class="md-search__overlay" for="__search"></label>
157
+ <div class="md-search__inner" role="search">
158
+ <form class="md-search__form" name="search">
159
+ <input type="text" class="md-search__input" name="query" aria-label="搜索" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
160
+ <label class="md-search__icon md-icon" for="__search">
161
+
162
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
163
+
164
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
165
+ </label>
166
+ <nav class="md-search__options" aria-label="查找">
167
+
168
+ <button type="reset" class="md-search__icon md-icon" title="清空当前内容" aria-label="清空当前内容" tabindex="-1">
169
+
170
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
171
+ </button>
172
+ </nav>
173
+
174
+ </form>
175
+ <div class="md-search__output">
176
+ <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
177
+ <div class="md-search-result" data-md-component="search-result">
178
+ <div class="md-search-result__meta">
179
+ 正在初始化搜索引擎
180
+ </div>
181
+ <ol class="md-search-result__list" role="presentation"></ol>
182
+ </div>
183
+ </div>
184
+ </div>
185
+ </div>
186
+ </div>
187
+
188
+
189
+
190
+ </nav>
191
+
192
+ </header>
193
+
194
+ <div class="md-container" data-md-component="container">
195
+
196
+
197
+
198
+
199
+
200
+
201
+ <main class="md-main" data-md-component="main">
202
+ <div class="md-main__inner md-grid">
203
+
204
+
205
+
206
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
207
+ <div class="md-sidebar__scrollwrap">
208
+ <div class="md-sidebar__inner">
209
+
210
+
211
+
212
+
213
+ <nav class="md-nav md-nav--primary" aria-label="导航栏" data-md-level="0">
214
+ <label class="md-nav__title" for="__drawer">
215
+ <a href=".." title="Skill Family Foundation" class="md-nav__button md-logo" aria-label="Skill Family Foundation" data-md-component="logo">
216
+
217
+
218
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
219
+
220
+ </a>
221
+ Skill Family Foundation
222
+ </label>
223
+
224
+ <ul class="md-nav__list" data-md-scrollfix>
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+ <li class="md-nav__item">
233
+ <a href=".." class="md-nav__link">
234
+
235
+
236
+
237
+ <span class="md-ellipsis">
238
+
239
+
240
+ 首页
241
+
242
+
243
+
244
+ </span>
245
+
246
+
247
+
248
+ </a>
249
+ </li>
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+ <li class="md-nav__item">
260
+ <a href="../setup/" class="md-nav__link">
261
+
262
+
263
+
264
+ <span class="md-ellipsis">
265
+
266
+
267
+ 安装与环境
268
+
269
+
270
+
271
+ </span>
272
+
273
+
274
+
275
+ </a>
276
+ </li>
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+ <li class="md-nav__item">
287
+ <a href="../quickstart/" class="md-nav__link">
288
+
289
+
290
+
291
+ <span class="md-ellipsis">
292
+
293
+
294
+ 快速开始
295
+
296
+
297
+
298
+ </span>
299
+
300
+
301
+
302
+ </a>
303
+ </li>
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+ <li class="md-nav__item md-nav__item--active">
316
+
317
+ <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
318
+
319
+
320
+
321
+
322
+
323
+ <label class="md-nav__link md-nav__link--active" for="__toc">
324
+
325
+
326
+
327
+ <span class="md-ellipsis">
328
+
329
+
330
+ Git 生命周期指南
331
+
332
+
333
+
334
+ </span>
335
+
336
+
337
+
338
+ <span class="md-nav__icon md-icon"></span>
339
+ </label>
340
+
341
+ <a href="./" class="md-nav__link md-nav__link--active">
342
+
343
+
344
+
345
+ <span class="md-ellipsis">
346
+
347
+
348
+ Git 生命周期指南
349
+
350
+
351
+
352
+ </span>
353
+
354
+
355
+
356
+ </a>
357
+
358
+
359
+
360
+ <nav class="md-nav md-nav--secondary" aria-label="目录">
361
+
362
+
363
+
364
+
365
+
366
+
367
+ <label class="md-nav__title" for="__toc">
368
+ <span class="md-nav__icon md-icon"></span>
369
+ 目录
370
+ </label>
371
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
372
+
373
+ <li class="md-nav__item">
374
+ <a href="#分支命名与寿命" class="md-nav__link">
375
+ <span class="md-ellipsis">
376
+
377
+ 分支命名与寿命
378
+
379
+ </span>
380
+ </a>
381
+
382
+ </li>
383
+
384
+ <li class="md-nav__item">
385
+ <a href="#修改前状态检查" class="md-nav__link">
386
+ <span class="md-ellipsis">
387
+
388
+ 修改前状态检查
389
+
390
+ </span>
391
+ </a>
392
+
393
+ </li>
394
+
395
+ <li class="md-nav__item">
396
+ <a href="#原子-commit-条件" class="md-nav__link">
397
+ <span class="md-ellipsis">
398
+
399
+ 原子 commit 条件
400
+
401
+ </span>
402
+ </a>
403
+
404
+ </li>
405
+
406
+ <li class="md-nav__item">
407
+ <a href="#stagecommitpushtagrelease-的逐项授权" class="md-nav__link">
408
+ <span class="md-ellipsis">
409
+
410
+ stage、commit、push、tag、release 的逐项授权
411
+
412
+ </span>
413
+ </a>
414
+
415
+ </li>
416
+
417
+ <li class="md-nav__item">
418
+ <a href="#受管投影与源同提交" class="md-nav__link">
419
+ <span class="md-ellipsis">
420
+
421
+ 受管投影与源同提交
422
+
423
+ </span>
424
+ </a>
425
+
426
+ </li>
427
+
428
+ <li class="md-nav__item">
429
+ <a href="#gitignore-分类" class="md-nav__link">
430
+ <span class="md-ellipsis">
431
+
432
+ .gitignore 分类
433
+
434
+ </span>
435
+ </a>
436
+
437
+ </li>
438
+
439
+ <li class="md-nav__item">
440
+ <a href="#删除前核对与可恢复处置" class="md-nav__link">
441
+ <span class="md-ellipsis">
442
+
443
+ 删除前核对与可恢复处置
444
+
445
+ </span>
446
+ </a>
447
+
448
+ </li>
449
+
450
+ <li class="md-nav__item">
451
+ <a href="#生成物禁止手改" class="md-nav__link">
452
+ <span class="md-ellipsis">
453
+
454
+ 生成物禁止手改
455
+
456
+ </span>
457
+ </a>
458
+
459
+ </li>
460
+
461
+ </ul>
462
+
463
+ </nav>
464
+
465
+ </li>
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+ <li class="md-nav__item">
476
+ <a href="../help/" class="md-nav__link">
477
+
478
+
479
+
480
+ <span class="md-ellipsis">
481
+
482
+
483
+ 能力与诊断
484
+
485
+
486
+
487
+ </span>
488
+
489
+
490
+
491
+ </a>
492
+ </li>
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+ <li class="md-nav__item">
503
+ <a href="../architecture/" class="md-nav__link">
504
+
505
+
506
+
507
+ <span class="md-ellipsis">
508
+
509
+
510
+ 架构边界
511
+
512
+
513
+
514
+ </span>
515
+
516
+
517
+
518
+ </a>
519
+ </li>
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+ <li class="md-nav__item">
530
+ <a href="../migration/" class="md-nav__link">
531
+
532
+
533
+
534
+ <span class="md-ellipsis">
535
+
536
+
537
+ 存量采用与迁移
538
+
539
+
540
+
541
+ </span>
542
+
543
+
544
+
545
+ </a>
546
+ </li>
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+ <li class="md-nav__item">
557
+ <a href="../integration/audit/" class="md-nav__link">
558
+
559
+
560
+
561
+ <span class="md-ellipsis">
562
+
563
+
564
+ 独立审计集成
565
+
566
+
567
+
568
+ </span>
569
+
570
+
571
+
572
+ </a>
573
+ </li>
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+ <li class="md-nav__item">
584
+ <a href="../integration/audit/mutation-taxonomy/" class="md-nav__link">
585
+
586
+
587
+
588
+ <span class="md-ellipsis">
589
+
590
+
591
+ 审计变异分类学
592
+
593
+
594
+
595
+ </span>
596
+
597
+
598
+
599
+ </a>
600
+ </li>
601
+
602
+
603
+
604
+
605
+
606
+
607
+
608
+
609
+
610
+ <li class="md-nav__item">
611
+ <a href="../integration/audit/independence/" class="md-nav__link">
612
+
613
+
614
+
615
+ <span class="md-ellipsis">
616
+
617
+
618
+ 审计独立性证明
619
+
620
+
621
+
622
+ </span>
623
+
624
+
625
+
626
+ </a>
627
+ </li>
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+
637
+ <li class="md-nav__item">
638
+ <a href="../integration/audit/version-compatibility/" class="md-nav__link">
639
+
640
+
641
+
642
+ <span class="md-ellipsis">
643
+
644
+
645
+ 审计版本兼容定义
646
+
647
+
648
+
649
+ </span>
650
+
651
+
652
+
653
+ </a>
654
+ </li>
655
+
656
+
657
+
658
+
659
+
660
+
661
+
662
+
663
+
664
+ <li class="md-nav__item">
665
+ <a href="../integration/audit/failure-evidence/" class="md-nav__link">
666
+
667
+
668
+
669
+ <span class="md-ellipsis">
670
+
671
+
672
+ 审计失败证据与 AUD 码
673
+
674
+
675
+
676
+ </span>
677
+
678
+
679
+
680
+ </a>
681
+ </li>
682
+
683
+
684
+
685
+ </ul>
686
+ </nav>
687
+ </div>
688
+ </div>
689
+ </div>
690
+
691
+
692
+
693
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
694
+ <div class="md-sidebar__scrollwrap">
695
+ <div class="md-sidebar__inner">
696
+
697
+
698
+ <nav class="md-nav md-nav--secondary" aria-label="目录">
699
+
700
+
701
+
702
+
703
+
704
+
705
+ <label class="md-nav__title" for="__toc">
706
+ <span class="md-nav__icon md-icon"></span>
707
+ 目录
708
+ </label>
709
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
710
+
711
+ <li class="md-nav__item">
712
+ <a href="#分支命名与寿命" class="md-nav__link">
713
+ <span class="md-ellipsis">
714
+
715
+ 分支命名与寿命
716
+
717
+ </span>
718
+ </a>
719
+
720
+ </li>
721
+
722
+ <li class="md-nav__item">
723
+ <a href="#修改前状态检查" class="md-nav__link">
724
+ <span class="md-ellipsis">
725
+
726
+ 修改前状态检查
727
+
728
+ </span>
729
+ </a>
730
+
731
+ </li>
732
+
733
+ <li class="md-nav__item">
734
+ <a href="#原子-commit-条件" class="md-nav__link">
735
+ <span class="md-ellipsis">
736
+
737
+ 原子 commit 条件
738
+
739
+ </span>
740
+ </a>
741
+
742
+ </li>
743
+
744
+ <li class="md-nav__item">
745
+ <a href="#stagecommitpushtagrelease-的逐项授权" class="md-nav__link">
746
+ <span class="md-ellipsis">
747
+
748
+ stage、commit、push、tag、release 的逐项授权
749
+
750
+ </span>
751
+ </a>
752
+
753
+ </li>
754
+
755
+ <li class="md-nav__item">
756
+ <a href="#受管投影与源同提交" class="md-nav__link">
757
+ <span class="md-ellipsis">
758
+
759
+ 受管投影与源同提交
760
+
761
+ </span>
762
+ </a>
763
+
764
+ </li>
765
+
766
+ <li class="md-nav__item">
767
+ <a href="#gitignore-分类" class="md-nav__link">
768
+ <span class="md-ellipsis">
769
+
770
+ .gitignore 分类
771
+
772
+ </span>
773
+ </a>
774
+
775
+ </li>
776
+
777
+ <li class="md-nav__item">
778
+ <a href="#删除前核对与可恢复处置" class="md-nav__link">
779
+ <span class="md-ellipsis">
780
+
781
+ 删除前核对与可恢复处置
782
+
783
+ </span>
784
+ </a>
785
+
786
+ </li>
787
+
788
+ <li class="md-nav__item">
789
+ <a href="#生成物禁止手改" class="md-nav__link">
790
+ <span class="md-ellipsis">
791
+
792
+ 生成物禁止手改
793
+
794
+ </span>
795
+ </a>
796
+
797
+ </li>
798
+
799
+ </ul>
800
+
801
+ </nav>
802
+ </div>
803
+ </div>
804
+ </div>
805
+
806
+
807
+
808
+ <div class="md-content" data-md-component="content">
809
+
810
+ <article class="md-content__inner md-typeset">
811
+
812
+
813
+
814
+
815
+
816
+ <h1 id="Git-生命周期指南">Git 生命周期指南<a class="headerlink" href="#Git-生命周期指南" title="Permanent link">&para;</a></h1>
817
+ <p>本文是 Skill Family 各工作区 Git 生命周期规则的唯一权威文档。新建项目骨架
818
+ (<code>npx skill-family-engineering-kit scaffold</code>)中的 AGENTS.md「Minimal Git
819
+ lifecycle」区块与 <code>docs/git-lifecycle.md</code> 页面都是对本指南同口径的投影与指针——
820
+ 任何工作区都不得再维护第二套 Git 规则。所有工具链(projen、engineering kit、
821
+ CI 脚本)都不执行 Git 写操作;下述每一类写操作都只来自人的显式决定。</p>
822
+ <h2 id="分支命名与寿命">分支命名与寿命<a class="headerlink" href="#分支命名与寿命" title="Permanent link">&para;</a></h2>
823
+ <ul>
824
+ <li>分支模型:一条长期分支 <code>main</code>,加短寿命任务分支 <code>task/&lt;任务号&gt;-&lt;短横线摘要&gt;</code>
825
+ (例如 <code>task/0050-git-lifecycle</code>)。</li>
826
+ <li>任务分支只承载一个任务的一组相关变更;任务验收通过后合并;确认没有未合并
827
+ 提交后可删除本地分支。远端分支删除属于 push 类外部写入,必须另行取得显式
828
+ 授权(见下文逐项授权节),合并本身不自动授权远端删除。不存在长期存活的
829
+ 特性分支,也不允许在任务分支上堆积与任务无关的变更。</li>
830
+ <li><code>main</code> 永远只接收已通过门禁的合并;任何情况下都不得对 <code>main</code> 直接提交或
831
+ force-push。</li>
832
+ </ul>
833
+ <h2 id="修改前状态检查">修改前状态检查<a class="headerlink" href="#修改前状态检查" title="Permanent link">&para;</a></h2>
834
+ <ul>
835
+ <li>提交、远端等实时 Git 状态不写进任何版本化文档(包括产品状态页);执行任何
836
+ Git 动作前,先现场运行下列只读命令发现当前状态:</li>
837
+ </ul>
838
+ <p><code>bash
839
+ git status --short --branch
840
+ git rev-parse --verify HEAD
841
+ git remote -v</code></p>
842
+ <p>这三条命令只是只读探测:输出只反映本机工作区当下的状态,不授予任何写权限;
843
+ 执行 stage/commit/push/tag/release 仍必须按下文逐项授权节单独取得授权。
844
+ - 开始任何修改之前,先运行 <code>git status --short --branch</code>,确认当前分支、未提交
845
+ 变更与远端跟踪状态;工作区里出现不认识的分支、未暂存变更或陌生文件时,先
846
+ 调查来源再动手,那是别人正在进行的工作,不是可以随手清理的噪声。
847
+ - 禁止用 <code>git checkout .</code>、<code>git restore .</code>、<code>git clean -f</code>、<code>git reset --hard</code>
848
+ 之类的破坏性命令“顺手”清空工作区来绕过障碍;确需丢弃未提交变更时,必须
849
+ 逐条列出将被丢弃的内容并获得显式确认。</p>
850
+ <h2 id="原子-commit-条件">原子 commit 条件<a class="headerlink" href="#原子-commit-条件" title="Permanent link">&para;</a></h2>
851
+ <p>一个 commit 必须同时满足:</p>
852
+ <ol>
853
+ <li>只包含一个逻辑变更(一个任务的推进,或一次明确拆分的修正);</li>
854
+ <li>受管生成物与其源(<code>.projenrc.js</code>、投影脚本)在同一次提交内成对出现;</li>
855
+ <li>提交前 <code>pnpm check</code>(或任务指定的最小验证入口)退出码为 0——不得把红的
856
+ 状态提交进任何分支后再“回头修”;</li>
857
+ <li>提交信息说明“为什么”,引用任务号;不得包含凭据、私有数据或不可公开的
858
+ 内部标识。</li>
859
+ </ol>
860
+ <p>不满足以上任一条件的变更不得提交;宁可拆成多个 commit,也不合并成一个混合
861
+ 变更。</p>
862
+ <h2 id="stagecommitpushtagrelease-的逐项授权">stage、commit、push、tag、release 的逐项授权<a class="headerlink" href="#stagecommitpushtagrelease-的逐项授权" title="Permanent link">&para;</a></h2>
863
+ <ul>
864
+ <li>修改授权不包含 stage 与 commit:获得某任务的修改授权,只表示可以在工作区
865
+ 里改动文件;stage(<code>git add</code>)与 commit 仍是两个独立的写操作,必须分别
866
+ 按风险逐项取得明确授权,不存在“授权修改即默认授权提交”。</li>
867
+ <li>stage 与 commit:默认只在本地、按原子条件执行;一次 commit 授权只覆盖被
868
+ 明确声明的那一次本地提交,不覆盖任务之外的清理、改写(含 amend/rebase
869
+ 改写已提交内容)或后续提交。</li>
870
+ <li>push:把任务分支推送到远端、开 PR,以及删除远端分支
871
+ (<code>git push --delete</code> / <code>git push origin :&lt;branch&gt;</code>)同属 push 类外部
872
+ 写入,都需要在当前任务里单独授权;禁止直接 push <code>main</code>。合并后的清理说明
873
+ 不构成对远端删除的自动授权。</li>
874
+ <li>tag 与 release:每一次打 tag、发布 release(包括 npm publish、Pages 部署、
875
+ 建远端仓库)都是独立的高风险动作,必须逐项单独授权;一次 push 授权不构成
876
+ 任何 tag/release 授权。</li>
877
+ <li>自动化工具(含 AI 助手与 CI)在未获得针对当前任务的显式人工授权前,不得
878
+ 执行 <code>git add</code>(stage)、<code>git commit</code>、<code>git push</code>、<code>git tag</code> 或任何建
879
+ 远端/发布/删除远端引用的命令。</li>
880
+ <li>授权只对声明者的那一次操作有效,不构成对同类后续操作的长期放行。</li>
881
+ </ul>
882
+ <h2 id="受管投影与源同提交">受管投影与源同提交<a class="headerlink" href="#受管投影与源同提交" title="Permanent link">&para;</a></h2>
883
+ <ul>
884
+ <li>projen 受管文件只能通过修改 <code>.projenrc.js</code> 后运行 <code>pnpm synth</code> 产生;生成物
885
+ 必须与其源变更在同一个 commit 内提交,不得先提交源、后补生成物,更不得只
886
+ 提交其中一侧。</li>
887
+ <li>文档受管投影(如 setup.md 的稳定门禁阶段区块)同理:投影脚本重跑
888
+ 的输出与触发它的真源变更同提交;CI 的漂移检查(synth-drift / synth-idempotency)
889
+ 会机械拦截只提交一侧的变更。</li>
890
+ </ul>
891
+ <h2 id="gitignore-分类">.gitignore 分类<a class="headerlink" href="#gitignore-分类" title="Permanent link">&para;</a></h2>
892
+ <ul>
893
+ <li>每个被忽略的路径都必须归入 <code>.foundation/file-registry.json</code> 的一个类别:
894
+ 工具生成物(artifacts,如 <code>node_modules/</code>、<code>site/</code>、<code>.cache/</code>、日志)走
895
+ <code>.gitignore</code>;依赖锁文件(trackedToolLocks,如 <code>pnpm-lock.yaml</code>)被显式跟踪、
896
+ 不得忽略;手写源事实与受管文件一律跟踪。</li>
897
+ <li><code>.gitignore</code> 的忽略模式集合与 file-registry 的 artifacts 模式集合必须逐字
898
+ 一致(<code>scripts/check-structure.mjs</code> 机械核对);新增忽略项必须先登记类别,
899
+ 不允许出现“跟踪但被忽略”或“忽略但未登记”的中间态。</li>
900
+ </ul>
901
+ <h2 id="删除前核对与可恢复处置">删除前核对与可恢复处置<a class="headerlink" href="#删除前核对与可恢复处置" title="Permanent link">&para;</a></h2>
902
+ <ul>
903
+ <li>删除任何文件、分支或历史内容之前,先核对其是否仍被引用(门禁、文档链接、
904
+ 冻结证据引用);被冻结验收输入引用的证据一律不得删除。</li>
905
+ <li>优先可恢复处置:能改就不删,能停用(如 <code>if: false</code> 硬门禁)就不移除;确需
906
+ 删除时保留可追溯的替代物(续接记录、决定记录、归档页)。</li>
907
+ <li>分支退出:任务分支合并后,先确认没有未合并的提交,再删除本地分支;远端
908
+ 分支删除属于 push 类外部写入,合并后的清理说明不得自动授权远端删除,须按
909
+ 逐项授权节另行取得显式授权。</li>
910
+ <li>任何“删除后重放”都必须有先红后绿的机器证据,证明删除不是静默丢失。</li>
911
+ </ul>
912
+ <h2 id="生成物禁止手改">生成物禁止手改<a class="headerlink" href="#生成物禁止手改" title="Permanent link">&para;</a></h2>
913
+ <ul>
914
+ <li>带 projen 生成标记的文件、投影脚本写入的受管区块、<code>.foundation/</code> 下的机器
915
+ 真源一律禁止手改;手改会被 synth 漂移检查检出并拦截。</li>
916
+ <li>需要变更受管内容时,唯一合法路径是修改对应的源(<code>.projenrc.js</code> 或投影脚本
917
+ 的真源输入)再重新生成;“手改后再重新生成把差异洗白”属于被门禁明确拒绝
918
+ 的篡改模式。</li>
919
+ </ul>
920
+
921
+
922
+
923
+
924
+
925
+
926
+
927
+
928
+
929
+
930
+
931
+
932
+
933
+ </article>
934
+ </div>
935
+
936
+
937
+ <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
938
+ </div>
939
+
940
+ </main>
941
+
942
+ <footer class="md-footer">
943
+
944
+ <div class="md-footer-meta md-typeset">
945
+ <div class="md-footer-meta__inner md-grid">
946
+ <div class="md-copyright">
947
+
948
+
949
+ Made with
950
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
951
+ Material for MkDocs
952
+ </a>
953
+
954
+ </div>
955
+
956
+ </div>
957
+ </div>
958
+ </footer>
959
+
960
+ </div>
961
+ <div class="md-dialog" data-md-component="dialog">
962
+ <div class="md-dialog__inner md-typeset"></div>
963
+ </div>
964
+
965
+
966
+
967
+
968
+
969
+ <script id="__config" type="application/json">{"annotate": null, "base": "..", "features": [], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": null}</script>
970
+
971
+
972
+ <script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
973
+
974
+
975
+ </body>
976
+ </html>