git-nested 1.1.1__tar.gz → 1.2.0__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.
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/workflows/build-binary.yml +5 -3
- git_nested-1.2.0/.github/workflows/docs.yml +64 -0
- git_nested-1.2.0/.github/workflows/prune-artifacts.yml +57 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/workflows/publish.yml +3 -3
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/workflows/release-binary.yml +3 -3
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/workflows/test-binary.yml +2 -2
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/workflows/test.yml +22 -11
- {git_nested-1.1.1 → git_nested-1.2.0}/.gitignore +1 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.pre-commit-config.yaml +0 -3
- git_nested-1.2.0/CONTRIBUTING.md +19 -0
- git_nested-1.2.0/PKG-INFO +131 -0
- git_nested-1.2.0/README.md +105 -0
- git_nested-1.2.0/doc/README.md +60 -0
- git_nested-1.2.0/doc/_static/custom.css +102 -0
- git_nested-1.2.0/doc/_static/custom.js +40 -0
- git_nested-1.2.0/doc/_templates/layout.html +19 -0
- git_nested-1.2.0/doc/architecture/diagrams.md +860 -0
- git_nested-1.2.0/doc/architecture/index.md +127 -0
- git_nested-1.2.0/doc/cli/branch.md +94 -0
- git_nested-1.2.0/doc/cli/clean.md +53 -0
- git_nested-1.2.0/doc/cli/clone.md +121 -0
- git_nested-1.2.0/doc/cli/commit.md +53 -0
- git_nested-1.2.0/doc/cli/completion.md +47 -0
- git_nested-1.2.0/doc/cli/config.md +69 -0
- git_nested-1.2.0/doc/cli/diff.md +54 -0
- git_nested-1.2.0/doc/cli/environment-variables.md +19 -0
- git_nested-1.2.0/doc/cli/fetch.md +59 -0
- git_nested-1.2.0/doc/cli/index.md +139 -0
- git_nested-1.2.0/doc/cli/init.md +103 -0
- git_nested-1.2.0/doc/cli/pull.md +130 -0
- git_nested-1.2.0/doc/cli/push.md +141 -0
- git_nested-1.2.0/doc/cli/repair.md +54 -0
- git_nested-1.2.0/doc/cli/run.md +42 -0
- git_nested-1.2.0/doc/cli/status.md +87 -0
- git_nested-1.2.0/doc/cli/version.md +29 -0
- git_nested-1.2.0/doc/concepts/comparison.md +63 -0
- git_nested-1.2.0/doc/concepts/glossary.md +81 -0
- git_nested-1.2.0/doc/concepts/how-it-works.md +163 -0
- git_nested-1.2.0/doc/conf.py +119 -0
- git_nested-1.2.0/doc/configuration/git-config.md +43 -0
- git_nested-1.2.0/doc/configuration/gitnested-file.md +137 -0
- git_nested-1.2.0/doc/contributing/development.md +116 -0
- git_nested-1.2.0/doc/contributing/documentation.md +81 -0
- git_nested-1.2.0/doc/guides/adopt.md +45 -0
- git_nested-1.2.0/doc/guides/conflicts.md +83 -0
- git_nested-1.2.0/doc/guides/hooks-and-signing.md +47 -0
- git_nested-1.2.0/doc/guides/many.md +79 -0
- git_nested-1.2.0/doc/guides/nested-in-nested.md +55 -0
- git_nested-1.2.0/doc/guides/partial.md +66 -0
- git_nested-1.2.0/doc/guides/pin.md +53 -0
- git_nested-1.2.0/doc/guides/squash-merges.md +54 -0
- git_nested-1.2.0/doc/guides/submodules.md +49 -0
- git_nested-1.2.0/doc/index.md +185 -0
- git_nested-1.2.0/doc/introduction/index.md +69 -0
- git_nested-1.2.0/doc/introduction/install.md +158 -0
- git_nested-1.2.0/doc/quickstart/05-minutes.md +222 -0
- git_nested-1.2.0/doc/quickstart/everyday.md +105 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/man/man1/git-nested.1 +62 -1
- {git_nested-1.1.1 → git_nested-1.2.0}/pyproject.toml +26 -4
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/__init__.py +0 -6
- git_nested-1.2.0/src/git_nested/_compat.py +49 -0
- git_nested-1.2.0/src/git_nested/checks.py +95 -0
- git_nested-1.2.0/src/git_nested/cli/app.py +80 -0
- git_nested-1.2.0/src/git_nested/cli/location.py +108 -0
- git_nested-1.2.0/src/git_nested/cli/parser.py +154 -0
- git_nested-1.2.0/src/git_nested/cli/setup.py +77 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/cli/spec.py +201 -14
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/commands/__init__.py +4 -0
- git_nested-1.2.0/src/git_nested/commands/branch.py +133 -0
- git_nested-1.2.0/src/git_nested/commands/clean.py +81 -0
- git_nested-1.2.0/src/git_nested/commands/clone.py +231 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/commands/commit.py +10 -19
- git_nested-1.2.0/src/git_nested/commands/config.py +68 -0
- git_nested-1.2.0/src/git_nested/commands/diff.py +33 -0
- git_nested-1.2.0/src/git_nested/commands/fetch.py +78 -0
- git_nested-1.2.0/src/git_nested/commands/init.py +104 -0
- git_nested-1.2.0/src/git_nested/commands/pull.py +247 -0
- git_nested-1.2.0/src/git_nested/commands/push.py +282 -0
- git_nested-1.2.0/src/git_nested/commands/repair.py +53 -0
- git_nested-1.2.0/src/git_nested/commands/run.py +36 -0
- git_nested-1.2.0/src/git_nested/commands/status.py +145 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/completion/__init__.py +20 -52
- git_nested-1.2.0/src/git_nested/content.py +162 -0
- git_nested-1.2.0/src/git_nested/discovery.py +102 -0
- git_nested-1.2.0/src/git_nested/filters.py +117 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/git.py +29 -30
- git_nested-1.2.0/src/git_nested/gitfile.py +147 -0
- git_nested-1.2.0/src/git_nested/history.py +353 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/messages.py +36 -20
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/models.py +48 -24
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/output.py +47 -8
- git_nested-1.2.0/src/git_nested/refs.py +111 -0
- git_nested-1.2.0/src/git_nested/submodules.py +58 -0
- git_nested-1.2.0/src/git_nested/worktree.py +74 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/yamlio.py +6 -3
- git_nested-1.2.0/src/git_nested.egg-info/PKG-INFO +131 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested.egg-info/SOURCES.txt +62 -3
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested.egg-info/scm_file_list.json +62 -3
- git_nested-1.2.0/src/git_nested.egg-info/scm_version.json +8 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/conftest.py +59 -8
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/scenarios/test_extraction.py +4 -4
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/scenarios/test_filemode.py +24 -7
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/scenarios/test_filter.py +69 -15
- git_nested-1.2.0/tests/e2e/test_branch.py +577 -0
- git_nested-1.2.0/tests/e2e/test_clean.py +94 -0
- git_nested-1.2.0/tests/e2e/test_clone.py +261 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_commit.py +25 -4
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_completion.py +39 -16
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_config.py +23 -3
- git_nested-1.2.0/tests/e2e/test_detached.py +21 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_diff.py +27 -15
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_encode.py +16 -9
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_error.py +31 -27
- git_nested-1.2.0/tests/e2e/test_exclude.py +75 -0
- git_nested-1.2.0/tests/e2e/test_fetch.py +60 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_gitignore.py +2 -2
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_init.py +52 -3
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_nested_in_nested.py +73 -20
- git_nested-1.2.0/tests/e2e/test_non_ascii.py +24 -0
- git_nested-1.2.0/tests/e2e/test_pin.py +51 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_pull.py +214 -30
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_push.py +353 -20
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_rebase.py +7 -14
- git_nested-1.2.0/tests/e2e/test_reclone.py +141 -0
- git_nested-1.2.0/tests/e2e/test_repair.py +196 -0
- git_nested-1.2.0/tests/e2e/test_run.py +73 -0
- git_nested-1.2.0/tests/e2e/test_signing.py +42 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_status.py +53 -16
- git_nested-1.2.0/tests/e2e/test_subdirectory.py +160 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_submodule.py +4 -1
- git_nested-1.2.0/tests/e2e/test_submodules.py +123 -0
- git_nested-1.2.0/tests/e2e/test_upstream_path.py +64 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/unit/fakes.py +0 -4
- git_nested-1.2.0/tests/unit/test_adopt.py +145 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/unit/test_command.py +62 -24
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/unit/test_completion_engine.py +24 -13
- git_nested-1.2.0/tests/unit/test_docs.py +98 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/unit/test_helpers.py +95 -54
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/unit/test_logging.py +56 -18
- git_nested-1.2.0/tests/unit/test_repo_business.py +568 -0
- git_nested-1.2.0/uv.lock +2020 -0
- git_nested-1.1.1/CONTRIBUTING.md +0 -95
- git_nested-1.1.1/PKG-INFO +0 -506
- git_nested-1.1.1/README.md +0 -480
- git_nested-1.1.1/docs/diagrams.md +0 -578
- git_nested-1.1.1/src/git_nested/_compat.py +0 -32
- git_nested-1.1.1/src/git_nested/checks.py +0 -104
- git_nested-1.1.1/src/git_nested/cli/app.py +0 -109
- git_nested-1.1.1/src/git_nested/cli/parser.py +0 -170
- git_nested-1.1.1/src/git_nested/cli/setup.py +0 -103
- git_nested-1.1.1/src/git_nested/commands/branch.py +0 -37
- git_nested-1.1.1/src/git_nested/commands/clean.py +0 -55
- git_nested-1.1.1/src/git_nested/commands/clone.py +0 -160
- git_nested-1.1.1/src/git_nested/commands/config.py +0 -104
- git_nested-1.1.1/src/git_nested/commands/diff.py +0 -53
- git_nested-1.1.1/src/git_nested/commands/fetch.py +0 -49
- git_nested-1.1.1/src/git_nested/commands/init.py +0 -81
- git_nested-1.1.1/src/git_nested/commands/pull.py +0 -234
- git_nested-1.1.1/src/git_nested/commands/push.py +0 -329
- git_nested-1.1.1/src/git_nested/commands/status.py +0 -184
- git_nested-1.1.1/src/git_nested/content.py +0 -199
- git_nested-1.1.1/src/git_nested/discovery.py +0 -76
- git_nested-1.1.1/src/git_nested/filters.py +0 -164
- git_nested-1.1.1/src/git_nested/gitfile.py +0 -194
- git_nested-1.1.1/src/git_nested/history.py +0 -224
- git_nested-1.1.1/src/git_nested/refs.py +0 -58
- git_nested-1.1.1/src/git_nested/repo.py +0 -56
- git_nested-1.1.1/src/git_nested/worktree.py +0 -40
- git_nested-1.1.1/src/git_nested.egg-info/PKG-INFO +0 -506
- git_nested-1.1.1/src/git_nested.egg-info/scm_version.json +0 -8
- git_nested-1.1.1/tests/e2e/test_branch.py +0 -300
- git_nested-1.1.1/tests/e2e/test_clean.py +0 -32
- git_nested-1.1.1/tests/e2e/test_clone.py +0 -114
- git_nested-1.1.1/tests/e2e/test_fetch.py +0 -33
- git_nested-1.1.1/tests/e2e/test_reclone.py +0 -36
- git_nested-1.1.1/tests/unit/test_docs.py +0 -39
- git_nested-1.1.1/tests/unit/test_facade.py +0 -97
- git_nested-1.1.1/tests/unit/test_repo_business.py +0 -469
- git_nested-1.1.1/uv.lock +0 -1491
- {git_nested-1.1.1 → git_nested-1.2.0}/.codecov.yml +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.fish.rc +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.gitattributes +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/CODEOWNERS +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/dependabot.yml +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.github/release.yml +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/.rc +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/LICENSE +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/SECURITY.md +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/bin/git-nested +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/scripts/create-python-exe.sh +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/setup.cfg +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/sonar-project.properties +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/__main__.py +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/_version.py +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/cli/__init__.py +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/cli/main.py +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/commands/completion.py +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/commands/version.py +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/completion/scripts.py +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/constants.py +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/errors.py +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested/py.typed +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested.egg-info/dependency_links.txt +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested.egg-info/entry_points.txt +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested.egg-info/requires.txt +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/src/git_nested.egg-info/top_level.txt +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/tests/e2e/test_version.py +0 -0
- {git_nested-1.1.1 → git_nested-1.2.0}/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-
|
|
26
|
+
description: 'Runner to build on -- ubuntu-26.04, macos-latest, windows-latest'
|
|
27
27
|
type: string
|
|
28
28
|
required: false
|
|
29
|
-
default: ubuntu-
|
|
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-
|
|
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,64 @@
|
|
|
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 it also publishes the
|
|
5
|
+
# site to the gh_pages branch, which GitHub Pages serves.
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [main]
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: ['**']
|
|
11
|
+
# by hand: 'Run workflow' in the Actions tab, or `gh workflow run docs.yml`
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
|
16
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
build:
|
|
20
|
+
runs-on: ubuntu-26.04
|
|
21
|
+
steps:
|
|
22
|
+
- name: Checkout code
|
|
23
|
+
uses: actions/checkout@v7
|
|
24
|
+
with:
|
|
25
|
+
# doc/conf.py shows the version from `git describe`, which needs the tags.
|
|
26
|
+
fetch-depth: 0
|
|
27
|
+
- name: Install uv
|
|
28
|
+
uses: astral-sh/setup-uv@v10.3.0
|
|
29
|
+
with:
|
|
30
|
+
python-version: '3.14'
|
|
31
|
+
enable-cache: true
|
|
32
|
+
- name: Setup project
|
|
33
|
+
run: uv sync --frozen
|
|
34
|
+
- name: Build docs
|
|
35
|
+
run: uv run poe docs
|
|
36
|
+
- name: Upload docs
|
|
37
|
+
if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
|
|
38
|
+
uses: actions/upload-artifact@v7
|
|
39
|
+
with:
|
|
40
|
+
name: docs-html
|
|
41
|
+
path: doc/_build/html
|
|
42
|
+
include-hidden-files: true
|
|
43
|
+
|
|
44
|
+
# A job of its own, so only this one can write to the repository.
|
|
45
|
+
# Only main is published, also when the workflow is started by hand.
|
|
46
|
+
publish:
|
|
47
|
+
if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
|
|
48
|
+
needs: build
|
|
49
|
+
runs-on: ubuntu-26.04
|
|
50
|
+
permissions:
|
|
51
|
+
contents: write
|
|
52
|
+
steps:
|
|
53
|
+
- name: Download docs
|
|
54
|
+
uses: actions/download-artifact@v8
|
|
55
|
+
with:
|
|
56
|
+
name: docs-html
|
|
57
|
+
path: site
|
|
58
|
+
- name: Publish docs
|
|
59
|
+
uses: peaceiris/actions-gh-pages@v4
|
|
60
|
+
with:
|
|
61
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
62
|
+
publish_branch: gh_pages
|
|
63
|
+
publish_dir: site
|
|
64
|
+
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-
|
|
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@
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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@
|
|
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
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
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.
|
|
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-
|
|
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-
|
|
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@
|
|
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-
|
|
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/
|
|
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-
|
|
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 }}
|
|
@@ -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,131 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: git-nested
|
|
3
|
+
Version: 1.2.0
|
|
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
|
+
> An alternative to git-submodule and git-subtree for managing nested repositories.
|
|
30
|
+
|
|
31
|
+
[](https://github.com/thorsten-klein/git-nested/actions/workflows/test.yml)
|
|
32
|
+
[](https://thorsten-klein.github.io/git-nested/)
|
|
33
|
+
[](https://codecov.io/gh/thorsten-klein/git-nested)
|
|
34
|
+
[](https://sonarcloud.io/summary/new_code?id=thorsten-klein_git-nested)
|
|
35
|
+
[](https://pypi.org/project/git-nested/)
|
|
36
|
+
[](https://opensource.org/licenses/MIT)
|
|
37
|
+
[](https://www.python.org/downloads/)
|
|
38
|
+
|
|
39
|
+
**📖 Documentation: <https://thorsten-klein.github.io/git-nested/>**
|
|
40
|
+
|
|
41
|
+
## What is git-nested?
|
|
42
|
+
|
|
43
|
+
git-nested puts another git repository into a folder of your repository.
|
|
44
|
+
The files are ordinary files in ordinary commits. You can still pull new
|
|
45
|
+
changes from the other repository, and push your changes back to it.
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
git nested clone https://github.com/user/lib ext/lib # copy it in
|
|
49
|
+
git nested pull ext/lib # get new upstream changes
|
|
50
|
+
git nested push ext/lib # send your changes back
|
|
51
|
+
git nested status # see where everything stands
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
A small `.gitnested` file in the folder remembers the URL, the branch and
|
|
55
|
+
the upstream commit. So the commands stay short.
|
|
56
|
+
|
|
57
|
+
## Why git-nested?
|
|
58
|
+
|
|
59
|
+
- **Self-contained.** Your repository has all files. A plain `git clone`
|
|
60
|
+
gets everything. No access to the other repositories is needed.
|
|
61
|
+
- **Simple.** The commands feel like git.
|
|
62
|
+
- **Clean history.** By default one pull is one commit.
|
|
63
|
+
- **Flexible.** Each branch can have its nested repositories in another
|
|
64
|
+
state.
|
|
65
|
+
- **Safe to try.** Everything is a normal commit. `git reset` undoes it.
|
|
66
|
+
|
|
67
|
+
Only people who pull or push nested repositories need git-nested. See
|
|
68
|
+
[Compared to submodule and subtree](https://github.com/thorsten-klein/git-nested/blob/main/doc/concepts/comparison.md).
|
|
69
|
+
|
|
70
|
+
## Install
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pip install git-nested
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
git 2.23 and Python 3.10 or newer are needed. There is also a
|
|
77
|
+
[standalone executable](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/install.md#standalone-executable)
|
|
78
|
+
that needs no Python. See [Install git-nested](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/install.md)
|
|
79
|
+
for all ways, shell completion and the manual page.
|
|
80
|
+
|
|
81
|
+
## Documentation
|
|
82
|
+
|
|
83
|
+
The full documentation is in [`doc/`](https://github.com/thorsten-klein/git-nested/blob/main/doc/README.md), and online at
|
|
84
|
+
<https://thorsten-klein.github.io/git-nested/>.
|
|
85
|
+
|
|
86
|
+
- [About git-nested](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/index.md)
|
|
87
|
+
- [git-nested in 5 minutes](https://github.com/thorsten-klein/git-nested/blob/main/doc/quickstart/05-minutes.md)
|
|
88
|
+
- [Everyday tasks](https://github.com/thorsten-klein/git-nested/blob/main/doc/quickstart/everyday.md)
|
|
89
|
+
- [How it works](https://github.com/thorsten-klein/git-nested/blob/main/doc/concepts/how-it-works.md)
|
|
90
|
+
- [Command reference](https://github.com/thorsten-klein/git-nested/blob/main/doc/cli/index.md)
|
|
91
|
+
- [The `.gitnested` file](https://github.com/thorsten-klein/git-nested/blob/main/doc/configuration/gitnested-file.md)
|
|
92
|
+
- [Guides](https://github.com/thorsten-klein/git-nested/blob/main/doc/README.md#guides): conflicts, partial upstreams, pins,
|
|
93
|
+
submodules and more
|
|
94
|
+
|
|
95
|
+
Help on the command line:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
git nested --help # the manual page
|
|
99
|
+
git nested pull --help # one command: what it does, its options, examples
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Contributing
|
|
103
|
+
|
|
104
|
+
Pull requests are welcome. See [Development](https://github.com/thorsten-klein/git-nested/blob/main/doc/contributing/development.md)
|
|
105
|
+
for the setup and the checks. The short version:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
uv sync # install everything
|
|
109
|
+
uv run poe all # every check CI runs
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Report security problems as described in [SECURITY.md](https://github.com/thorsten-klein/git-nested/blob/main/SECURITY.md).
|
|
113
|
+
|
|
114
|
+
## Authors
|
|
115
|
+
|
|
116
|
+
**git-nested:**
|
|
117
|
+
- **Thorsten Klein** - Python rewrite and enhancements
|
|
118
|
+
|
|
119
|
+
**Original [git-subrepo](https://github.com/ingydotnet/git-subrepo) authors:**
|
|
120
|
+
- **Ingy döt Net** - Original concept and implementation
|
|
121
|
+
- **Magnus Carlsson** - Contributor
|
|
122
|
+
- **Austin Morgan** - Contributor
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
|
|
126
|
+
MIT. See [LICENSE](https://github.com/thorsten-klein/git-nested/blob/main/LICENSE).
|
|
127
|
+
|
|
128
|
+
## Acknowledgments
|
|
129
|
+
|
|
130
|
+
This project is based on [git-subrepo](https://github.com/ingydotnet/git-subrepo) by Ingy döt Net.
|
|
131
|
+
git-nested is a Python rewrite with some modified features and improvements.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# git-nested
|
|
2
|
+
|
|
3
|
+
> An alternative to git-submodule and git-subtree for managing nested repositories.
|
|
4
|
+
|
|
5
|
+
[](https://github.com/thorsten-klein/git-nested/actions/workflows/test.yml)
|
|
6
|
+
[](https://thorsten-klein.github.io/git-nested/)
|
|
7
|
+
[](https://codecov.io/gh/thorsten-klein/git-nested)
|
|
8
|
+
[](https://sonarcloud.io/summary/new_code?id=thorsten-klein_git-nested)
|
|
9
|
+
[](https://pypi.org/project/git-nested/)
|
|
10
|
+
[](https://opensource.org/licenses/MIT)
|
|
11
|
+
[](https://www.python.org/downloads/)
|
|
12
|
+
|
|
13
|
+
**📖 Documentation: <https://thorsten-klein.github.io/git-nested/>**
|
|
14
|
+
|
|
15
|
+
## What is git-nested?
|
|
16
|
+
|
|
17
|
+
git-nested puts another git repository into a folder of your repository.
|
|
18
|
+
The files are ordinary files in ordinary commits. You can still pull new
|
|
19
|
+
changes from the other repository, and push your changes back to it.
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
git nested clone https://github.com/user/lib ext/lib # copy it in
|
|
23
|
+
git nested pull ext/lib # get new upstream changes
|
|
24
|
+
git nested push ext/lib # send your changes back
|
|
25
|
+
git nested status # see where everything stands
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
A small `.gitnested` file in the folder remembers the URL, the branch and
|
|
29
|
+
the upstream commit. So the commands stay short.
|
|
30
|
+
|
|
31
|
+
## Why git-nested?
|
|
32
|
+
|
|
33
|
+
- **Self-contained.** Your repository has all files. A plain `git clone`
|
|
34
|
+
gets everything. No access to the other repositories is needed.
|
|
35
|
+
- **Simple.** The commands feel like git.
|
|
36
|
+
- **Clean history.** By default one pull is one commit.
|
|
37
|
+
- **Flexible.** Each branch can have its nested repositories in another
|
|
38
|
+
state.
|
|
39
|
+
- **Safe to try.** Everything is a normal commit. `git reset` undoes it.
|
|
40
|
+
|
|
41
|
+
Only people who pull or push nested repositories need git-nested. See
|
|
42
|
+
[Compared to submodule and subtree](https://github.com/thorsten-klein/git-nested/blob/main/doc/concepts/comparison.md).
|
|
43
|
+
|
|
44
|
+
## Install
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
pip install git-nested
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
git 2.23 and Python 3.10 or newer are needed. There is also a
|
|
51
|
+
[standalone executable](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/install.md#standalone-executable)
|
|
52
|
+
that needs no Python. See [Install git-nested](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/install.md)
|
|
53
|
+
for all ways, shell completion and the manual page.
|
|
54
|
+
|
|
55
|
+
## Documentation
|
|
56
|
+
|
|
57
|
+
The full documentation is in [`doc/`](https://github.com/thorsten-klein/git-nested/blob/main/doc/README.md), and online at
|
|
58
|
+
<https://thorsten-klein.github.io/git-nested/>.
|
|
59
|
+
|
|
60
|
+
- [About git-nested](https://github.com/thorsten-klein/git-nested/blob/main/doc/introduction/index.md)
|
|
61
|
+
- [git-nested in 5 minutes](https://github.com/thorsten-klein/git-nested/blob/main/doc/quickstart/05-minutes.md)
|
|
62
|
+
- [Everyday tasks](https://github.com/thorsten-klein/git-nested/blob/main/doc/quickstart/everyday.md)
|
|
63
|
+
- [How it works](https://github.com/thorsten-klein/git-nested/blob/main/doc/concepts/how-it-works.md)
|
|
64
|
+
- [Command reference](https://github.com/thorsten-klein/git-nested/blob/main/doc/cli/index.md)
|
|
65
|
+
- [The `.gitnested` file](https://github.com/thorsten-klein/git-nested/blob/main/doc/configuration/gitnested-file.md)
|
|
66
|
+
- [Guides](https://github.com/thorsten-klein/git-nested/blob/main/doc/README.md#guides): conflicts, partial upstreams, pins,
|
|
67
|
+
submodules and more
|
|
68
|
+
|
|
69
|
+
Help on the command line:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
git nested --help # the manual page
|
|
73
|
+
git nested pull --help # one command: what it does, its options, examples
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Contributing
|
|
77
|
+
|
|
78
|
+
Pull requests are welcome. See [Development](https://github.com/thorsten-klein/git-nested/blob/main/doc/contributing/development.md)
|
|
79
|
+
for the setup and the checks. The short version:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
uv sync # install everything
|
|
83
|
+
uv run poe all # every check CI runs
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Report security problems as described in [SECURITY.md](https://github.com/thorsten-klein/git-nested/blob/main/SECURITY.md).
|
|
87
|
+
|
|
88
|
+
## Authors
|
|
89
|
+
|
|
90
|
+
**git-nested:**
|
|
91
|
+
- **Thorsten Klein** - Python rewrite and enhancements
|
|
92
|
+
|
|
93
|
+
**Original [git-subrepo](https://github.com/ingydotnet/git-subrepo) authors:**
|
|
94
|
+
- **Ingy döt Net** - Original concept and implementation
|
|
95
|
+
- **Magnus Carlsson** - Contributor
|
|
96
|
+
- **Austin Morgan** - Contributor
|
|
97
|
+
|
|
98
|
+
## License
|
|
99
|
+
|
|
100
|
+
MIT. See [LICENSE](https://github.com/thorsten-klein/git-nested/blob/main/LICENSE).
|
|
101
|
+
|
|
102
|
+
## Acknowledgments
|
|
103
|
+
|
|
104
|
+
This project is based on [git-subrepo](https://github.com/ingydotnet/git-subrepo) by Ingy döt Net.
|
|
105
|
+
git-nested is a Python rewrite with some modified features and improvements.
|
|
@@ -0,0 +1,60 @@
|
|
|
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/git-config.md`](configuration/git-config.md)**: the
|
|
41
|
+
`git config` settings git-nested reads and writes.
|
|
42
|
+
|
|
43
|
+
## Guides
|
|
44
|
+
|
|
45
|
+
- **[`guides/`](guides/)**: one page per task, such as resolving conflicts,
|
|
46
|
+
nesting a part of upstream or pinning a release.
|
|
47
|
+
|
|
48
|
+
## Architecture
|
|
49
|
+
|
|
50
|
+
- **[`architecture/index.md`](architecture/index.md)**: how the code is
|
|
51
|
+
built.
|
|
52
|
+
- **[`architecture/diagrams.md`](architecture/diagrams.md)**: the git
|
|
53
|
+
commands each command runs.
|
|
54
|
+
|
|
55
|
+
## Contributing
|
|
56
|
+
|
|
57
|
+
- **[`contributing/development.md`](contributing/development.md)**: how to
|
|
58
|
+
work on git-nested.
|
|
59
|
+
- **[`contributing/documentation.md`](contributing/documentation.md)**: how
|
|
60
|
+
to write and build these docs.
|