You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
submodule update doesn't work with relative submodule paths (in GitPython 2.1.14) #944
When using the git.objects.submodules.base.Submodule.update method (https://gitpython.readthedocs.io/en/stable/reference.html#git.objects.submodule.base.Submodule.update), the git python module seems to fake a git submodule call with git clone. It executes git clone -n --separate-git-dir=<workspace>/.git/modules/<submodule_path> -v <submodule_url> <workspace>/<submodule_path>. This command doesn't work when a submodule is specified as a relative path in the .gitmodules path. For example:
Thanks for posting. Which version of GitPython are you using?
Even though the submodule implementation may not be up to date with what git produces, I remember that some improvements were made in the past which might resolve this issue.
changed the title [-]submodule update doesn't work with relative submodule paths[/-][+]submodule update doesn't work with relative submodule paths (in GitPython 2.1.14)[/+]on Oct 21, 2019
Thanks for your reply! I am closing this issue as it is already resolved.
Interestingly, in the last released version of GitPython with Python 2 compatibility, the submodule improvements should already be present. If you can spot the difference, I would be happy to receive a PR against 2.1.14 that fixes the issue there as well and release 2.1.15.
Sorry, I made a mistake in my setup while I was testing it with python3 and git python version 3.0.3. On version 3.0.3 the relative submodule paths also does not work
When looking trough other issues, I think this issue is the same as issue 730. Is there any reason why gitpython doesn't use the "native" git submodule calls?
If memory serves, back in the days I wanted to have 'smart' submodules, that are easier to handle and to update. For that, a lot of additional logic was added to what constitutes a very own implementation, compatible to git-submodules. In retrospect that turned out to be coming with maintenance costs that are now unaffordable.
Luckily, users can always workaround themselves by using repo.git.submodule(…), which may be enough for most usecases.
I have same trouble.
I written the 'relatives' class, and this class can supply full URL, from origin + relative path to submodule.
But how i can replace path to submodule in Repo object directly?
But how i can replace path to submodule in Repo object directly?
Due to its nature, it is probably read-only. More details could be provided if there is more information on what's you are trying to do and how it's done.
Thanks for sharing. This can probably be rewritten to repo.git.submodule('update', init=True, recursive=True), giving it a bit of an edge over calling popen entirely by hand.
I wasn't able to make it work neither with repo.submodule_update(init=True, recursive=True)
nor repo.git.submodule('update', init=True, recursive=True)
The latter is due to derivation to wrong git command cmdline: git submodule --init --recursive update
I think the takeaway here is that one should avoid GitPython submodules in favor of using reop.git.submodule(…), which uses the git program as one would on the command-line.
Activity
Byron commentedon Oct 19, 2019
Thanks for posting. Which version of GitPython are you using?
Even though the submodule implementation may not be up to date with what
gitproduces, I remember that some improvements were made in the past which might resolve this issue.Genovese-martijn commentedon Oct 21, 2019
Thanks for the feedback, I am using version
2.1.14due to external python2 requirement. The issue is indeed resolved when using version3.0.3.[-]submodule update doesn't work with relative submodule paths[/-][+]submodule update doesn't work with relative submodule paths (in GitPython 2.1.14)[/+]Byron commentedon Oct 21, 2019
Thanks for your reply! I am closing this issue as it is already resolved.
Interestingly, in the last released version of GitPython with Python 2 compatibility, the submodule improvements should already be present. If you can spot the difference, I would be happy to receive a PR against 2.1.14 that fixes the issue there as well and release 2.1.15.
Genovese-martijn commentedon Oct 21, 2019
Sorry, I made a mistake in my setup while I was testing it with python3 and git python version
3.0.3. On version3.0.3the relative submodule paths also does not workFerenc- commentedon Jan 16, 2020
This bug is still present in
3.0.5any chance to increase priority?Byron commentedon Feb 8, 2020
I am afraid there is no priority beyond what people decide to contribute. GitPython is in maintenance mode.
Genovese-martijn commentedon Feb 11, 2020
When looking trough other issues, I think this issue is the same as issue 730. Is there any reason why gitpython doesn't use the "native"
git submodulecalls?Byron commentedon Feb 12, 2020
If memory serves, back in the days I wanted to have 'smart' submodules, that are easier to handle and to update. For that, a lot of additional logic was added to what constitutes a very own implementation, compatible to git-submodules. In retrospect that turned out to be coming with maintenance costs that are now unaffordable.
Luckily, users can always workaround themselves by using
repo.git.submodule(…), which may be enough for most usecases.BlackFIlms commentedon Oct 14, 2021
I have same trouble.
I written the 'relatives' class, and this class can supply full URL, from origin + relative path to submodule.
But how i can replace path to submodule in Repo object directly?
Byron commentedon Oct 14, 2021
Due to its nature, it is probably read-only. More details could be provided if there is more information on what's you are trying to do and how it's done.
atomar94 commentedon Feb 17, 2022
My Workaround
I was able to update my relative submodules with:
repo.git.execute(command=['git', 'submodule', 'update', '--init', '--recursive'])Docs: https://gitpython.readthedocs.io/en/stable/reference.html#git.cmd.Git.execute
GitPython 3.1.26, Python 3.8.10
Byron commentedon Feb 18, 2022
Thanks for sharing. This can probably be rewritten to
repo.git.submodule('update', init=True, recursive=True), giving it a bit of an edge over callingpopenentirely by hand.yvatyan commentedon Mar 14, 2022
I wasn't able to make it work neither with
repo.submodule_update(init=True, recursive=True)nor
repo.git.submodule('update', init=True, recursive=True)The latter is due to derivation to wrong git command
cmdline: git submodule --init --recursive update#944 (comment) solution worked for me.
Git: 2.25.1
GitPython: 3.1.27
Python: 3.8.10
Byron commentedon Mar 15, 2022
Thanks for letting us know.
I think the takeaway here is that one should avoid
GitPythonsubmodules in favor of usingreop.git.submodule(…), which uses thegitprogram as one would on the command-line.