git: a0358e3d5184 - main - Synch index of contrib/bc with what is in workdir after cloning.

Cy Schubert Cy.Schubert at cschubert.com
Thu Apr 29 17:45:29 UTC 2021


In message <20210429172122.1751663f at bsd64.grem.de>, Michael Gmelin writes:
> 
>
>
> On Thu, 29 Apr 2021 07:55:58 -0700
> Cy Schubert <Cy.Schubert at cschubert.com> wrote:
>
> > In message <20210429162959.16662d66 at bsd64.grem.de>, Michael Gmelin
> > writes:
> > > 
> > >
> > >
> > > On Thu, 29 Apr 2021 06:53:18 -0700
> > > Cy Schubert <Cy.Schubert at cschubert.com> wrote:
> > >  
> > > > In message <202104291234.13TCYk5K092776 at gitrepo.freebsd.org>,
> > > > Michael Gmelin wr
> > > > ites:  
> > > > > The branch main has been updated by grembo (ports committer):
> > > > >
> > > > > URL:
> > > > > https://cgit.FreeBSD.org/src/commit/?id=a0358e3d5184950b4316f105eb292
> cba
> > > > > fdea208b
> > > > >
> > > > > commit a0358e3d5184950b4316f105eb292cbafdea208b
> > > > > Author:     Michael Gmelin <grembo at FreeBSD.org>
> > > > > AuthorDate: 2021-04-29 12:29:04 +0000
> > > > > Commit:     Michael Gmelin <grembo at FreeBSD.org>
> > > > > CommitDate: 2021-04-29 12:33:56 +0000
> > > > >
> > > > >     Synch index of contrib/bc with what is in workdir after
> > > > > cloning. 
> > > > >     From a workdir perspective this should be a no-op.
> > > > >     See also:
> > > > >     https://lists.freebsd.org/pipermail/freebsd-current/2021-April/07
> 9569
> > > > >  
> > > .htm  
> > > > > l
> > > > > ---
> > > > >  contrib/bc/bc.vcxproj          | 554
> > > > > ++++++++++++++++++++------------------- --
> > > > >  contrib/bc/bc.vcxproj.filters  | 362
> > > > > +++++++++++++-------------- contrib/bc/bcl.vcxproj         |
> > > > > 320 ++++++++++++------------ contrib/bc/bcl.vcxproj.filters |
> > > > > 190 +++++++------- 4 files changed, 713 insertions(+), 713
> > > > > deletions(-) 
> > > > 
> > > > Whatever was done here I cannot rebase from main to my local
> > > > branches. The files remain modified. The only recourse so far was
> > > > to delete the local branch and start over. I've done this to one
> > > > inconsequential branch so far but hopefully someone can suggest a
> > > > solution.  
> > >
> > > Can you show an example of how this fails for you (especially the
> > > error messages)?  
> > 
> > slippy$ git pull -r --all
> > Fetching freebsd
> > remote: Enumerating objects: 9, done.
> > remote: Counting objects: 100% (9/9), done.
> > remote: Compressing objects: 100% (9/9), done.
> > remote: Total 9 (delta 3), reused 0 (delta 0), pack-reused 0
> > Unpacking objects: 100% (9/9), 12.42 KiB | 111.00 KiB/s, done.
> > From https://git.freebsd.org/src
> >    59b3b210a69e..d87ee7b97fe8  stable/13  -> freebsd/stable/13
> > Already up to date.
> > slippy$ git co komquats
> > Switched to branch 'komquats'
> > slippy$ git st
> > On branch komquats
> > 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) modified:   contrib/bc/bc.vcxproj
> > 	modified:   contrib/bc/bc.vcxproj.filters
> > 	modified:   contrib/bc/bcl.vcxproj
> > 	modified:   contrib/bc/bcl.vcxproj.filters
> > 
> > Untracked files:
> >   (use "git add <file>..." to include in what will be committed)
> > 	sys/i386/conf/IPFILTER
> > 	usr.sbin/ufdformat/
> > 
> > no changes added to commit (use "git add" and/or "git commit -a")
> > slippy$ git rebase main
> > error: cannot rebase: You have unstaged changes.
> > error: Please commit or stash them.
> > slippy$ git stash push -m foobar
> > Saved working directory and index state On komquats: foobar
> > slippy$ git rebase main
> > error: cannot rebase: You have unstaged changes.
> > error: Please commit or stash them.
> > slippy$ git st
> > On branch komquats
> > 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) modified:   contrib/bc/bc.vcxproj
> > 	modified:   contrib/bc/bc.vcxproj.filters
> > 	modified:   contrib/bc/bcl.vcxproj
> > 	modified:   contrib/bc/bcl.vcxproj.filters
> > 
> > Untracked files:
> >   (use "git add <file>..." to include in what will be committed)
> > 	sys/i386/conf/IPFILTER
> > 	usr.sbin/ufdformat/
> > 
> > no changes added to commit (use "git add" and/or "git commit -a")
> > slippy$ git stash push -m foobar
> > Saved working directory and index state On komquats: foobar
> > slippy$ git st
> > On branch komquats
> > 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) modified:   contrib/bc/bc.vcxproj
> > 	modified:   contrib/bc/bc.vcxproj.filters
> > 	modified:   contrib/bc/bcl.vcxproj
> > 	modified:   contrib/bc/bcl.vcxproj.filters
> > 
> > Untracked files:
> >   (use "git add <file>..." to include in what will be committed)
> > 	sys/i386/conf/IPFILTER
> > 	usr.sbin/ufdformat/
> > 
> > no changes added to commit (use "git add" and/or "git commit -a")
> > slippy$ 
> > 
> > rm the files, switch branch to main, rebase again, remove the branch,
> > and start over was the only solution.
> > 
> > So far this affected only one branch. My other branches are so far 
> > unaffected.
> > 
> > As no other branch is affected it appears this was local to this one 
> > branch. The branch is (was) approximately four months old. Recreating
> > it, which wasn't difficult, resolved the issue.
> > 
> > This is the first time I've had any git problems of this nature here
> > at FreeBSD. I've (we've) had many at $JOB because of git-lfs, causing
> > similar looking issues. But that's a whole different kettle of fish.
> > (I'm the only one at $JOB who uses git on a UNIX-like system while
> > everyone else uses Visual Studio.)
> > 
> > >  
> > > > 
> > > > git restore the files, git rm the files, rm the files, git stash
> > > > push, all don't remove them from the branch following rebase. And
> > > > subsequent rebase to main will fail. main is ok though.
> > > > 
> > > > What is it that you did to sync the index?  
> > >
> > > Like in the mail thread linked in the git comment, theoretically a
> > > noop:
> > >
> > >   git clone https://git@repo.freebsd.org/src.git
> > >   cd src
> > >   touch contrib/bc/*vcx*
> > >   git commit -a
> > >   git push
> > >
> > > It's a problem caused by .gitattributes being checked in after the
> > > *vcx* files were checked in (again, see the email thread and "man
> > > 1 gitattributes").
> > >
> > > If it was for me, I would remove the .gitattributes eol specs, they
> > > shouldn't be necessary for our purposes.  
> > 
> > It's probably growing pains.
> > 
> > It appears only one branch, probably not surprisingly my most used
> > branch, was the only one affected.
> > 
>
> Hi Cy,
>
> To add more details and an explanation of what you experienced:
>
> The bc*vcx* project files were first checked in on April 6th in
> 7e5c51e523, containing CRLF line breaks.
>
> Back then, the attributes were:
>
>   $ git ls-files --eol contrib/bc/bc.vcxproj
>   i/crlf  w/crlf  attr/                   contrib/bc/bc.vcxproj
>
> Now, in 8ea9013512 the .gitattributes file was added, containing:
>
>   *.vcxproj eol=crlf
>   *.vcxproj.filters eol=crlf
>   *.sln eol= crlf
>
> This implicitly changed the the files to being "text":
>
>   $ git ls-files --eol contrib/bc/bc.vcxproj
>   i/crlf  w/crlf  attr/text eol=crlf      contrib/bc/bc.vcxproj
>
> But the checked-in files still had CRLF in it (which is incompatible
> with being text).
>
> This introduced problems to the repo as described in
> https://lists.freebsd.org/pipermail/freebsd-current/2021-April/079569.html
> (basically, as soon as the files are touched, they appear as changed).
>
> You can find a good description of this general problem here:
> https://marc.info/?l=git&m=154484903528621&w=2
>
> I'm not sure what a real solution to fix history would look like
> - technically I guess that the files should have been renormalized
> before committing when .gitattributes was added.
>
> As a workaround, adding this line to .git/info/attributes works:
> contrib/bc/bc*.vcx* -text
>
> This should allow you to merge your various branches without issues.
>
> Best
> Michael
>
> p.s. @Cy to demonstrate the original problem, try:
>
>   git checkout a4b5f7ba3e
>   touch contrib/bc/*vcx*
>   git status -s
>
> This shows:
>
>   $ git status -s
>    M contrib/bc/bc.vcxproj
>    M contrib/bc/bc.vcxproj.filters
>    M contrib/bc/bcl.vcxproj
>    M contrib/bc/bcl.vcxproj.filters
>
> This might look familiar to you: This is the problem you were seeing
> while rebasing - because these files were affected by my commit, the
> effect is the same as "touch contrib/bc/*vcx*" had above.
>
> When applying the workaround:
>
>   echo "contrib/bc/bc*.vcx* -text" >>.git/info/attributes
>
> the problem disappears:
>
>   $ git status
>   HEAD detached at a4b5f7ba3e9
>   nothing to commit, working tree clean
>
> Note that this is cached, so if you remove the line from
> .git/info/attributes, it stays clean until you touch the files again
> (can be quite confusing).

This recreates the problem (after cloning from a snapshot).

slippy$ cd ../29
slippy$ git st                     
Refresh index: 100% (86556/86556), done.
On branch komquats
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)
	modified:   contrib/bc/bc.vcxproj
	modified:   contrib/bc/bc.vcxproj.filters
	modified:   contrib/bc/bcl.vcxproj
	modified:   contrib/bc/bcl.vcxproj.filters
	modified:   etc/mtree/BSD.var.dist
	modified:   sys/dev/bge/if_bge.c
	modified:   sys/dev/bge/if_bgereg.h
	modified:   sys/geom/geom.h
	modified:   sys/geom/geom_int.h
	modified:   sys/geom/geom_kern.c
	modified:   sys/geom/geom_subr.c

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sys/i386/conf/IPFILTER
	usr.sbin/ufdformat/

no changes added to commit (use "git add" and/or "git commit -a")
slippy$ git st
On branch komquats
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)
	modified:   contrib/bc/bc.vcxproj
	modified:   contrib/bc/bc.vcxproj.filters
	modified:   contrib/bc/bcl.vcxproj
	modified:   contrib/bc/bcl.vcxproj.filters
	modified:   etc/mtree/BSD.var.dist
	modified:   sys/dev/bge/if_bge.c
	modified:   sys/dev/bge/if_bgereg.h
	modified:   sys/geom/geom.h
	modified:   sys/geom/geom_int.h
	modified:   sys/geom/geom_kern.c
	modified:   sys/geom/geom_subr.c

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sys/i386/conf/IPFILTER
	usr.sbin/ufdformat/

no changes added to commit (use "git add" and/or "git commit -a")
slippy$ git restore contrib/bc/bc.vcxproj contrib/bc/bc.vcxproj.filters 
contrib/bc/bcl.vcxproj contrib/bc/bcl.vcxproj.filters
slippy$ git st
On branch komquats
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)
	modified:   etc/mtree/BSD.var.dist
	modified:   sys/dev/bge/if_bge.c
	modified:   sys/dev/bge/if_bgereg.h
	modified:   sys/geom/geom.h
	modified:   sys/geom/geom_int.h
	modified:   sys/geom/geom_kern.c
	modified:   sys/geom/geom_subr.c

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sys/i386/conf/IPFILTER
	usr.sbin/ufdformat/

no changes added to commit (use "git add" and/or "git commit -a")
slippy$ git stash list    
stash@{0}: On komquats: usermod6
stash@{1}: On main: usermods5
stash@{2}: On komquats: usermods4
stash@{3}: On komquats: usermods3
stash@{4}: On komquats: usermods2
stash@{5}: On komquats: usermods
slippy$ git stash push -m _buildsys
Saved working directory and index state On komquats: _buildsys
slippy$ git br
* komquats
  main
slippy$ git co main
Switched to branch 'main'
Your branch is up to date with 'freebsd/main'.
slippy$ git pull -r --all
Fetching freebsd
remote: Enumerating objects: 35, done.
remote: Counting objects: 100% (35/35), done.
remote: Total 144 (delta 34), reused 34 (delta 34), pack-reused 109
Receiving objects: 100% (144/144), 99.01 KiB | 450.00 KiB/s, done.
Resolving deltas: 100% (86/86), completed with 19 local objects.
>From https://git.freebsd.org/src
   a4b5f7ba3e9b..420d30f5bdbf  main       -> freebsd/main
   1a34afa9541e..aa4eb2089751  stable/13  -> freebsd/stable/13
Updating a4b5f7ba3e9b..420d30f5bdbf
Fast-forward
 contrib/bc/bc.vcxproj          | 554 ++++++++++++++++++++------------------
---
 contrib/bc/bc.vcxproj.filters  | 362 +++++++++++++--------------
 contrib/bc/bcl.vcxproj         | 320 ++++++++++++------------
 contrib/bc/bcl.vcxproj.filters | 190 +++++++-------
 release/arm/armv7.conf         |   8 +
 share/man/man9/kasan.9         |  22 +-
 share/mk/src.libnames.mk       |   3 -
 sys/amd64/amd64/pmap.c         |   2 +-
 sys/dev/ipmi/ipmi_isa.c        |   4 +
 sys/dev/ipmi/ipmi_pci.c        |   4 +
 sys/dev/ipmi/ipmi_smbios.c     |  19 +-
 sys/dev/ipmi/ipmi_smbus.c      |   4 +
 sys/kern/subr_asan.c           |  10 +-
 sys/netpfil/pf/pf_nv.c         |   8 +-
 sys/sys/asan.h                 |   2 +-
 15 files changed, 776 insertions(+), 736 deletions(-)
 create mode 100644 release/arm/armv7.conf
slippy$ git br
  komquats
* main
slippy$ git co komquats
Switched to branch 'komquats'
slippy$ git rebase main
error: cannot rebase: You have unstaged changes.
error: Please commit or stash them.
slippy$ git st
On branch komquats
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)
	modified:   contrib/bc/bc.vcxproj
	modified:   contrib/bc/bc.vcxproj.filters
	modified:   contrib/bc/bcl.vcxproj
	modified:   contrib/bc/bcl.vcxproj.filters

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sys/i386/conf/IPFILTER
	usr.sbin/ufdformat/

no changes added to commit (use "git add" and/or "git commit -a")
slippy$                

Going back in time through each daily snapshot, my April 26 0230U snapshot 
first exhibited the problem.

My remediation efforts are below:

slippy$ git st
On branch komquats
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)
	modified:   contrib/bc/bc.vcxproj
	modified:   contrib/bc/bc.vcxproj.filters
	modified:   contrib/bc/bcl.vcxproj
	modified:   contrib/bc/bcl.vcxproj.filters

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sys/i386/conf/IPFILTER
	usr.sbin/ufdformat/

no changes added to commit (use "git add" and/or "git commit -a")
slippy$ git br     
* komquats
  main
slippy$ git restore contrib/bc/bc.vcxproj contrib/bc/bc.vcxproj.filters 
contrib/bc/bcl.vcxproj contrib/bc/bcl.vcxproj.filters
slippy$ git st
On branch komquats
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)
	modified:   contrib/bc/bc.vcxproj
	modified:   contrib/bc/bc.vcxproj.filters
	modified:   contrib/bc/bcl.vcxproj
	modified:   contrib/bc/bcl.vcxproj.filters

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sys/i386/conf/IPFILTER
	usr.sbin/ufdformat/

no changes added to commit (use "git add" and/or "git commit -a")
slippy$ git stash push -m borked
Saved working directory and index state On komquats: borked
slippy$ git st
On branch komquats
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)
	modified:   contrib/bc/bc.vcxproj
	modified:   contrib/bc/bc.vcxproj.filters
	modified:   contrib/bc/bcl.vcxproj
	modified:   contrib/bc/bcl.vcxproj.filters

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sys/i386/conf/IPFILTER
	usr.sbin/ufdformat/

no changes added to commit (use "git add" and/or "git commit -a")
slippy$ rm contrib/bc/bc.vcxproj contrib/bc/bc.vcxproj.filters 
contrib/bc/bcl.vcxproj contrib/bc/bcl.vcxproj.filters
slippy$ git st
On branch komquats
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    contrib/bc/bc.vcxproj
	deleted:    contrib/bc/bc.vcxproj.filters
	deleted:    contrib/bc/bcl.vcxproj
	deleted:    contrib/bc/bcl.vcxproj.filters

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sys/i386/conf/IPFILTER
	usr.sbin/ufdformat/

no changes added to commit (use "git add" and/or "git commit -a")
slippy$ git rebase main
error: cannot rebase: You have unstaged changes.
error: Please commit or stash them.
slippy$             


There is no way to move forward except to rm (not git rm but UNIX rm) the 
files. Checkout another branch and blow away the affected branch. With the 
files physically deleted with rm(1) I could switch branches and blow away 
the affected branch. Without this extreme I can't even switch branches.

Lucky for me this branch was a placeholder maintaining a record of what was 
installed on my laptop vs main, so it's easy to blow away and recreate. But 
for people with committed changes to a branch this would be a huge problem.

My other branches which I rebase much less frequently were unaffected.


-- 
Cheers,
Cy Schubert <Cy.Schubert at cschubert.com>
FreeBSD UNIX:  <cy at FreeBSD.org>   Web:  https://FreeBSD.org
NTP:           <cy at nwtime.org>    Web:  https://nwtime.org

	The need of the many outweighs the greed of the few.




More information about the dev-commits-src-all mailing list