0

我想用 git 尝试一些东西,我不想在工作存储库中搞砸任何事情。

为了保证事情的安全,我制作了一份我从这个仓库工作的裸仓库的副本,我打算做我所有的推送和标记。我用了:

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

尽管我知道可以撤消错误的提交和诸如此类的东西,但我不想将所有这些还原的提交留在仓库中,也不想进行任何重构,因此我希望只从一个重复的、裸露的仓库中工作。

问题是,我执行以下操作:

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

然后回来:

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

我不想接触的原始仓库确实有 5 天前修改过的文件。

如果我git log在复制的 repo 上执行,这些 5 天前的更改记录都还在。

这里发生了什么?

有没有更好的方法来制作存储库的独立副本?

更新 1

我意识到我的问题不准确。我跑过:

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

在产生的目录中:

git clone copy_of_original.git clone_of_copy
4

3 回答 3

1

@{5 days ago}语法依赖于来自reflog的信息,如下面引用的git-rev-parse文档部分所述。Reflogs 是存储库本地的,永远不会通过克隆、获取或推送来传输。这不是 显示的信息git log,除非使用-gor --walk-reflogs选项。

裸存储库通常不保留引用日志,因此存储库的副本也不会包含该信息。

<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.
于 2013-02-16T02:17:15.810 回答
0

每个克隆都包含存储库的完整副本(在您有一个分支的情况下,master),位于 .git 目录中。每个副本独立于其他副本,并通过本地提交或从其他存储库中提取时进行修改。

因此,递归副本非常好。

至于您看到的内容,您需要提供更多详细信息,以及您运行的更完整的命令列表。

于 2013-02-16T02:12:18.837 回答
0

如果您clone,则只复制部分内容,如果您copy,您将拥有与原始存储库相同的版本。这适用于git; 可以备份和恢复等。

于 2013-02-16T02:46:23.297 回答