Re: recurse-submodules can remove local changes when switching branches?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Laurence,

> Le 25 mai 2020 à 05:40, Laurence Tratt <laurie@xxxxxxxxx> a écrit :
> 
> If one creates a new repository, makes a new branch, adds a submodule, makes
> local changes to that submodule, then switches to another branch, it seems
> that git can silently remove those local changes.
> 
> Here's an example (the repositories involved are irrelevant other than
> they're small!):
> 
>  $ git clone https://github.com/ltratt/supuner/
>  $ cd supuner
>  $ git submodule add https://github.com/ltratt/extsmail extsmail
>  $ git checkout --recurse-submodules -b b
>  $ git commit -m "add submodule" .
> 
> At this point make a local change to extsmail/README.md and confirm that
> git has noticed that something in the submodule has changed:
> 
>  $ git status
>  On branch b
>  Changes not staged for commit:
>    (use "git add <file>..." to update what will be committed)
>    (use "git restore <file>..." to discard changes in working directory)
>    (commit or discard the untracked or modified content in submodules)
>          modified:   extsmail (modified content)
> 
>  no changes added to commit (use "git add" and/or "git commit -a")
> 
> then change branch (in the supuner repository, not extsmail!):
> 
>  $ git checkout --recurse-submodules master
> 
> The switch of branch succeeds without warning me that I have changes in my
> submodule. But then:
> 
>  $ git status
>  On branch master
>  Your branch is up to date with 'origin/master'.
> 
>  nothing to commit, working tree clean
> 
> My local changes to the submodule have disappeared entirely.

I believe this is the same bug that was reported in 2018 here:
https://lore.kernel.org/git/CAHsG2VT4YB_nf8PrEmrHwK-iY-AQo0VDcvXGVsf8cEYXws4nig@xxxxxxxxxxxxxx/

> 
> Switching back to `b` does not restore my changes:
> 
>  $ git checkout --recurse-submodules b
>  On branch b
>  nothing to commit, working tree clean
> 
> This happens on 2.26.2 and the current master. AFAICS this only happens
> because the master branch does not yet have the submodule registered in it.
> If it does, "checkout --recurse-submodules" maintains my local changes in
> the submodule across the branch switch.

Thanks, this information should be useful for debugging.

Philippe.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux