Re: Getting /usr/src to match specific git hash?

From: Warner Losh <imp_at_bsdimp.com>
Date: Sun, 24 Jan 2021 18:04:57 -0700
On Sun, Jan 24, 2021 at 3:40 PM Steve Kargl <
sgk_at_troutmask.apl.washington.edu> wrote:

> On Sun, Jan 24, 2021 at 03:22:18PM -0700, Warner Losh wrote:
> > On Sun, Jan 24, 2021, 12:14 PM Steve Kargl <
> sgk_at_troutmask.apl.washington.edu>
> > wrote:
> >
> >>
> >> Any advice on how to jump, say, 4 days ahead of the current
> >> date of the src/ tree?  That is, I have src/ that should
> >> correspond to 24 Dec 2020.  How do I jump to 28 Dec 2020?
> >>
> >
> > You could use git bisect, but as you say, the laundry list is extensive.
> >
> > Git doesn't offer checkout by date, alas. So here's some tools to help
> you
> > out.
> >
> > First, let's get a count of how many commits behind main you are at the
> > moment. Use 'git log --oneline --first-parent HEAD..main | wc' to get a
> > count of the number of commits between what you have checked out and the
> > tip of current. My count is 994, but I just updated, so your count will
> > differ and that's OK.The --first-parent in the git log above is critical,
> > since otherwise a number of commits from vendor merges in the vendor
> > branches will appear in git log's output, throwing the count off).
> >
> > Now, this is 1 month worth of -current. 4 days in the month is about 13%.
> > However, let's keep things simple and step forward 100 commits at a time
> > (which is 10% of 1000). The precise numbers don't matter, but it works
> out
> > well in this case.
> >
> > So, your commit is:
> > % git log -1 3cc0c0d66a0
> > Author: Li-Wen Hsu <lwhsu_at_FreeBSD.org>
> > Date:   Sun Dec 20 02:59:44 2020 +0000
> >
> >     Mark the repository as being converted to Git.
> >
> > which is the last subversion commit. It's also head~994, you can do a
> 'git
> > log -1 main~900' to verify that. So, let's move forward 94 commits. This
> > would be:
> >
> > % git log main~900
> > commit 8d405efd73d3991fe1647f91a2b7c9989dd5f18f
> > Author: Ulrich Sp<C3><B6>rlein <uqs_at_FreeBSD.org>
> > Date:   Wed Dec 23 22:29:34 2020 +0100
> >
> >     Fix newvers.sh to no longer print an outdated SVN rev
> >
> > which is 3 days newer and may be a good place to start:
> >
> > % git checkout main~900
> >
> > and that will move you forward 94 commits. Do it again with main~800, etc
> > to find a spot that's good for you. Not as convenient as giving dates,
> but
> > once you have a count of the number of commits between where you are and
> > head, you can use that number to decide how far forward to go.
> >
> > You can adjust this as needed. If you don't do a git pull during this
> > process (and you likely shouldn't) these numbers will be stable, and a
> lot
> > easier to work with than hashes. I've found I like to move N commits
> rather
> > than N days.
> >
> > Hope this is helpful. Sadly I found no way to say HEAD+50 commits
> directly
> > in git, but maybe one of the more knowledgeable folks on this list can
> give
> > a better hint there.
> >
> > Warner
>
> Thanks for the thorough reply!  After David's response
> I started to think (yes, I should do that more often)
> about the mailing list archive dev-commits-src-main.
> Each subject line starts with, for example,
> "git: 68dc94c7d314 - main -". I assume that the hash
> value is sufficient to grab a src/ up to and including
> the commit.  Will the following
>
> % cd /usr/src                # This is at 3cc0c0d66a0
> % git checkout 68dc94c7d314  # Update to last commit in 2020.
>
> bring the src/ update to 68dc94c7d314 or do
> I need to use 'git pull <some optio> 68dc94c7d314'?
>

Sure. If you can find hashes, then git checkout <hash> does the job.

git pull brings in any changes you don't already have, so unless you've not
updated at all this year, you don't need any kind of pull.

And if you did want to update, might I suggest 'git fetch' which is the
first half of 'git pull' which is 'git fetch' followed by 'git merge'. If
you just do the fetch, you'll not mess up the current branch by mistake...

So for your mental map. The remote has a series of changes (a branch).
There is also a local pointer to somewhere in that branch. git fetch will
pull down the remote changes, but leave the local pointer unaffected. git
merge will update the local repo's pointer to a newer rev.

Warner
Received on Mon Jan 25 2021 - 00:05:11 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:26 UTC