git-nested 1.1.1__tar.gz → 1.2.1__tar.gz

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 (218) hide show
  1. {git_nested-1.1.1 → git_nested-1.2.1}/.github/workflows/build-binary.yml +5 -3
  2. git_nested-1.2.1/.github/workflows/docs.yml +70 -0
  3. git_nested-1.2.1/.github/workflows/prune-artifacts.yml +57 -0
  4. {git_nested-1.1.1 → git_nested-1.2.1}/.github/workflows/publish.yml +3 -3
  5. {git_nested-1.1.1 → git_nested-1.2.1}/.github/workflows/release-binary.yml +3 -3
  6. {git_nested-1.1.1 → git_nested-1.2.1}/.github/workflows/test-binary.yml +2 -2
  7. {git_nested-1.1.1 → git_nested-1.2.1}/.github/workflows/test.yml +22 -11
  8. {git_nested-1.1.1 → git_nested-1.2.1}/.gitignore +1 -0
  9. {git_nested-1.1.1 → git_nested-1.2.1}/.pre-commit-config.yaml +0 -3
  10. git_nested-1.2.1/CONTRIBUTING.md +19 -0
  11. git_nested-1.2.1/PKG-INFO +133 -0
  12. git_nested-1.2.1/README.md +107 -0
  13. git_nested-1.2.1/doc/README.md +62 -0
  14. git_nested-1.2.1/doc/_static/custom.css +111 -0
  15. git_nested-1.2.1/doc/_static/custom.js +40 -0
  16. git_nested-1.2.1/doc/_static/favicon.svg +29 -0
  17. git_nested-1.2.1/doc/_static/logo.svg +30 -0
  18. git_nested-1.2.1/doc/_templates/layout.html +19 -0
  19. git_nested-1.2.1/doc/architecture/diagrams.md +860 -0
  20. git_nested-1.2.1/doc/architecture/index.md +127 -0
  21. git_nested-1.2.1/doc/cli/branch.md +94 -0
  22. git_nested-1.2.1/doc/cli/clean.md +53 -0
  23. git_nested-1.2.1/doc/cli/clone.md +121 -0
  24. git_nested-1.2.1/doc/cli/commit.md +53 -0
  25. git_nested-1.2.1/doc/cli/completion.md +47 -0
  26. git_nested-1.2.1/doc/cli/config.md +69 -0
  27. git_nested-1.2.1/doc/cli/diff.md +54 -0
  28. git_nested-1.2.1/doc/cli/environment-variables.md +19 -0
  29. git_nested-1.2.1/doc/cli/fetch.md +59 -0
  30. git_nested-1.2.1/doc/cli/index.md +139 -0
  31. git_nested-1.2.1/doc/cli/init.md +103 -0
  32. git_nested-1.2.1/doc/cli/pull.md +130 -0
  33. git_nested-1.2.1/doc/cli/push.md +141 -0
  34. git_nested-1.2.1/doc/cli/repair.md +54 -0
  35. git_nested-1.2.1/doc/cli/run.md +42 -0
  36. git_nested-1.2.1/doc/cli/status.md +87 -0
  37. git_nested-1.2.1/doc/cli/version.md +29 -0
  38. git_nested-1.2.1/doc/concepts/comparison.md +63 -0
  39. git_nested-1.2.1/doc/concepts/glossary.md +81 -0
  40. git_nested-1.2.1/doc/concepts/how-it-works.md +163 -0
  41. git_nested-1.2.1/doc/conf.py +123 -0
  42. git_nested-1.2.1/doc/configuration/examples.md +259 -0
  43. git_nested-1.2.1/doc/configuration/git-config.md +54 -0
  44. git_nested-1.2.1/doc/configuration/gitnested-file.md +164 -0
  45. git_nested-1.2.1/doc/contributing/development.md +116 -0
  46. git_nested-1.2.1/doc/contributing/documentation.md +84 -0
  47. git_nested-1.2.1/doc/guides/adopt.md +45 -0
  48. git_nested-1.2.1/doc/guides/conflicts.md +83 -0
  49. git_nested-1.2.1/doc/guides/hooks-and-signing.md +47 -0
  50. git_nested-1.2.1/doc/guides/many.md +79 -0
  51. git_nested-1.2.1/doc/guides/nested-in-nested.md +55 -0
  52. git_nested-1.2.1/doc/guides/partial.md +66 -0
  53. git_nested-1.2.1/doc/guides/pin.md +53 -0
  54. git_nested-1.2.1/doc/guides/squash-merges.md +54 -0
  55. git_nested-1.2.1/doc/guides/submodules.md +49 -0
  56. git_nested-1.2.1/doc/index.md +189 -0
  57. git_nested-1.2.1/doc/introduction/index.md +71 -0
  58. git_nested-1.2.1/doc/introduction/install.md +175 -0
  59. git_nested-1.2.1/doc/quickstart/05-minutes.md +222 -0
  60. git_nested-1.2.1/doc/quickstart/everyday.md +105 -0
  61. {git_nested-1.1.1 → git_nested-1.2.1}/man/man1/git-nested.1 +62 -1
  62. {git_nested-1.1.1 → git_nested-1.2.1}/pyproject.toml +26 -4
  63. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/__init__.py +0 -6
  64. git_nested-1.2.1/src/git_nested/_compat.py +49 -0
  65. git_nested-1.2.1/src/git_nested/checks.py +95 -0
  66. git_nested-1.2.1/src/git_nested/cli/app.py +80 -0
  67. git_nested-1.2.1/src/git_nested/cli/location.py +108 -0
  68. git_nested-1.2.1/src/git_nested/cli/parser.py +154 -0
  69. git_nested-1.2.1/src/git_nested/cli/setup.py +80 -0
  70. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/cli/spec.py +201 -14
  71. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/commands/__init__.py +4 -0
  72. git_nested-1.2.1/src/git_nested/commands/branch.py +133 -0
  73. git_nested-1.2.1/src/git_nested/commands/clean.py +81 -0
  74. git_nested-1.2.1/src/git_nested/commands/clone.py +231 -0
  75. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/commands/commit.py +10 -19
  76. git_nested-1.2.1/src/git_nested/commands/config.py +68 -0
  77. git_nested-1.2.1/src/git_nested/commands/diff.py +33 -0
  78. git_nested-1.2.1/src/git_nested/commands/fetch.py +78 -0
  79. git_nested-1.2.1/src/git_nested/commands/init.py +104 -0
  80. git_nested-1.2.1/src/git_nested/commands/pull.py +247 -0
  81. git_nested-1.2.1/src/git_nested/commands/push.py +282 -0
  82. git_nested-1.2.1/src/git_nested/commands/repair.py +53 -0
  83. git_nested-1.2.1/src/git_nested/commands/run.py +36 -0
  84. git_nested-1.2.1/src/git_nested/commands/status.py +145 -0
  85. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/completion/__init__.py +20 -52
  86. git_nested-1.2.1/src/git_nested/configio.py +91 -0
  87. git_nested-1.2.1/src/git_nested/content.py +162 -0
  88. git_nested-1.2.1/src/git_nested/discovery.py +102 -0
  89. git_nested-1.2.1/src/git_nested/filters.py +117 -0
  90. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/git.py +29 -30
  91. git_nested-1.2.1/src/git_nested/gitfile.py +158 -0
  92. git_nested-1.2.1/src/git_nested/history.py +351 -0
  93. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/messages.py +36 -20
  94. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/models.py +50 -27
  95. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/output.py +47 -8
  96. git_nested-1.2.1/src/git_nested/refs.py +111 -0
  97. git_nested-1.2.1/src/git_nested/submodules.py +58 -0
  98. git_nested-1.2.1/src/git_nested/worktree.py +74 -0
  99. git_nested-1.2.1/src/git_nested.egg-info/PKG-INFO +133 -0
  100. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested.egg-info/SOURCES.txt +68 -4
  101. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested.egg-info/scm_file_list.json +68 -4
  102. git_nested-1.2.1/src/git_nested.egg-info/scm_version.json +8 -0
  103. {git_nested-1.1.1 → git_nested-1.2.1}/tests/conftest.py +59 -8
  104. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/scenarios/test_extraction.py +4 -4
  105. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/scenarios/test_filemode.py +24 -7
  106. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/scenarios/test_filter.py +69 -15
  107. git_nested-1.2.1/tests/e2e/test_branch.py +577 -0
  108. git_nested-1.2.1/tests/e2e/test_clean.py +94 -0
  109. git_nested-1.2.1/tests/e2e/test_clone.py +261 -0
  110. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_commit.py +25 -4
  111. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_completion.py +39 -16
  112. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_config.py +23 -3
  113. git_nested-1.2.1/tests/e2e/test_detached.py +21 -0
  114. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_diff.py +27 -15
  115. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_encode.py +16 -9
  116. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_error.py +31 -27
  117. git_nested-1.2.1/tests/e2e/test_exclude.py +75 -0
  118. git_nested-1.2.1/tests/e2e/test_fetch.py +60 -0
  119. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_gitignore.py +2 -2
  120. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_init.py +52 -3
  121. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_nested_in_nested.py +73 -20
  122. git_nested-1.2.1/tests/e2e/test_non_ascii.py +24 -0
  123. git_nested-1.2.1/tests/e2e/test_pin.py +51 -0
  124. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_pull.py +214 -30
  125. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_push.py +353 -20
  126. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_rebase.py +7 -14
  127. git_nested-1.2.1/tests/e2e/test_reclone.py +141 -0
  128. git_nested-1.2.1/tests/e2e/test_repair.py +196 -0
  129. git_nested-1.2.1/tests/e2e/test_run.py +73 -0
  130. git_nested-1.2.1/tests/e2e/test_signing.py +42 -0
  131. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_status.py +53 -16
  132. git_nested-1.2.1/tests/e2e/test_subdirectory.py +160 -0
  133. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_submodule.py +4 -1
  134. git_nested-1.2.1/tests/e2e/test_submodules.py +123 -0
  135. git_nested-1.2.1/tests/e2e/test_toml.py +55 -0
  136. git_nested-1.2.1/tests/e2e/test_upstream_path.py +64 -0
  137. {git_nested-1.1.1 → git_nested-1.2.1}/tests/unit/fakes.py +0 -4
  138. git_nested-1.2.1/tests/unit/test_adopt.py +145 -0
  139. {git_nested-1.1.1 → git_nested-1.2.1}/tests/unit/test_command.py +62 -24
  140. {git_nested-1.1.1 → git_nested-1.2.1}/tests/unit/test_completion_engine.py +24 -13
  141. git_nested-1.2.1/tests/unit/test_configio.py +108 -0
  142. git_nested-1.2.1/tests/unit/test_docs.py +98 -0
  143. {git_nested-1.1.1 → git_nested-1.2.1}/tests/unit/test_helpers.py +95 -54
  144. {git_nested-1.1.1 → git_nested-1.2.1}/tests/unit/test_logging.py +56 -18
  145. git_nested-1.2.1/tests/unit/test_repo_business.py +568 -0
  146. git_nested-1.2.1/uv.lock +2020 -0
  147. git_nested-1.1.1/CONTRIBUTING.md +0 -95
  148. git_nested-1.1.1/PKG-INFO +0 -506
  149. git_nested-1.1.1/README.md +0 -480
  150. git_nested-1.1.1/docs/diagrams.md +0 -578
  151. git_nested-1.1.1/src/git_nested/_compat.py +0 -32
  152. git_nested-1.1.1/src/git_nested/checks.py +0 -104
  153. git_nested-1.1.1/src/git_nested/cli/app.py +0 -109
  154. git_nested-1.1.1/src/git_nested/cli/parser.py +0 -170
  155. git_nested-1.1.1/src/git_nested/cli/setup.py +0 -103
  156. git_nested-1.1.1/src/git_nested/commands/branch.py +0 -37
  157. git_nested-1.1.1/src/git_nested/commands/clean.py +0 -55
  158. git_nested-1.1.1/src/git_nested/commands/clone.py +0 -160
  159. git_nested-1.1.1/src/git_nested/commands/config.py +0 -104
  160. git_nested-1.1.1/src/git_nested/commands/diff.py +0 -53
  161. git_nested-1.1.1/src/git_nested/commands/fetch.py +0 -49
  162. git_nested-1.1.1/src/git_nested/commands/init.py +0 -81
  163. git_nested-1.1.1/src/git_nested/commands/pull.py +0 -234
  164. git_nested-1.1.1/src/git_nested/commands/push.py +0 -329
  165. git_nested-1.1.1/src/git_nested/commands/status.py +0 -184
  166. git_nested-1.1.1/src/git_nested/content.py +0 -199
  167. git_nested-1.1.1/src/git_nested/discovery.py +0 -76
  168. git_nested-1.1.1/src/git_nested/filters.py +0 -164
  169. git_nested-1.1.1/src/git_nested/gitfile.py +0 -194
  170. git_nested-1.1.1/src/git_nested/history.py +0 -224
  171. git_nested-1.1.1/src/git_nested/refs.py +0 -58
  172. git_nested-1.1.1/src/git_nested/repo.py +0 -56
  173. git_nested-1.1.1/src/git_nested/worktree.py +0 -40
  174. git_nested-1.1.1/src/git_nested/yamlio.py +0 -22
  175. git_nested-1.1.1/src/git_nested.egg-info/PKG-INFO +0 -506
  176. git_nested-1.1.1/src/git_nested.egg-info/scm_version.json +0 -8
  177. git_nested-1.1.1/tests/e2e/test_branch.py +0 -300
  178. git_nested-1.1.1/tests/e2e/test_clean.py +0 -32
  179. git_nested-1.1.1/tests/e2e/test_clone.py +0 -114
  180. git_nested-1.1.1/tests/e2e/test_fetch.py +0 -33
  181. git_nested-1.1.1/tests/e2e/test_reclone.py +0 -36
  182. git_nested-1.1.1/tests/unit/test_docs.py +0 -39
  183. git_nested-1.1.1/tests/unit/test_facade.py +0 -97
  184. git_nested-1.1.1/tests/unit/test_repo_business.py +0 -469
  185. git_nested-1.1.1/uv.lock +0 -1491
  186. {git_nested-1.1.1 → git_nested-1.2.1}/.codecov.yml +0 -0
  187. {git_nested-1.1.1 → git_nested-1.2.1}/.fish.rc +0 -0
  188. {git_nested-1.1.1 → git_nested-1.2.1}/.gitattributes +0 -0
  189. {git_nested-1.1.1 → git_nested-1.2.1}/.github/CODEOWNERS +0 -0
  190. {git_nested-1.1.1 → git_nested-1.2.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  191. {git_nested-1.1.1 → git_nested-1.2.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  192. {git_nested-1.1.1 → git_nested-1.2.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  193. {git_nested-1.1.1 → git_nested-1.2.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  194. {git_nested-1.1.1 → git_nested-1.2.1}/.github/dependabot.yml +0 -0
  195. {git_nested-1.1.1 → git_nested-1.2.1}/.github/release.yml +0 -0
  196. {git_nested-1.1.1 → git_nested-1.2.1}/.rc +0 -0
  197. {git_nested-1.1.1 → git_nested-1.2.1}/LICENSE +0 -0
  198. {git_nested-1.1.1 → git_nested-1.2.1}/SECURITY.md +0 -0
  199. {git_nested-1.1.1 → git_nested-1.2.1}/bin/git-nested +0 -0
  200. {git_nested-1.1.1 → git_nested-1.2.1}/scripts/create-python-exe.sh +0 -0
  201. {git_nested-1.1.1 → git_nested-1.2.1}/setup.cfg +0 -0
  202. {git_nested-1.1.1 → git_nested-1.2.1}/sonar-project.properties +0 -0
  203. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/__main__.py +0 -0
  204. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/_version.py +0 -0
  205. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/cli/__init__.py +0 -0
  206. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/cli/main.py +0 -0
  207. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/commands/completion.py +0 -0
  208. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/commands/version.py +0 -0
  209. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/completion/scripts.py +0 -0
  210. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/constants.py +0 -0
  211. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/errors.py +0 -0
  212. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested/py.typed +0 -0
  213. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested.egg-info/dependency_links.txt +0 -0
  214. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested.egg-info/entry_points.txt +0 -0
  215. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested.egg-info/requires.txt +0 -0
  216. {git_nested-1.1.1 → git_nested-1.2.1}/src/git_nested.egg-info/top_level.txt +0 -0
  217. {git_nested-1.1.1 → git_nested-1.2.1}/tests/e2e/test_version.py +0 -0
  218. {git_nested-1.1.1 → git_nested-1.2.1}/tests/unit/conftest.py +0 -0
@@ -23,10 +23,10 @@ on:
23
23
  required: false
24
24
  default: git-nested-binary
25
25
  runs-on:
26
- description: 'Runner to build on -- ubuntu-latest, macos-latest, windows-latest'
26
+ description: 'Runner to build on -- ubuntu-26.04, macos-latest, windows-latest'
27
27
  type: string
28
28
  required: false
29
- default: ubuntu-latest
29
+ default: ubuntu-26.04
30
30
  container:
31
31
  description: 'Container to build inside (Linux only). Empty: build on the runner itself.'
32
32
  type: string
@@ -54,7 +54,7 @@ jobs:
54
54
  # For Linux the default is almalinux:8, and that is a portability
55
55
  # decision, not a convenience one: a PyInstaller binary links the glibc of
56
56
  # the machine that built it, and glibc is only backward compatible, so
57
- # built on ubuntu-latest it would refuse to start on anything older than
57
+ # built on ubuntu-26.04 it would refuse to start on anything older than
58
58
  # that runner. AlmaLinux 8 has glibc 2.28, the oldest that still runs the
59
59
  # node20 the actions below need, which covers every distro from Ubuntu
60
60
  # 20.04 / Debian 10 / Fedora 29 / RHEL 8 onwards. glibc-based distros only
@@ -135,3 +135,5 @@ jobs:
135
135
  dist/*.tar.xz
136
136
  dist/*.zip
137
137
  if-no-files-found: error
138
+ # main keeps its builds for a month, branch and PR builds only for two days.
139
+ retention-days: ${{ github.ref == 'refs/heads/main' && 30 || 2 }}
@@ -0,0 +1,70 @@
1
+ name: Docs
2
+
3
+ # Builds doc/ (see doc/conf.py) with Sphinx. On pull requests it only
4
+ # builds, so a broken page fails the check. On main and on a release tag it
5
+ # also publishes the site to the gh_pages branch, which GitHub Pages serves.
6
+ # A tag build shows the release version.
7
+ on:
8
+ push:
9
+ branches: [main]
10
+ tags: ['*.*.*']
11
+ pull_request:
12
+ branches: ['**']
13
+ # by hand: 'Run workflow' in the Actions tab, or `gh workflow run docs.yml`
14
+ workflow_dispatch:
15
+
16
+ concurrency:
17
+ group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
18
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
19
+
20
+ jobs:
21
+ build:
22
+ runs-on: ubuntu-26.04
23
+ steps:
24
+ - name: Checkout code
25
+ uses: actions/checkout@v7
26
+ with:
27
+ # doc/conf.py shows the version from `git describe`, which needs the tags.
28
+ fetch-depth: 0
29
+ - name: Install uv
30
+ uses: astral-sh/setup-uv@v10.3.0
31
+ with:
32
+ python-version: '3.14'
33
+ enable-cache: true
34
+ - name: Setup project
35
+ run: uv sync --frozen
36
+ - name: Build docs
37
+ run: uv run poe docs
38
+ - name: Upload docs
39
+ if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))
40
+ uses: actions/upload-artifact@v7
41
+ with:
42
+ name: docs-html
43
+ path: doc/_build/html
44
+ include-hidden-files: true
45
+
46
+ # A job of its own, so only this one can write to the repository.
47
+ # Only main and tags are published, also when the workflow is started by hand.
48
+ publish:
49
+ if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))
50
+ needs: build
51
+ # One publish at a time: a tag and main are often pushed together.
52
+ concurrency:
53
+ group: gh-pages
54
+ cancel-in-progress: false
55
+ runs-on: ubuntu-26.04
56
+ permissions:
57
+ contents: write
58
+ steps:
59
+ - name: Download docs
60
+ uses: actions/download-artifact@v8
61
+ with:
62
+ name: docs-html
63
+ path: site
64
+ - name: Publish docs
65
+ uses: peaceiris/actions-gh-pages@v4
66
+ with:
67
+ github_token: ${{ secrets.GITHUB_TOKEN }}
68
+ publish_branch: gh_pages
69
+ publish_dir: site
70
+ force_orphan: true
@@ -0,0 +1,57 @@
1
+ name: Prune artifacts
2
+
3
+ # Caps how many binary artifacts pile up against the repository's Actions
4
+ # storage quota, per artifact name and branch: main keeps its newest 3 builds,
5
+ # every other branch (PR branches included) only its newest 1. The upload
6
+ # step's retention-days (30 days main, 2 days elsewhere) is only an upper
7
+ # bound; this caps the count as well.
8
+ #
9
+ # Runs once the workflows that build the artifacts have finished, so the
10
+ # artifact of the run that triggered it already exists and the caps hold
11
+ # exactly. workflow_run only fires for workflow files on the default branch,
12
+ # so changes to this file take effect once merged.
13
+ on:
14
+ workflow_run:
15
+ workflows:
16
+ - Run Tests
17
+ - Release binary
18
+ types:
19
+ - completed
20
+ # on-demand -- 'Run workflow' in the Actions tab, or `gh workflow run prune-artifacts.yml`
21
+ workflow_dispatch:
22
+ inputs:
23
+ keep:
24
+ description: 'How many of the newest main artifacts to keep per artifact name (other branches keep 1)'
25
+ type: number
26
+ default: 3
27
+
28
+ permissions:
29
+ actions: write
30
+
31
+ # two prunes at once would only race each other deleting the same artifacts.
32
+ concurrency:
33
+ group: ${{ github.workflow }}
34
+ cancel-in-progress: false
35
+
36
+ jobs:
37
+ prune:
38
+ runs-on: ubuntu-26.04
39
+ steps:
40
+ - name: Delete all but the newest builds
41
+ env:
42
+ GH_TOKEN: ${{ github.token }}
43
+ REPO: ${{ github.repository }}
44
+ KEEP: ${{ inputs.keep || 3 }}
45
+ run: |
46
+ # Per artifact name and branch ("git-nested-binary-ci-linux" on
47
+ # "main", ...), newest first; everything after the first $KEEP on
48
+ # main, or after the first 1 on any other branch, is deleted. Other
49
+ # artifacts (dist) are not touched.
50
+ gh api --paginate "repos/$REPO/actions/artifacts?per_page=100" \
51
+ --jq '.artifacts[] | select(.expired == false) | select(.name | startswith("git-nested-binary-")) | [.name + " " + .workflow_run.head_branch, .created_at, .id, .workflow_run.head_branch] | @tsv' \
52
+ | sort -t $'\t' -k1,1 -k2,2r \
53
+ | awk -F'\t' -v keep="$KEEP" '{ if (++n[$1] > ($4 == "main" ? keep : 1)) print $3, $1 }' \
54
+ | while read -r id name; do
55
+ echo "delete $name (artifact $id)"
56
+ gh api -X DELETE "repos/$REPO/actions/artifacts/$id"
57
+ done
@@ -6,14 +6,14 @@ on:
6
6
 
7
7
  jobs:
8
8
  build:
9
- runs-on: ubuntu-latest
9
+ runs-on: ubuntu-26.04
10
10
  steps:
11
11
  - name: Checkout code
12
12
  uses: actions/checkout@v7
13
13
  with:
14
14
  fetch-depth: 0
15
15
  - name: Install uv
16
- uses: astral-sh/setup-uv@v7
16
+ uses: astral-sh/setup-uv@v10.3.0
17
17
  with:
18
18
  python-version: '3.13'
19
19
  enable-cache: true
@@ -29,7 +29,7 @@ jobs:
29
29
 
30
30
  publish:
31
31
  needs: build
32
- runs-on: ubuntu-latest
32
+ runs-on: ubuntu-26.04
33
33
  environment:
34
34
  name: pypi
35
35
  url: https://pypi.org/project/git-nested/
@@ -47,7 +47,7 @@ jobs:
47
47
  # Intel macOS is deliberately absent: those runners are gone, and
48
48
  # the arm64 binary is what a current Mac needs.
49
49
  - target: linux
50
- runs-on: ubuntu-latest
50
+ runs-on: ubuntu-26.04
51
51
  container: almalinux:8
52
52
  - target: macos
53
53
  runs-on: macos-latest
@@ -76,7 +76,7 @@ jobs:
76
76
  # and has to drive a real nested repo end to end there.
77
77
  verify:
78
78
  needs: build
79
- runs-on: ubuntu-latest
79
+ runs-on: ubuntu-26.04
80
80
  strategy:
81
81
  fail-fast: false
82
82
  matrix:
@@ -163,7 +163,7 @@ jobs:
163
163
  needs: [build, test, verify]
164
164
  # nothing to attach when workflow_dispatch ran without a tag
165
165
  if: github.event_name == 'release' || inputs.tag != ''
166
- runs-on: ubuntu-latest
166
+ runs-on: ubuntu-26.04
167
167
  permissions:
168
168
  contents: write
169
169
  steps:
@@ -28,7 +28,7 @@ on:
28
28
 
29
29
  jobs:
30
30
  test:
31
- runs-on: ubuntu-latest
31
+ runs-on: ubuntu-26.04
32
32
  steps:
33
33
  - uses: actions/checkout@v7
34
34
  with:
@@ -38,7 +38,7 @@ jobs:
38
38
  # tags of this checkout.
39
39
 
40
40
  - name: Install uv
41
- uses: astral-sh/setup-uv@v7
41
+ uses: astral-sh/setup-uv@v10.3.0
42
42
  with:
43
43
  python-version: '3.13'
44
44
  enable-cache: true
@@ -6,13 +6,14 @@ on:
6
6
  pull_request:
7
7
  branches: ['**']
8
8
 
9
- # One run per branch/PR at a time -- a new commit cancels whatever this
10
- # workflow is still running for the same ref. Not on main: every push there
11
- # is a merge, and each one should run to completion rather than being
12
- # canceled by the next.
9
+ # One run per branch/PR at a time. On a PR a newer push cancels the run in
10
+ # progress: only the newest commit's results matter there, and waiting for a
11
+ # superseded run would hold its checks back by the length of a whole run. On
12
+ # main every run finishes, so each merged commit keeps its full results (a
13
+ # newer push waits; only the newest waiting run is kept).
13
14
  concurrency:
14
15
  group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
15
- cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
16
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
16
17
 
17
18
  jobs:
18
19
  # Builds the standalone executable with the very script the release uses
@@ -29,7 +30,7 @@ jobs:
29
30
  # Intel macOS is deliberately absent: those runners are gone, and
30
31
  # the arm64 binary is what a current Mac needs.
31
32
  - target: linux
32
- runs-on: ubuntu-latest
33
+ runs-on: ubuntu-26.04
33
34
  container: almalinux:8
34
35
  - target: macos
35
36
  runs-on: macos-latest
@@ -56,9 +57,17 @@ jobs:
56
57
 
57
58
  test:
58
59
  runs-on: ${{ matrix.os }}
60
+ # The steps are written for bash; on windows-latest the default would be
61
+ # PowerShell. Git for Windows ships bash on every runner.
62
+ defaults:
63
+ run:
64
+ shell: bash
59
65
  strategy:
66
+ # One OS failing must not cancel the others: a Windows-only break should
67
+ # still show whether Linux and macOS pass.
68
+ fail-fast: false
60
69
  matrix:
61
- os: [ubuntu-latest, macos-latest]
70
+ os: [ubuntu-26.04, macos-latest, windows-latest]
62
71
  python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
63
72
 
64
73
  steps:
@@ -70,7 +79,7 @@ jobs:
70
79
  # checkout.
71
80
  fetch-depth: 0
72
81
  - name: Install uv
73
- uses: astral-sh/setup-uv@v7
82
+ uses: astral-sh/setup-uv@v10.3.0
74
83
  with:
75
84
  python-version: ${{ matrix.python-version }}
76
85
  enable-cache: true
@@ -86,17 +95,19 @@ jobs:
86
95
  - name: Run poe all
87
96
  run: uv run poe all
88
97
  - name: Upload coverage reports to Codecov
89
- if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.14'
98
+ if: matrix.os == 'ubuntu-26.04' && matrix.python-version == '3.14'
90
99
  uses: codecov/codecov-action@v7
91
100
  with:
92
101
  token: ${{ secrets.CODECOV_TOKEN }}
93
102
  - name: Upload test results to Codecov
94
103
  if: ${{ !cancelled() }}
95
- uses: codecov/test-results-action@v1
104
+ uses: codecov/codecov-action@v7
96
105
  with:
97
106
  token: ${{ secrets.CODECOV_TOKEN }}
107
+ report_type: test_results
108
+ files: junit.xml
98
109
  - name: SonarCloud Scan
99
- if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.14'
110
+ if: matrix.os == 'ubuntu-26.04' && matrix.python-version == '3.14'
100
111
  uses: SonarSource/sonarqube-scan-action@v8
101
112
  env:
102
113
  SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
@@ -6,6 +6,7 @@ __pycache__
6
6
  *.egg-info/
7
7
  dist/
8
8
  build/
9
+ doc/_build/
9
10
  .pytest_cache/
10
11
  .coverage
11
12
  htmlcov/
@@ -55,9 +55,6 @@ repos:
55
55
 
56
56
 
57
57
  # Configuration
58
- default_language_version:
59
- python: python3.12
60
-
61
58
  # Minimum pre-commit version -- matches the floor pyproject.toml's `lint`
62
59
  # dependency group pins.
63
60
  minimum_pre_commit_version: '4.0.0'
@@ -0,0 +1,19 @@
1
+ # Contributing to git-nested
2
+
3
+ Thank you for helping!
4
+
5
+ - [Development](doc/contributing/development.md): setup, tests, checks and
6
+ commit messages.
7
+ - [Documentation](doc/contributing/documentation.md): how to write and build
8
+ the docs.
9
+ - [Architecture](doc/architecture/index.md): how the code is built.
10
+
11
+ The short version:
12
+
13
+ ```bash
14
+ uv sync # install everything
15
+ uv run poe all # every check CI runs
16
+ ```
17
+
18
+ For security problems, see [SECURITY.md](SECURITY.md). Do not open a public
19
+ issue.
@@ -0,0 +1,133 @@
1
+ Metadata-Version: 2.4
2
+ Name: git-nested
3
+ Version: 1.2.1
4
+ Summary: Git Submodule Alternative
5
+ Author-email: Thorsten Klein <thorsten.klein.git@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/thorsten-klein/git-nested
8
+ Project-URL: Documentation, https://thorsten-klein.github.io/git-nested/
9
+ Project-URL: Repository, https://github.com/thorsten-klein/git-nested
10
+ Project-URL: Issues, https://github.com/thorsten-klein/git-nested/issues
11
+ Keywords: git,nested,submodule,nested
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Topic :: Software Development :: Version Control :: Git
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Requires-Python: >=3.10
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: PyYAML<7,>=6.0
25
+ Dynamic: license-file
26
+
27
+ # git-nested
28
+
29
+ <img src="https://raw.githubusercontent.com/thorsten-klein/git-nested/main/doc/_static/logo.svg" alt="logo" width="500"/>
30
+
31
+ > An alternative to git-submodule and git-subtree for managing nested repositories.
32
+
33
+ [![Test](https://github.com/thorsten-klein/git-nested/actions/workflows/test.yml/badge.svg)](https://github.com/thorsten-klein/git-nested/actions/workflows/test.yml)
34
+ [![Docs](https://github.com/thorsten-klein/git-nested/actions/workflows/docs.yml/badge.svg)](https://thorsten-klein.github.io/git-nested/)
35
+ [![codecov](https://codecov.io/gh/thorsten-klein/git-nested/branch/main/graph/badge.svg)](https://codecov.io/gh/thorsten-klein/git-nested)
36
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=thorsten-klein_git-nested&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=thorsten-klein_git-nested)
37
+ [![PyPI](https://img.shields.io/pypi/v/git-nested.svg)](https://pypi.org/project/git-nested/)
38
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
39
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
40
+
41
+ **📖 Documentation: <https://thorsten-klein.github.io/git-nested/>**
42
+
43
+ ## What is git-nested?
44
+
45
+ git-nested puts another git repository into a folder of your repository.
46
+ The files are ordinary files in ordinary commits. You can still pull new
47
+ changes from the other repository, and push your changes back to it.
48
+
49
+ ```bash
50
+ git nested clone https://github.com/user/lib ext/lib # copy it in
51
+ git nested pull ext/lib # get new upstream changes
52
+ git nested push ext/lib # send your changes back
53
+ git nested status # see where everything stands
54
+ ```
55
+
56
+ A small `.gitnested` file in the folder remembers the URL, the branch and
57
+ the upstream commit. So the commands stay short.
58
+
59
+ ## Why git-nested?
60
+
61
+ - **Self-contained.** Your repository has all files. A plain `git clone`
62
+ gets everything. No access to the other repositories is needed.
63
+ - **Simple.** The commands feel like git.
64
+ - **Clean history.** By default one pull is one commit.
65
+ - **Flexible.** Each branch can have its nested repositories in another
66
+ state.
67
+ - **Safe to try.** Everything is a normal commit. `git reset` undoes it.
68
+
69
+ Only people who pull or push nested repositories need git-nested. See
70
+ [Compared to submodule and subtree](https://github.com/thorsten-klein/git-nested/blob/main/doc/concepts/comparison.md).
71
+
72
+ ## Install
73
+
74
+ ```bash
75
+ pip install git-nested
76
+ ```
77
+
78
+ git 2.23 and Python 3.10 or newer are needed. There is also a
79
+ [standalone executable](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/install.md#standalone-executable)
80
+ that needs no Python. See [Install git-nested](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/install.md)
81
+ for all ways, shell completion and the manual page.
82
+
83
+ ## Documentation
84
+
85
+ The full documentation is in [`doc/`](https://github.com/thorsten-klein/git-nested/blob/main/doc/README.md), and online at
86
+ <https://thorsten-klein.github.io/git-nested/>.
87
+
88
+ - [About git-nested](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/index.md)
89
+ - [git-nested in 5 minutes](https://github.com/thorsten-klein/git-nested/blob/main/doc/quickstart/05-minutes.md)
90
+ - [Everyday tasks](https://github.com/thorsten-klein/git-nested/blob/main/doc/quickstart/everyday.md)
91
+ - [How it works](https://github.com/thorsten-klein/git-nested/blob/main/doc/concepts/how-it-works.md)
92
+ - [Command reference](https://github.com/thorsten-klein/git-nested/blob/main/doc/cli/index.md)
93
+ - [The `.gitnested` file](https://github.com/thorsten-klein/git-nested/blob/main/doc/configuration/gitnested-file.md)
94
+ - [Guides](https://github.com/thorsten-klein/git-nested/blob/main/doc/README.md#guides): conflicts, partial upstreams, pins,
95
+ submodules and more
96
+
97
+ Help on the command line:
98
+
99
+ ```bash
100
+ git nested --help # the manual page
101
+ git nested pull --help # one command: what it does, its options, examples
102
+ ```
103
+
104
+ ## Contributing
105
+
106
+ Pull requests are welcome. See [Development](https://github.com/thorsten-klein/git-nested/blob/main/doc/contributing/development.md)
107
+ for the setup and the checks. The short version:
108
+
109
+ ```bash
110
+ uv sync # install everything
111
+ uv run poe all # every check CI runs
112
+ ```
113
+
114
+ Report security problems as described in [SECURITY.md](https://github.com/thorsten-klein/git-nested/blob/main/SECURITY.md).
115
+
116
+ ## Authors
117
+
118
+ **git-nested:**
119
+ - **Thorsten Klein** - Python rewrite and enhancements
120
+
121
+ **Original [git-subrepo](https://github.com/ingydotnet/git-subrepo) authors:**
122
+ - **Ingy döt Net** - Original concept and implementation
123
+ - **Magnus Carlsson** - Contributor
124
+ - **Austin Morgan** - Contributor
125
+
126
+ ## License
127
+
128
+ MIT. See [LICENSE](https://github.com/thorsten-klein/git-nested/blob/main/LICENSE).
129
+
130
+ ## Acknowledgments
131
+
132
+ This project is based on [git-subrepo](https://github.com/ingydotnet/git-subrepo) by Ingy döt Net.
133
+ git-nested is a Python rewrite with some modified features and improvements.
@@ -0,0 +1,107 @@
1
+ # git-nested
2
+
3
+ <img src="https://raw.githubusercontent.com/thorsten-klein/git-nested/main/doc/_static/logo.svg" alt="logo" width="500"/>
4
+
5
+ > An alternative to git-submodule and git-subtree for managing nested repositories.
6
+
7
+ [![Test](https://github.com/thorsten-klein/git-nested/actions/workflows/test.yml/badge.svg)](https://github.com/thorsten-klein/git-nested/actions/workflows/test.yml)
8
+ [![Docs](https://github.com/thorsten-klein/git-nested/actions/workflows/docs.yml/badge.svg)](https://thorsten-klein.github.io/git-nested/)
9
+ [![codecov](https://codecov.io/gh/thorsten-klein/git-nested/branch/main/graph/badge.svg)](https://codecov.io/gh/thorsten-klein/git-nested)
10
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=thorsten-klein_git-nested&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=thorsten-klein_git-nested)
11
+ [![PyPI](https://img.shields.io/pypi/v/git-nested.svg)](https://pypi.org/project/git-nested/)
12
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
13
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
14
+
15
+ **📖 Documentation: <https://thorsten-klein.github.io/git-nested/>**
16
+
17
+ ## What is git-nested?
18
+
19
+ git-nested puts another git repository into a folder of your repository.
20
+ The files are ordinary files in ordinary commits. You can still pull new
21
+ changes from the other repository, and push your changes back to it.
22
+
23
+ ```bash
24
+ git nested clone https://github.com/user/lib ext/lib # copy it in
25
+ git nested pull ext/lib # get new upstream changes
26
+ git nested push ext/lib # send your changes back
27
+ git nested status # see where everything stands
28
+ ```
29
+
30
+ A small `.gitnested` file in the folder remembers the URL, the branch and
31
+ the upstream commit. So the commands stay short.
32
+
33
+ ## Why git-nested?
34
+
35
+ - **Self-contained.** Your repository has all files. A plain `git clone`
36
+ gets everything. No access to the other repositories is needed.
37
+ - **Simple.** The commands feel like git.
38
+ - **Clean history.** By default one pull is one commit.
39
+ - **Flexible.** Each branch can have its nested repositories in another
40
+ state.
41
+ - **Safe to try.** Everything is a normal commit. `git reset` undoes it.
42
+
43
+ Only people who pull or push nested repositories need git-nested. See
44
+ [Compared to submodule and subtree](https://github.com/thorsten-klein/git-nested/blob/main/doc/concepts/comparison.md).
45
+
46
+ ## Install
47
+
48
+ ```bash
49
+ pip install git-nested
50
+ ```
51
+
52
+ git 2.23 and Python 3.10 or newer are needed. There is also a
53
+ [standalone executable](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/install.md#standalone-executable)
54
+ that needs no Python. See [Install git-nested](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/install.md)
55
+ for all ways, shell completion and the manual page.
56
+
57
+ ## Documentation
58
+
59
+ The full documentation is in [`doc/`](https://github.com/thorsten-klein/git-nested/blob/main/doc/README.md), and online at
60
+ <https://thorsten-klein.github.io/git-nested/>.
61
+
62
+ - [About git-nested](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/index.md)
63
+ - [git-nested in 5 minutes](https://github.com/thorsten-klein/git-nested/blob/main/doc/quickstart/05-minutes.md)
64
+ - [Everyday tasks](https://github.com/thorsten-klein/git-nested/blob/main/doc/quickstart/everyday.md)
65
+ - [How it works](https://github.com/thorsten-klein/git-nested/blob/main/doc/concepts/how-it-works.md)
66
+ - [Command reference](https://github.com/thorsten-klein/git-nested/blob/main/doc/cli/index.md)
67
+ - [The `.gitnested` file](https://github.com/thorsten-klein/git-nested/blob/main/doc/configuration/gitnested-file.md)
68
+ - [Guides](https://github.com/thorsten-klein/git-nested/blob/main/doc/README.md#guides): conflicts, partial upstreams, pins,
69
+ submodules and more
70
+
71
+ Help on the command line:
72
+
73
+ ```bash
74
+ git nested --help # the manual page
75
+ git nested pull --help # one command: what it does, its options, examples
76
+ ```
77
+
78
+ ## Contributing
79
+
80
+ Pull requests are welcome. See [Development](https://github.com/thorsten-klein/git-nested/blob/main/doc/contributing/development.md)
81
+ for the setup and the checks. The short version:
82
+
83
+ ```bash
84
+ uv sync # install everything
85
+ uv run poe all # every check CI runs
86
+ ```
87
+
88
+ Report security problems as described in [SECURITY.md](https://github.com/thorsten-klein/git-nested/blob/main/SECURITY.md).
89
+
90
+ ## Authors
91
+
92
+ **git-nested:**
93
+ - **Thorsten Klein** - Python rewrite and enhancements
94
+
95
+ **Original [git-subrepo](https://github.com/ingydotnet/git-subrepo) authors:**
96
+ - **Ingy döt Net** - Original concept and implementation
97
+ - **Magnus Carlsson** - Contributor
98
+ - **Austin Morgan** - Contributor
99
+
100
+ ## License
101
+
102
+ MIT. See [LICENSE](https://github.com/thorsten-klein/git-nested/blob/main/LICENSE).
103
+
104
+ ## Acknowledgments
105
+
106
+ This project is based on [git-subrepo](https://github.com/ingydotnet/git-subrepo) by Ingy döt Net.
107
+ git-nested is a Python rewrite with some modified features and improvements.
@@ -0,0 +1,62 @@
1
+ # git-nested documentation
2
+
3
+ This folder is the full documentation of git-nested. You can read it here
4
+ on GitHub, or as a website at <https://thorsten-klein.github.io/git-nested/>.
5
+
6
+ ## Introduction
7
+
8
+ - **[`introduction/index.md`](introduction/index.md)**: what git-nested is
9
+ and which problem it solves.
10
+ - **[`introduction/install.md`](introduction/install.md)**: all ways to
11
+ install it.
12
+
13
+ ## Quickstart
14
+
15
+ - **[`quickstart/05-minutes.md`](quickstart/05-minutes.md)**: a hands-on
16
+ walk through with two local repositories.
17
+ - **[`quickstart/everyday.md`](quickstart/everyday.md)**: the commands you
18
+ need most days.
19
+
20
+ ## Concepts
21
+
22
+ - **[`concepts/glossary.md`](concepts/glossary.md)**: every word git-nested
23
+ uses, in short.
24
+ - **[`concepts/how-it-works.md`](concepts/how-it-works.md)**: what happens
25
+ inside a clone, a pull and a push.
26
+ - **[`concepts/comparison.md`](concepts/comparison.md)**: git-nested next to
27
+ git submodule and git subtree.
28
+
29
+ ## `git nested` command
30
+
31
+ - **[`cli/index.md`](cli/index.md)**: the options all commands share, and a
32
+ list of all commands. Each command has its own page in [`cli/`](cli/).
33
+ - **[`cli/environment-variables.md`](cli/environment-variables.md)**: the
34
+ environment variables git-nested reads.
35
+
36
+ ## Configuration
37
+
38
+ - **[`configuration/gitnested-file.md`](configuration/gitnested-file.md)**:
39
+ every field of the `.gitnested` file.
40
+ - **[`configuration/examples.md`](configuration/examples.md)**: how
41
+ `.gitnested` looks in common cases, in YAML and TOML.
42
+ - **[`configuration/git-config.md`](configuration/git-config.md)**: the
43
+ `git config` settings git-nested reads and writes.
44
+
45
+ ## Guides
46
+
47
+ - **[`guides/`](guides/)**: one page per task, such as resolving conflicts,
48
+ nesting a part of upstream or pinning a release.
49
+
50
+ ## Architecture
51
+
52
+ - **[`architecture/index.md`](architecture/index.md)**: how the code is
53
+ built.
54
+ - **[`architecture/diagrams.md`](architecture/diagrams.md)**: the git
55
+ commands each command runs.
56
+
57
+ ## Contributing
58
+
59
+ - **[`contributing/development.md`](contributing/development.md)**: how to
60
+ work on git-nested.
61
+ - **[`contributing/documentation.md`](contributing/documentation.md)**: how
62
+ to write and build these docs.