2013-02-16 108 views
0

我想用git尝试一些东西,我不想在工作存储库中搞乱任何东西。复制Git裸回购更改日志?

为了让事情安全起见,我制作了一份裸露的回购协议副本,我从这个回购协议以及此回购协议中准备完成所有推送和标记。我用:

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

虽然我明白一个可以撤消坏的提交和诸如此类的东西,我不想离开所有这些还原提交回购,我也不想做任何重构,因此我的愿望,只是从一个重复的裸仓库工作。

的问题是,我执行以下命令:

git diff --name-only [email protected]{"5 day ago"} master 

,并取回:

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

原来的回购,这是我不想碰,确实有其人的文件5天前修改。

如果我在复制的回购库上执行git log,这些5天前更改的记录仍然存在。

这是怎么回事?

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

更新1

我意识到我是不准确的我的问题。我已经运行:从生产

git diff --name-only [email protected]{"5 day ago"} 

目录:

git clone copy_of_original.git clone_of_copy 

回答

1

@{5 days ago}语法依赖于reflog的信息,因为 在下面引用的git-rev-parse文档部分中进行了说明。 重述日志本地存储库,并且永远不会通过克隆,获取或推送进行传输。这不是git log显示的信息,除非使用-g--walk-reflogs选项。

裸仓库通常不保留引用日志,因此版本库 的副本也不会有这些信息。

<refname>@{<date>}, e.g. [email protected]{yesterday}, [email protected]{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. 
+0

然后,如果我做一个'git pull'在我的本地副本的存储库,将运行'git diff --name-only master @ {“5天前”}'使用我做'git pull'的日期而不是当人们提交时提交? – EMiller 2013-02-16 02:37:18

+0

'@ {time}'从不使用提交时间。没有一种方法可以在一般情况下工作,因为历史记录中可能有多个分支,并且提交并不总是按日期顺序(无论是因为重新安排提交还是某个人的时钟设置不正确)。 – qqx 2013-02-16 02:40:09

+0

但是没有办法可靠地查询主服务器中的任何文件是否因为一段时间而通过合并或提交进行更新? – EMiller 2013-02-16 02:48:35

0

每个克隆包括库的完整副本(在的情况下,你有一个分支,硕士),里面的。 git目录。每个副本独立于其他副本,并通过本地提交进行修改,或从其他存储库中提取。

所以递归副本是完全没问题的。

至于你所看到的,你需要提供更多的细节和更完整的命令列表。

0

如果克隆,只有的东西一部分被复制,如果你副本,您有原始资料库的相同版本。这适用于git;可以备份和恢复等