-
-
Notifications
You must be signed in to change notification settings - Fork 987
Comparing changes
Open a pull request
base repository: gitpython-developers/GitPython
base: 3.1.52
head repository: gitpython-developers/GitPython
compare: 3.1.54
- 19 commits
- 18 files changed
- 4 contributors
Commits on Jul 16, 2026
-
feat(submodule): add deinit method to Submodule (#2014)
Mirrors the pattern of `Submodule.add`, `Submodule.update`, and `Submodule.remove` by exposing `git submodule deinit` as a first-class method, so callers no longer need the `repo.git.submodule('deinit', ...)` workaround noted in the issue. The method delegates to `git submodule deinit [--force] -- <path>` via `self.repo.git.submodule`, decorated with `@unbare_repo` to match the other mutating Submodule methods. It unregisters the submodule from `.git/config` and clears the working-tree directory while leaving `.gitmodules` and `.git/modules/<name>` intact, so a later `update()` can re-initialize.Configuration menu - View commit details
-
Copy full SHA for d702d9a - Browse repository at this point
Copy the full SHA d702d9aView commit details -
Configuration menu - View commit details
-
Copy full SHA for 0c0cc8a - Browse repository at this point
Copy the full SHA 0c0cc8aView commit details -
typing: introduce sensible basedpyright defaults
That way it dosesn't all light up immediately in dev mode.
Configuration menu - View commit details
-
Copy full SHA for 6d0b6a4 - Browse repository at this point
Copy the full SHA 6d0b6a4View commit details -
Merge pull request #2129 from mvanhorn/feat/2014-submodule-deinit
feat(submodule): add deinit method to Submodule (#2014)
Configuration menu - View commit details
-
Copy full SHA for e87854b - Browse repository at this point
Copy the full SHA e87854bView commit details -
Merge pull request #2174 from gitpython-developers/basedpyright
typing: introduce sensible basedpyright defaults
Configuration menu - View commit details
-
Copy full SHA for f89e18c - Browse repository at this point
Copy the full SHA f89e18cView commit details -
fix: make
submodule.update()aftersubmodule.deinit()workGit's `submodule deinit` command removes the submodule checkout but retains its repository under the parent repository's `.git/modules` directory. Submodule.update() previously treated the missing checkout as a completely uninitialized submodule and attempted to clone it again. The clone could not reuse the existing module repository, preventing a deinitialized submodule from being initialized again through GitPython. Detect a valid retained repository before entering the clone path. Restore the checkout's `.git` file and the module repository's worktree configuration, reset the retained repository to recreate its index and working tree, and restore the submodule URL in the parent configuration. Continue using the existing clone behavior when no valid retained repository is available. Co-authored-by: Sebastian Thiel <sebastian.thiel@icloud.com>
Configuration menu - View commit details
-
Copy full SHA for b9d82c0 - Browse repository at this point
Copy the full SHA b9d82c0View commit details -
Merge pull request #2175 from gitpython-developers/submodule-deinit-fix
fix: make `submodule.update()` after `submodule.deinit()` work
Configuration menu - View commit details
-
Copy full SHA for 15527ef - Browse repository at this point
Copy the full SHA 15527efView commit details
Commits on Jul 20, 2026
-
Configuration menu - View commit details
-
Copy full SHA for 5bc2560 - Browse repository at this point
Copy the full SHA 5bc2560View commit details -
fix: respect core.hooksPath for commit hooks
Use git rev-parse --git-path when resolving commit hook paths so GitPython follows Git's core.hooksPath configuration.\n\nAdd regression coverage for a pre-commit hook stored in a custom hooks path.\n\nFixes #2083
Configuration menu - View commit details
-
Copy full SHA for 406b98e - Browse repository at this point
Copy the full SHA 406b98eView commit details -
Address review feedback about hook resolution
- Review feedback: resolve core.hooksPath only when configured, avoid an unconditional git rev-parse dependency, and cover relative paths in a non-bare repository. - Read the effective Git configuration directly so unconfigured repositories retain the legacy .git/hooks lookup and configured relative paths resolve from the directory where hooks execute. Exercise both guarantees in the hook tests. - Review feedback: core.hooksPath can point outside index.repo.working_dir, where Path.relative_to() raises on Windows and prevents a valid hook from running. - Build the Bash argument with os.path.relpath so hooks in parent or other absolute locations remain executable. Fall back to the absolute POSIX-form path when Windows cannot form a relative path across drives, and add a focused command-construction regression test.
Configuration menu - View commit details
-
Copy full SHA for 9bc287a - Browse repository at this point
Copy the full SHA 9bc287aView commit details -
Merge pull request #2159 from Siesta0217/fix-core-hooks-path-commit-h…
…ooks Fix commit hooks respecting core.hooksPath
Configuration menu - View commit details
-
Copy full SHA for 354eb2f - Browse repository at this point
Copy the full SHA 354eb2fView commit details -
fix: validate config section delimiters
GHSA-3rp5-jjmw-4wv2 identified that configuration section names could alter the structure of serialized config despite the existing control-character checks. Reject unquoted closing section delimiters across all writer entry points while preserving valid delimiters inside quoted subsections and the existing option-name behavior. Add regression coverage for unsafe plain and quoted-subsection-shaped names as well as a valid quoted subsection. Git baseline: a23bace963d508bd96983cc637131392d3face18. Git config parsing treats an unquoted closing bracket as the end of a basic section header, while its extended form permits brackets inside a quoted subsection and requires a final bracket after the closing quote. Co-authored-by: Sebastian Thiel <sebastian.thiel@icloud.com>
Configuration menu - View commit details
-
Copy full SHA for 1ed1b92 - Browse repository at this point
Copy the full SHA 1ed1b92View commit details -
Merge pull request #2176 from gitpython-developers/fix-config-injection
fix: validate config section delimiters
Configuration menu - View commit details
-
Copy full SHA for 6a5eb6a - Browse repository at this point
Copy the full SHA 6a5eb6aView commit details -
Configuration menu - View commit details
-
Copy full SHA for faf3c09 - Browse repository at this point
Copy the full SHA faf3c09View commit details
Commits on Jul 22, 2026
-
fix: validate split short-option values
<!-- agent --> Single-character keyword arguments are transformed into an option token and a separate value token. The unsafe-option candidate builder only checked the keyword name, allowing an option-like value to bypass guards shared by clone, remote, revision, blame, and archive operations. Include dash-prefixed values only when short options are actually split, including sequence values, while preserving bare values and the non-splitting compatibility path. Git baseline a23bace9 defines clone -n and --upload-pack as distinct options, matching the argv boundary this validation now preserves. Refs GHSA-r9mr-m37c-5fr3. Co-authored-by: Sebastian Thiel <sebastian.thiel@icloud.com>
Configuration menu - View commit details
-
Copy full SHA for e8d0fbf - Browse repository at this point
Copy the full SHA e8d0fbfView commit details -
fix: reject unsafe clone templates
<!-- agent --> Treat git clone --template as unsafe because caller-controlled templates can install hooks that execute during clone. Add regression coverage for both direct option and keyword forms. References GHSA-6p8h-3wgx-97gf. Validated against Git baseline a23bace9. Co-authored-by: Sebastian Thiel <sebastian.thiel@icloud.com>
Configuration menu - View commit details
-
Copy full SHA for ffcb535 - Browse repository at this point
Copy the full SHA ffcb535View commit details -
fix: guard diff output options
<!-- agent --> Reject unsafe diff options before revision parsing or Git invocation so callers cannot write command output to arbitrary filesystem paths. Cover commit and index diffs, including option-like revisions, and preserve an explicit allow_unsafe_options escape hatch. References GHSA-fjr4-x663-mwxc. Validated against Git baseline a23bace9. Co-authored-by: Sebastian Thiel <sebastian.thiel@icloud.com>
Configuration menu - View commit details
-
Copy full SHA for 1d51b89 - Browse repository at this point
Copy the full SHA 1d51b89View commit details -
Merge pull request #2180 from gitpython-developers/single-char-kwarg
Harden unsafe Git option validation
Configuration menu - View commit details
-
Copy full SHA for a4dc70d - Browse repository at this point
Copy the full SHA a4dc70dView commit details -
Configuration menu - View commit details
-
Copy full SHA for e59d9ba - Browse repository at this point
Copy the full SHA e59d9baView commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff 3.1.52...3.1.54