* Submodule using different repository URLs @ 2009-07-13 9:57 Peter Voss 2009-07-13 10:20 ` Santi Béjar 2009-07-13 10:59 ` Johan Herland 0 siblings, 2 replies; 8+ messages in thread From: Peter Voss @ 2009-07-13 9:57 UTC (permalink / raw) To: git Hi, I want to use the git submodule feature to move part of my code to a different repository at github. The issue is that developers should use different repository URLs for the submodule depending on whether they have commit rights or not. At the beginning I was using the public URL to set-up the submodule: git submodule add git://github.com/x/mymodule.git mymodule The issue is that some developers are working behind a firewall that blocks the git protocol. These could only use the git@github.com:x/ mymodule.git URL to get access. But other developers can only go through the public URL git:// github.com/x/mymodule.git. So whatever I use it won't work for everybody. What's the best way to deal with that? Could I set-up different repository URLs for one and the same submodule and use which one is appropriate? Thanks, --Peter ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Submodule using different repository URLs 2009-07-13 9:57 Submodule using different repository URLs Peter Voss @ 2009-07-13 10:20 ` Santi Béjar 2009-07-13 12:04 ` Peter Voss 2009-07-13 10:59 ` Johan Herland 1 sibling, 1 reply; 8+ messages in thread From: Santi Béjar @ 2009-07-13 10:20 UTC (permalink / raw) To: Peter Voss; +Cc: git 2009/7/13 Peter Voss <info@petervoss.org>: > Hi, > > I want to use the git submodule feature to move part of my code to a > different repository at github. > > The issue is that developers should use different repository URLs for the > submodule depending on whether they have commit rights or not. > > At the beginning I was using the public URL to set-up the submodule: > git submodule add git://github.com/x/mymodule.git mymodule > > The issue is that some developers are working behind a firewall that blocks > the git protocol. These could only use the git@github.com:x/mymodule.git URL > to get access. > But other developers can only go through the public URL > git://github.com/x/mymodule.git. So whatever I use it won't work for > everybody. > > What's the best way to deal with that? Could I set-up different repository > URLs for one and the same submodule and use which one is appropriate? After the "git submodule init" you can customize the url. From "man git-submodule": init:: Initialize the submodules, i.e. register each submodule name and url found in .gitmodules into .git/config. The key used in .git/config is `submodule.$name.url`. This command does not alter existing information in .git/config. You can then customize the submodule clone URLs in .git/config for your local setup and proceed to 'git submodule update'; you can also just use 'git submodule update --init' without the explicit 'init' step if you do not intend to customize any submodule locations. You can also use the config url."<actual url base>".insteadOf = <other url base>. See the git-pull manpage for examples. HTH, Santi ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Submodule using different repository URLs 2009-07-13 10:20 ` Santi Béjar @ 2009-07-13 12:04 ` Peter Voss 0 siblings, 0 replies; 8+ messages in thread From: Peter Voss @ 2009-07-13 12:04 UTC (permalink / raw) To: Santi Béjar; +Cc: git Hi Santi, On 13.07.2009, at 12:20, Santi Béjar wrote: > 2009/7/13 Peter Voss <info@petervoss.org>: >> Hi, >> >> I want to use the git submodule feature to move part of my code to a >> different repository at github. >> >> The issue is that developers should use different repository URLs >> for the >> submodule depending on whether they have commit rights or not. >> >> At the beginning I was using the public URL to set-up the submodule: >> git submodule add git://github.com/x/mymodule.git mymodule >> >> The issue is that some developers are working behind a firewall >> that blocks >> the git protocol. These could only use the git@github.com:x/ >> mymodule.git URL >> to get access. >> But other developers can only go through the public URL >> git://github.com/x/mymodule.git. So whatever I use it won't work for >> everybody. >> >> What's the best way to deal with that? Could I set-up different >> repository >> URLs for one and the same submodule and use which one is appropriate? > > After the "git submodule init" you can customize the url. From "man > git-submodule": > > init:: > Initialize the submodules, i.e. register each submodule name > and url found in .gitmodules into .git/config. > The key used in .git/config is `submodule.$name.url`. > This command does not alter existing information in .git/ > config. > You can then customize the submodule clone URLs in .git/config > for your local setup and proceed to 'git submodule update'; > you can also just use 'git submodule update --init' without > the explicit 'init' step if you do not intend to customize > any submodule locations. > > You can also use the config url."<actual url base>".insteadOf = <other > url base>. > See the git-pull manpage for examples. I didn't get the insteadOf config running (maybe I have to update to a more recent version of git). But modifying the URL in .git/config should be a doable approach for us. In order to add the insteadOf section we would have to edit the .git/config file as well, so that doesn't seem to be much better. Thanks for your help, --Peter > HTH, > Santi ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Submodule using different repository URLs 2009-07-13 9:57 Submodule using different repository URLs Peter Voss 2009-07-13 10:20 ` Santi Béjar @ 2009-07-13 10:59 ` Johan Herland 2009-07-13 11:51 ` Peter Voss 1 sibling, 1 reply; 8+ messages in thread From: Johan Herland @ 2009-07-13 10:59 UTC (permalink / raw) To: git; +Cc: Peter Voss On Monday 13 July 2009, Peter Voss wrote: > Hi, > > I want to use the git submodule feature to move part of my code to a > different repository at github. > > The issue is that developers should use different repository URLs for > the submodule depending on whether they have commit rights or not. > > At the beginning I was using the public URL to set-up the submodule: > git submodule add git://github.com/x/mymodule.git mymodule > > The issue is that some developers are working behind a firewall that > blocks the git protocol. These could only use the git@github.com:x/ > mymodule.git URL to get access. > But other developers can only go through the public URL git:// > github.com/x/mymodule.git. So whatever I use it won't work for > everybody. > > What's the best way to deal with that? Could I set-up different > repository URLs for one and the same submodule and use which one is > appropriate? You might be able to pull this off using relative submodule URLs. If the submodule URLs in .gitmodules are relative (i.e. ../foo.git or similar), they will be resolved to absolute URLs using the origin URL of the super-repo. I.e. if you cloned the super-repo from git://github.com/x/mymodule.git, the ../foo.git submodule will be cloned from git://github.com/x/foo.git, and if you cloned from git@github.com:x/mymodule.git, the submodule will be cloned from git@github.com:x/foo.git. Hope this helps, Have fun! :) ...Johan -- Johan Herland, <johan@herland.net> www.herland.net ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Submodule using different repository URLs 2009-07-13 10:59 ` Johan Herland @ 2009-07-13 11:51 ` Peter Voss 2009-07-13 12:28 ` Johan Herland 0 siblings, 1 reply; 8+ messages in thread From: Peter Voss @ 2009-07-13 11:51 UTC (permalink / raw) To: Johan Herland; +Cc: git Hi Johan, On 13.07.2009, at 12:59, Johan Herland wrote: > On Monday 13 July 2009, Peter Voss wrote: >> Hi, >> >> I want to use the git submodule feature to move part of my code to a >> different repository at github. >> >> The issue is that developers should use different repository URLs for >> the submodule depending on whether they have commit rights or not. >> >> At the beginning I was using the public URL to set-up the submodule: >> git submodule add git://github.com/x/mymodule.git mymodule >> >> The issue is that some developers are working behind a firewall that >> blocks the git protocol. These could only use the git@github.com:x/ >> mymodule.git URL to get access. >> But other developers can only go through the public URL git:// >> github.com/x/mymodule.git. So whatever I use it won't work for >> everybody. >> >> What's the best way to deal with that? Could I set-up different >> repository URLs for one and the same submodule and use which one is >> appropriate? > > You might be able to pull this off using relative submodule URLs. If > the > submodule URLs in .gitmodules are relative (i.e. ../foo.git or > similar), they will be resolved to absolute URLs using the origin URL > of the super-repo. I.e. if you cloned the super-repo from > git://github.com/x/mymodule.git, the ../foo.git submodule will be > cloned from git://github.com/x/foo.git, and if you cloned from > git@github.com:x/mymodule.git, the submodule will be cloned from > git@github.com:x/foo.git. That's a good hint. Unfortunately I can't use this to go up 2 directories. I.e. I can't get from git@github.com:xxx/mymodule.git to git@github.com:yyy/foo.git Using the relative URL ../../yyy/foo.git leads to the result: Clone of 'git@github.com:xxx/yyy/foo.git' into submodule path 'foo' failed So I basically cannot replace the xxx part. Anyway, thanks for the hint. --Peter > Hope this helps, > > > Have fun! :) > > ...Johan > > > -- > Johan Herland, <johan@herland.net> > www.herland.net ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Submodule using different repository URLs 2009-07-13 11:51 ` Peter Voss @ 2009-07-13 12:28 ` Johan Herland 2009-07-13 12:43 ` Johan Herland 0 siblings, 1 reply; 8+ messages in thread From: Johan Herland @ 2009-07-13 12:28 UTC (permalink / raw) To: Peter Voss; +Cc: git On Monday 13 July 2009, Peter Voss wrote: > On 13.07.2009, at 12:59, Johan Herland wrote: > > You might be able to pull this off using relative submodule URLs. > > That's a good hint. Unfortunately I can't use this to go up 2 > directories. I.e. I can't get from > git@github.com:xxx/mymodule.git > to > git@github.com:yyy/foo.git > > Using the relative URL ../../yyy/foo.git leads to the result: > Clone of 'git@github.com:xxx/yyy/foo.git' into submodule path 'foo' > failed > > So I basically cannot replace the xxx part. This is due to a small bug in git-submodule.sh. In the resolve_relative_url() function, when repeatedly unwrapping '../'s from $url in the while loop, the line remoteurl="${remoteurl%/*}" removes everything _after_ the last slash, which does not work for the git@github.com:xxx part of your URL. This should be relatively easy to fix, although maybe not as straightforwardly trivial as it might seem at first sight. I don't have the time to look into this now, so feel free to take a stab at it. Have fun! :) ...Johan -- Johan Herland, <johan@herland.net> www.herland.net ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Submodule using different repository URLs 2009-07-13 12:28 ` Johan Herland @ 2009-07-13 12:43 ` Johan Herland 2009-07-13 13:33 ` Peter Voss 0 siblings, 1 reply; 8+ messages in thread From: Johan Herland @ 2009-07-13 12:43 UTC (permalink / raw) To: git; +Cc: Peter Voss On Monday 13 July 2009, Johan Herland wrote: > On Monday 13 July 2009, Peter Voss wrote: > > On 13.07.2009, at 12:59, Johan Herland wrote: > > > You might be able to pull this off using relative submodule URLs. > > > > That's a good hint. Unfortunately I can't use this to go up 2 > > directories. I.e. I can't get from > > git@github.com:xxx/mymodule.git > > to > > git@github.com:yyy/foo.git > > > > Using the relative URL ../../yyy/foo.git leads to the result: > > Clone of 'git@github.com:xxx/yyy/foo.git' into submodule path 'foo' > > failed > > > > So I basically cannot replace the xxx part. > > This is due to a small bug in git-submodule.sh. In the > resolve_relative_url() function, when repeatedly unwrapping '../'s > from $url in the while loop, the line remoteurl="${remoteurl%/*}" > removes everything _after_ the last slash, which does not work for > the git@github.com:xxx part of your URL. > > This should be relatively easy to fix, although maybe not as > straightforwardly trivial as it might seem at first sight. > > I don't have the time to look into this now, so feel free to take a > stab at it. Here's a first stab at it (TOTALLY UNTESTED). Obviously it needs a testcase (typically in t7400-submodule-basic.sh) as well. Have fun! :) ...Johan diff --git a/git-submodule.sh b/git-submodule.sh index ebed711..7d8f7a7 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -27,12 +27,19 @@ resolve_relative_url () die "remote ($remote) does not have a url defined in .git/config" url="$1" remoteurl=${remoteurl%/} + sep="/" while test -n "$url" do case "$url" in ../*) url="${url#../}" - remoteurl="${remoteurl%/*}" + newremoteurl="${remoteurl%/*}" + if test "$newremoteurl" = "$remoteurl" -a "$sep" = "/" + then + newremoteurl="${remoteurl%:*}" + sep=":" + fi + remoteurl="$newremoteurl" ;; ./*) url="${url#./}" @@ -41,7 +48,7 @@ resolve_relative_url () break;; esac done - echo "$remoteurl/${url%/}" + echo "$remoteurl$sep${url%/}" } # -- Johan Herland, <johan@herland.net> www.herland.net ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: Submodule using different repository URLs 2009-07-13 12:43 ` Johan Herland @ 2009-07-13 13:33 ` Peter Voss 0 siblings, 0 replies; 8+ messages in thread From: Peter Voss @ 2009-07-13 13:33 UTC (permalink / raw) To: Johan Herland; +Cc: git Hi Johan, On 13.07.2009, at 14:43, Johan Herland wrote: > On Monday 13 July 2009, Johan Herland wrote: >> On Monday 13 July 2009, Peter Voss wrote: >>> On 13.07.2009, at 12:59, Johan Herland wrote: >>>> You might be able to pull this off using relative submodule URLs. >>> >>> That's a good hint. Unfortunately I can't use this to go up 2 >>> directories. I.e. I can't get from >>> git@github.com:xxx/mymodule.git >>> to >>> git@github.com:yyy/foo.git >>> >>> Using the relative URL ../../yyy/foo.git leads to the result: >>> Clone of 'git@github.com:xxx/yyy/foo.git' into submodule path 'foo' >>> failed >>> >>> So I basically cannot replace the xxx part. >> >> This is due to a small bug in git-submodule.sh. In the >> resolve_relative_url() function, when repeatedly unwrapping '../'s >> from $url in the while loop, the line remoteurl="${remoteurl%/*}" >> removes everything _after_ the last slash, which does not work for >> the git@github.com:xxx part of your URL. >> >> This should be relatively easy to fix, although maybe not as >> straightforwardly trivial as it might seem at first sight. >> >> I don't have the time to look into this now, so feel free to take a >> stab at it. > > Here's a first stab at it (TOTALLY UNTESTED). Obviously it needs a > testcase (typically in t7400-submodule-basic.sh) as well. And I thought you didn't have time. ;-) Thanks for this patch. I will test this out tomorrow. Thanks, --Peter > > > Have fun! :) > > ...Johan > > > diff --git a/git-submodule.sh b/git-submodule.sh > index ebed711..7d8f7a7 100755 > --- a/git-submodule.sh > +++ b/git-submodule.sh > @@ -27,12 +27,19 @@ resolve_relative_url () > die "remote ($remote) does not have a url defined in .git/config" > url="$1" > remoteurl=${remoteurl%/} > + sep="/" > while test -n "$url" > do > case "$url" in > ../*) > url="${url#../}" > - remoteurl="${remoteurl%/*}" > + newremoteurl="${remoteurl%/*}" > + if test "$newremoteurl" = "$remoteurl" -a "$sep" = "/" > + then > + newremoteurl="${remoteurl%:*}" > + sep=":" > + fi > + remoteurl="$newremoteurl" > ;; > ./*) > url="${url#./}" > @@ -41,7 +48,7 @@ resolve_relative_url () > break;; > esac > done > - echo "$remoteurl/${url%/}" > + echo "$remoteurl$sep${url%/}" > } > > # > > > -- > Johan Herland, <johan@herland.net> > www.herland.net ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-07-13 13:33 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-07-13 9:57 Submodule using different repository URLs Peter Voss 2009-07-13 10:20 ` Santi Béjar 2009-07-13 12:04 ` Peter Voss 2009-07-13 10:59 ` Johan Herland 2009-07-13 11:51 ` Peter Voss 2009-07-13 12:28 ` Johan Herland 2009-07-13 12:43 ` Johan Herland 2009-07-13 13:33 ` Peter Voss
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox