Search code examples
gitbackupclonegit-bare

Does copying the Git bare repo change the log?


I'd like to try out a few things with git and I don't want to screw anything up in the working repository.

To try to keep things safe, I've made a copy of the bare repo that I work from and from this repo I am intending to do all my pushes and tagging. I used:

cp --preseve -r original.git copy_of_original.git

Although I understand one can undo bad commits and whatnot, I don't want to leave the repo with all these reverted commits, nor do I want to do any refactoring, hence my desire to just work from a duplicate, bare repository.

The problem is, I execute the following:

git diff --name-only master@{"5 day ago"} master

and get back:

warning: Log for 'master' only goes back to Fri, 15 Feb 2013 20:42:43 -0500.

The original repo, which I don't want to touch, does indeed have files which were modified as of 5 days ago.

If I perform git log on my copied repo, the record of these 5 day old changes are all still there.

What is going on here?

Is there a better way to make an independent copy of the repository?

Update 1

I realized I was imprecise with my question. I had run:

git diff --name-only master@{"5 day ago"}

in the directory produced from:

git clone copy_of_original.git clone_of_copy

Solution

  • The @{5 days ago} syntax relies on information from the reflog, as explained in the section of the git-rev-parse documentation quoted below. Reflogs are local to a repository, and never transferred by clone, fetch or push. This is not the information displayed by git log, unless the -g or --walk-reflogs option is used.

    Bare repositories generally don't keep reflogs, so a copy of the repository wouldn't have that information either.

    <refname>@{<date>}, e.g. master@{yesterday}, HEAD@{5 minutes ago}
        A ref followed by the suffix @ with a date specification enclosed in a brace pair
        (e.g.  {yesterday}, {1 month 2 weeks 3 days 1 hour 1 second ago} or {1979-02-26
        18:30:00}) specifies the value of the ref at a prior point in time. This suffix may
        only be used immediately following a ref name and the ref must have an existing log
        ($GIT_DIR/logs/<ref>). Note that this looks up the state of your local ref at a
        given time; e.g., what was in your local master branch last week. If you want to
        look at commits made during certain times, see --since and --until.