Submodule's .git file contains absolute path when created using 'git clone --recursive'

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Submodule's .git file contains absolute path when created using 'git clone --recursive'

Loet Avramson
Hi,

According to git-clone man page - running 'git clone --recursive' "...is
equivalent to running 'git submodule update --init --recursive' immediately
after the clone is finished...", though I found a little difference between
the two regarding the submodule's .git file:

1. Running 'git clone' and 'git submodule update --init --recursive'
separately will create the .git file in each submodule containing a relative
path to the superproject's .git directory as expected.

2. Running 'git clone --recursive' will create the .git file containing an
*absolute* path to the superproject's .git directory. (as it was expected
using git versions 1.7.8 - 1.7.10 as far as I understand)

Not sure if that's a bug but it got stuff behaving really weird in a specific
usecase on one of our environments. It would be highly appreciated to update
the docs at least.

Thanks.

 -Loet

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [hidden email]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Reply | Threaded
Open this post in threaded view
|

Re: Submodule's .git file contains absolute path when created using 'git clone --recursive'

Junio C Hamano
Loet Avramson <[hidden email]> writes:

> According to git-clone man page - running 'git clone --recursive' "...is
> equivalent to running 'git submodule update --init --recursive' immediately
> after the clone is finished...", though I found a little difference between
> the two regarding the submodule's .git file:
>
> 1. Running 'git clone' and 'git submodule update --init --recursive'
> separately will create the .git file in each submodule containing a relative
> path to the superproject's .git directory as expected.
>
> 2. Running 'git clone --recursive' will create the .git file containing an
> *absolute* path to the superproject's .git directory. (as it was expected
> using git versions 1.7.8 - 1.7.10 as far as I understand)
>
> Not sure if that's a bug but it got stuff behaving really weird in a specific
> usecase on one of our environments. It would be highly appreciated to update
> the docs at least.

If the documentation already says "equivalent" and does not say
"identical", I am not sure if there is anything to update.

In any case, I thought some people are already working to make the
result consistently use relative paths (or was it absolute?), so
this may soon become a non-issue.


--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [hidden email]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Reply | Threaded
Open this post in threaded view
|

Re: Submodule's .git file contains absolute path when created using 'git clone --recursive'

Stefan Beller-4
In reply to this post by Loet Avramson
On Thu, May 5, 2016 at 5:51 AM, Loet Avramson <[hidden email]> wrote:

> Hi,
>
> According to git-clone man page - running 'git clone --recursive' "...is
> equivalent to running 'git submodule update --init --recursive' immediately
> after the clone is finished...", though I found a little difference between
> the two regarding the submodule's .git file:
>
> 1. Running 'git clone' and 'git submodule update --init --recursive'
> separately will create the .git file in each submodule containing a relative
> path to the superproject's .git directory as expected.
>
> 2. Running 'git clone --recursive' will create the .git file containing an
> *absolute* path to the superproject's .git directory. (as it was expected
> using git versions 1.7.8 - 1.7.10 as far as I understand)
>
> Not sure if that's a bug but it got stuff behaving really weird in a specific
> usecase on one of our environments. It would be highly appreciated to update
> the docs at least.

Which version of Git are you using?

See[1] for how clone handles submodules. (It's a call to submodule
update --init --recursive)

There was a bug with recursive submodules in the 2.7 time frame and
that got fixed in [2].

So could you make sure your version of Git contains these fixes?



[1] https://kernel.googlesource.com/pub/scm/git/git/+/master/builtin/clone.c#734
[2] https://kernel.googlesource.com/pub/scm/git/git/+/7307dd898988c79fc687051e783b3cac8488a559
specially https://kernel.googlesource.com/pub/scm/git/git/+/f8eaa0ba98b3bd9cb9035eba184a2d9806d30b27



>
> Thanks.
>
>  -Loet
>
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to [hidden email]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [hidden email]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Reply | Threaded
Open this post in threaded view
|

Re: Submodule's .git file contains absolute path when created using 'git clone --recursive'

Loet Avramson
It happened on 2.8.1, also reproducible on 2.8.2.
Haven't had the time to dive deeper into the code but my guess is that
relative_path() returns different results in those 2 cases or maybe
the way git-submodule.sh handles it.

On Thu, May 5, 2016 at 8:22 PM, Stefan Beller <[hidden email]> wrote:

> On Thu, May 5, 2016 at 5:51 AM, Loet Avramson <[hidden email]> wrote:
>> Hi,
>>
>> According to git-clone man page - running 'git clone --recursive' "...is
>> equivalent to running 'git submodule update --init --recursive' immediately
>> after the clone is finished...", though I found a little difference between
>> the two regarding the submodule's .git file:
>>
>> 1. Running 'git clone' and 'git submodule update --init --recursive'
>> separately will create the .git file in each submodule containing a relative
>> path to the superproject's .git directory as expected.
>>
>> 2. Running 'git clone --recursive' will create the .git file containing an
>> *absolute* path to the superproject's .git directory. (as it was expected
>> using git versions 1.7.8 - 1.7.10 as far as I understand)
>>
>> Not sure if that's a bug but it got stuff behaving really weird in a specific
>> usecase on one of our environments. It would be highly appreciated to update
>> the docs at least.
>
> Which version of Git are you using?
>
> See[1] for how clone handles submodules. (It's a call to submodule
> update --init --recursive)
>
> There was a bug with recursive submodules in the 2.7 time frame and
> that got fixed in [2].
>
> So could you make sure your version of Git contains these fixes?
>
>
>
> [1] https://kernel.googlesource.com/pub/scm/git/git/+/master/builtin/clone.c#734
> [2] https://kernel.googlesource.com/pub/scm/git/git/+/7307dd898988c79fc687051e783b3cac8488a559
> specially https://kernel.googlesource.com/pub/scm/git/git/+/f8eaa0ba98b3bd9cb9035eba184a2d9806d30b27
>
>
>
>>
>> Thanks.
>>
>>  -Loet
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe git" in
>> the body of a message to [hidden email]
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [hidden email]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Reply | Threaded
Open this post in threaded view
|

Re: Submodule's .git file contains absolute path when created using 'git clone --recursive'

Stefan Beller-4
On Thu, May 5, 2016 at 12:20 PM, Loet Avramson <[hidden email]> wrote:
> It happened on 2.8.1, also reproducible on 2.8.2.
> Haven't had the time to dive deeper into the code but my guess is that
> relative_path() returns different results in those 2 cases or maybe
> the way git-submodule.sh handles it.
>

Then you found a new bug, congratulations. ;)
Thanks for reporting.

The shell script uses relative_path() only for displaying paths,
not for writing them to the .git file.

it really boils down to different environments
"git submodule update --init --recursive" is called from
(either manually or from `git clone`).

Apart from that there are no immediate bells ringing,
are you doing any weird stuff with the file system (soft/hard
links) ?

Thanks,
Stefan
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [hidden email]
More majordomo info at  http://vger.kernel.org/majordomo-info.html