mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
git-submodule.sh - Remove trailing / from URL if found
git clone does not complain if a trailing '/' is included in the origin URL, but doing so causes resolution of a submodule's URL relative to the superproject to fail. Trailing /'s are likely when cloning locally using tab-completion, so the slash may appear in either superproject or submodule URL. So, ignore the trailing slash if it already exists in the superproject's URL, and don't record one for the submodule (which could itself have submodules...). The problem I'm trying to fix is that a number of folks have superprojects checked out where the recorded origin URL has a trailing /, and a submodule has its origin in a directory sitting right next to the superproject on the server. Thus, we have: superproject url = server:/public/super submodoule url = server:/public/sub1 However, in the checked out superproject's .git/config [remote "origin"] url = server:/public/super/ and for similar reasons, the submodule has its URL recorded in .gitmodules as [submodule "sub"] path = submodule1 url = ../sub1/ resolve_relative_url gets the submodule's recorded url as $1, which the caller retrieved from .gitmodules, and retrieves the superprojects origin from .git/config. So in this case resolve_relative_url has that: url = ../sub1/ remoteurl = server:/public/super/ So, without any patch, resolve_relative_url computes the submodule's URL as: server:/public/super/sub1/ rather than server:/public/sub1 In summary, it is essential that resolve_relative_url strip the trailing / from the superproject's url before starting, and beneficial if it assures that the result does not contain a trailing / as the submodule may itself also be a superproject. Signed-off-by: Mark Levedahl <mlevedahl@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
7c69561986
commit
99b120af70
@ -35,7 +35,8 @@ resolve_relative_url ()
|
||||
remote="${remote:-origin}"
|
||||
remoteurl=$(git config "remote.$remote.url") ||
|
||||
die "remote ($remote) does not have a url defined in .git/config"
|
||||
url="${1%/}"
|
||||
url="$1"
|
||||
remoteurl=${remoteurl%/}
|
||||
while test -n "$url"
|
||||
do
|
||||
case "$url" in
|
||||
@ -50,7 +51,7 @@ resolve_relative_url ()
|
||||
break;;
|
||||
esac
|
||||
done
|
||||
echo "$remoteurl/$url"
|
||||
echo "$remoteurl/${url%/}"
|
||||
}
|
||||
|
||||
#
|
||||
|
Loading…
Reference in New Issue
Block a user