From owner-freebsd-git@freebsd.org Thu Sep 24 20:53:28 2020 Return-Path: Delivered-To: freebsd-git@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 32CD43E04BA for ; Thu, 24 Sep 2020 20:53:28 +0000 (UTC) (envelope-from brooks@spindle.one-eyed-alien.net) Received: from mailman.nyi.freebsd.org (unknown [127.0.1.3]) by mx1.freebsd.org (Postfix) with ESMTP id 4By6hR6KQ0z4DQR for ; Thu, 24 Sep 2020 20:53:27 +0000 (UTC) (envelope-from brooks@spindle.one-eyed-alien.net) Received: by mailman.nyi.freebsd.org (Postfix) id D72193E0441; Thu, 24 Sep 2020 20:53:27 +0000 (UTC) Delivered-To: git@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D6E383E063B for ; Thu, 24 Sep 2020 20:53:27 +0000 (UTC) (envelope-from brooks@spindle.one-eyed-alien.net) Received: from spindle.one-eyed-alien.net (spindle.one-eyed-alien.net [199.48.129.229]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4By6hR45j3z4DBq for ; Thu, 24 Sep 2020 20:53:27 +0000 (UTC) (envelope-from brooks@spindle.one-eyed-alien.net) Received: by spindle.one-eyed-alien.net (Postfix, from userid 3001) id 488523C0199; Thu, 24 Sep 2020 20:53:26 +0000 (UTC) Date: Thu, 24 Sep 2020 20:53:26 +0000 From: Brooks Davis To: git@freebsd.org Subject: Re: Question on (my) workflow migration svn -> git Message-ID: <20200924205326.GB64154@spindle.one-eyed-alien.net> References: <20200924201715.GR1390@albert.catwhisker.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="5I6of5zJg18YgZEa" Content-Disposition: inline In-Reply-To: <20200924201715.GR1390@albert.catwhisker.org> User-Agent: Mutt/1.9.4 (2018-02-28) X-Rspamd-Queue-Id: 4By6hR45j3z4DBq X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:36236, ipnet:199.48.128.0/22, country:US] X-BeenThere: freebsd-git@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: Discussion of git use in the FreeBSD project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Sep 2020 20:53:28 -0000 --5I6of5zJg18YgZEa Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Sep 24, 2020 at 01:17:15PM -0700, David Wolfskill wrote: > The migration (of my workflow) from cvs to svn was more "cosmetic" > than anything else -- the data store changed and the commands > changed, but the underlying thought processes behind what I was > doing stayed pretty much the same. >=20 > I have no idea if that will be the case for svn -> git, so I'm > putting this out for comments and, perhaps, some useful advice from > folks who are more familiar with git than I am. >=20 > Please note: I am not a FreeBSD committer. I have no desire (let > alone requirement) to cause changes to the FreeBSD code base to > show up with my fingerprints on them. >=20 > Details on the below-described workflow may be found at > http://www.catwhisker.org/~david/FreeBSD/upgrade.html; the current > state of things may be seen at > http://www.catwhisker.org/~david/FreeBSD/history/ (in case either > of those is of interest). >=20 > TL; DR: I sync private local mirrors, update working copies, then make > the running systems match the working copies. >=20 > Details: > I have a couple of machines that I consider "development" machines; > one is the laptop that I use for day-to-day activities; the other > is a dedicated "build machine" (named "freebeast"). On ecah of > these machines, I perform a daily update of: >=20 > * FreeBSD stable/${head - 1} [currently: 12] > * Locally-installed ports (using the ports "head" branch) > * FreeBSD head >=20 > Perhaps more significantly, I keep the two machines in lock-step, > as my activities on my laptop constitute the bulk of my testing of > what will be installed on my small handful of "production" machines > each Sunday (as they get the most recent snapshot of stable/${head > - 1} that freebeast built Sunday morning). >=20 > To keep them in lock-step, the build machine performs a cron-initiated > "svnsync" to update a local private mirror of the svn repositories > (src, ports, and doc). For the laptop, it depends: >=20 > * If I'm away from home, it also does the same sort of svnsync (at > the same time). > * If I'm home, it waits a couple of minutes, then does an rsync > from the build machine's private local mirror. >=20 > In any case, each of them has a private local mirror that is only > updated by the "mirroring" operation -- I don't commit to it. >=20 > For each of stable/${head - 1}, head, and ports, the appopriate svn > working copy is updated, using the svn repo as a read-only reference. >=20 > Thus (for example), when FreeBSD stable/12 was branched, it was > straightforward for me to "clone" the slice used for head (to a > slice that I was not actively using until then), then use "svn > switch" to change the src working copy to point to stable/12 (vs. > head) -- there would be little substantitiative change, so the > behavior should be quite similar to what I had already experienced > with head. And once I was comfortable with stable/12, I could > "clone" that to overlay the old stable/11 slice. >=20 > (I've been doing this -- well, substitute a few references to cvs > inplace of the svn ones for early days -- since around FreeBSD 3.x > (I'm pretty sure I skipped 5.x, though). And it's been working > pretty well for me so far. I've evn been able to point out an > occasional breakage now and then.) >=20 > So: Is doing something ... similar ... to the above feasible using > git (vs. svn)? And if so, may I have a pointer or two to get me > started? Because it's not at all obvious to me how to accomplish > it. (E.g., in my use of git so far, the notions of "repository" > and "working copy" seem to be conflated, which does not lead to > warm and fuzzy feelings on my part.) To continue having the local mirror of the git repo you could use `git clone --bare ` to download a copy and not checkout out a work tree. I believe your daily updates updates would just be `git fetch`, but I haven't worked with bare repos much. You could then do a local clone of that (at the cost of two complete copies of FreeBSD history). Your laptop situation is more complicated, but I think I see how it could work. You'd initially clone from your local buildbox's mirror=20 with something like `git clone ssh://freebeast/path/to/freebsd/repo`. You'd then checkout out whatever branch you wanted and update with `git pull`. To handle the away scenario you have two choices, you can change your url of your remote branch to point to upstream freebsd and update as usual or your could add a second remote (e.g. freebsd vs the default origin) and perform a "fast-foward" merge from the corresponding branch on that remote to your working branch. This would look something like the following (totally untested with made up branch names) example: git clone ssh://freebeast/path/to/freebsd/repo freebsd cd freebsd git remote add freebsd git checkout stable/12 So long as you don't commit any local changes your update process at home would look like: cd freebsd git pull To update while away, you'd so something like: cd freebsd git fetch freebsd git merge --ff-only freebsd/stable/12 I don't see a good way to keep a bare repo on the laptop. I hope this give you an idea where to start. -- Brooks --5I6of5zJg18YgZEa Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEcBAEBAgAGBQJfbQdFAAoJEKzQXbSebgfAMOYH/i6EBSY75lZmbPleHjgxtpbt /2z/vnZSu4C4vXV5WBRvMJB1wTcaCjs2XWPH9R0CuIPkiXxiDeQL4OuQ2FMDVPIQ wI+p3ZPJVrVFxdYQz9kvNq0JlnCduIrbaZjigQhAsyn5i1TK0hIzgnSU7ImR1YRW 1qEBkoQTrSxcMqpKBfZIsIQnJJVdi/G7jzdtigSMssWBeXMZeYi2AZ5P8qWabNf5 uHNcxmhO99C9UaWv5fQ6qvKXsHMbLfyIsHgWolwjbe9XlfmM04qdibxRUlQdZo5H Wj5YNNbmZ4hnZy8w42mHNWCViyInFlEyxNLiu5s858oDaEIG9pq36TXJKIuxtmU= =7/rP -----END PGP SIGNATURE----- --5I6of5zJg18YgZEa--