考虑一个在后端使用git的项目管理应用程序。
新版本始终使用git add .
后跟git commit
创建。
出于评估目的,我想要一种方法来获取存储在其中的旧版本项目,使整个目录内容恢复到指定的commit.Also,在评估之后,必须将内容恢复为最新版本。
如何实现这一目标?
额外信息(可能没有必要):它是一个网络应用程序,用于存储在php,远程服务器上运行并通过网络访问的学术项目。
答案 0 :(得分:8)
这是git
:git checkout
的基本功能之一。
$ git checkout branch_or_tag_name
更改您的工作目录与该分支或标记的匹配。
$ git checkout commit_hash
使当前目录反映发生提交时存储库的状态。 (如果你这样做,请小心,你将处于“超级头”模式 - 你不应该修改该状态的文件。)
您还可以简单地为此“评估”创建一个分支,并在一个操作中检查它:
$ git checkout -b evaluation commit_hash
完成后,只需检查以前的分支,然后更新工作目录。
$ git checkout master # or whatever your main branch is.
(如果您不再需要,可能git branch -d evaluation
。)
答案 1 :(得分:3)
如果您希望将文件放在工作目录以外的其他目录中,则另一种解决方案是使用git archive
。
首先,使用git branch
创建你的引用(git中没有任何分支,它们被称为引用,它指向提交,因此指向它背后的所有历史记录):
git branch oldversion <refspec>
请参阅git help branch
了解refspec的内容(SHA1,来自其他refspec的相对“路径”等)。
然后,创建您希望旧文件所在的目录(让我们称之为/path/to/oldstuff
)并使用项目目录中的git archive:
git archive oldversion | tar xvf - -C /path/to/oldstuff
示例:我一直使用最新的Linux内核,并且有一个git存储库以及Greg KH的稳定树。当我想要一个最新的稳定树的树来编译它时,我就是这样做的(这里是稳定的内核3.1.6):
$ cd /usr/src/linux-git
$ su
# git archive --prefix=linux-3.1.6/ v3.1.6 | tar xvf - -C ../