Subject: Re: Use of Git with local folders

From: Junio C Hamano <[email-masked]>
Date: Sat, 27 Apr 2024 10:14:41 -0700

Beat Bolli <[email-masked]> writes:

> What would work in my opinion is this, if I understand you correctly:
>
> 1. In the Git repo of day 1, remove all files except for the .git
> folder. This is to make sure ...
> 4. Continue from step 1 for each remaining day.
>
> This will result in one repository that has one commit per day. Going
> forward, you'd probably want to commit more often so that your commits
> comprise a meaningful unit of work instead of arbitrary day
> boundaries.

Hmph, perhaps I am misunderstanding things, but I didn't read in the
original or the follow-up from the OP any wish to "squash" a day's
worth of activities into a single commit each.

Let me make sure what I understood from the follow-up from the OP is
not too far away from the reality.  I thought the day's activity is

 * The whole "repository + working tree" from day (N-1) is copied
   into a new "repository + working tree" for day N, to let the user
   to play in. Then the user hacks away, creating commits on top of
   the HEAD.

So there may be a directory structure

 - FBustamante/
   - Day-01/
     - .git/
     - COPYING
     - ...
   - Day-02/
     - .git/
     - COPYING
   ...
   - Day-10/
     - .git/
     - COPYING
     - ...

but Day-10/.git has ALL the history for everything.  Day-10/.git
is a superset of Day-09/.git, which in turn is a superset of
Day-08/.git, etc. all the way down to Day-01/.git/.

If that is the case, and if the end state of each day needs to be
given a "label" so that it is easily discoverable, then what I would
do would be something like:

    $ cd FBustamante
    $ cp -a Day-10 ALL

to first prepare an exact copy of Day-10 in ALL, and then

    $ for d in Day-??
      do
	rev=$(git -C "$d" rev-parse HEAD)
	git -C ALL tag "$d" "$rev"
      done

to go in to each day's repository to grab its HEAD, and make a tag
for that commit in the ALL repository.

Then doing the usual things like

    $ cd ALL
    $ git log Day-01
    $ git log Day-02..Day-04

should give us what happend on the first day, what happened on the
third and fourth day, etc., as expected.