从Git获取单个修订版


14

在开发过程中,拥有完整的Git修订历史记录会有很多好处。

但是我们的产品是源代码,我们使用的脚本语言不需要编译或处理,因此Git历史记录成为部署的负担-在我们的示例中,我们在每次更改后都部署了一个干净的虚拟环境,并在其中进行了多次部署一台机器。

有一些方法可以减少历史记录的数量,例如,浅克隆,其效率取决于分支中修订的深度,执行提取操作而不是克隆,但仍然可以从修订中获取历史记录,或者获取完整的历史记录。回购一次,然后在需要时拉回,但是这在磁盘空间方面是浪费的,并且可靠性较差。

有没有没有历史的Git可以得到一个修订版本的方法?


Answers:


16

浅克隆

您确实可以使用以下方法从Git中获得浅表克隆:

git clone --depth=1 <url>

这仍然会克隆存储库,并创建一个.git包含对象的文件夹,文件的大小只会更小(差异取决于您的总文件大小与历史记录大小)。

Git档案

您还可以使用git-archive提取回购的存档:

创建指定格式的存档,其中包含命名树的树结构,并将其写到标准输出中。如果指定,则将其添加到存档中的文件名之前。

示例中,它显示了例如:

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

版本创建压缩的tarball 。

托管Git,存档API

如果您将回购托管在GitHub上,则可以使用其归档API

https://api.github.com/repos/<username>/<repository>/zipball/<commit_hash>

Bitbucket.org具有与此相同的功能:

https://bitbucket.org/<username>/<repository>/get/<branch_name|commit_hash|tag>.zip


7ochem,也许gzip命令需要是gzip -c ....
Romeo Ninov

11

不要部署您的git repo。开发实际的部署方法。即使是简单地将已部署脚本的存档(=在其中仅包含要部署的必需文件来构建工件)打包,也是如此。

即使您浅克隆了源存储库的尖端,在已部署的环境中,您也可能不需要单元测试,文档,整理文件和其他支持的临时工具。

注意:对于真正没有“构建”步骤的脚本语言存储库,发布工件的简单方法是将它们打包在归档文件中,例如tar或rpm。然后,要“部署”,请解压缩归档文件或安装rpm。这样就无需在部署链中使用git工具(并非所有产品服务器都将具有那些dev工具)。


可以问(甚至挑战!)一个答案-这就是Stack Exchange出色的原因:)对于实际上没有“构建”步骤的脚本语言存储库,发布工件的简单方法是打包将它们保存在档案中,例如tar或rpm。然后,要“部署”,请解压缩归档文件或安装rpm。这样就无需在部署链中使用git工具(并非所有产品服务器都将具有这些开发工具)
RubyTuesdayDONO

1
@ Pierre.Vriens是的,您错过了建议归档存档时的建议,即构建一个仅包含要部署的必需文件的工件。就是说,我同意这不是一个高质量的答案,这一点应该扩大。我们在内测和答案应该东东明确
Tensibai

然后,我看不到这会带来比接受的答案更多的东西,如果要指向适合的档案...这只是多余的,您应该编辑以这种方式扩展iMHo
Tensibai,2017年

1
请检查我对您的答案的编辑(仅整合您的有趣评论)。当然,可以随时进行改进/重做,或者如果您根本不喜欢我的编辑,只需回滚即可。顺便说一句:您的评论(=我添加的注释)使我觉得“真的,那么简单吗?再次是我们如何在zOS中完成事情的示例... z 零停机时间 ...”。我认为是时候开始通过类似的评论来质疑更多的问题/答案了……不要挑战我太多……
Pierre.Vriens

我不认为这是一个完整的或模型化的答案,但我没有看到其他人在房间里对大象讲话:如果您使用git“部署”您的项目,那么您“将经历一段糟糕的时光” ;)
RubyTuesdayDONO

6

问题是有没有办法从Git获得单个修订版本的历史吗?

要获得存储库,没有办法,主要是因为没有“修订”。Git存储落实,这是对先前状态的更改。
如果您想在特定的时间点存储库,则必须在此时撤回提交及其所有祖先,否则您将只获得在提交中所做的更改。

为避免混淆:浅克隆是获取所需的历史记录,然后将其截断为可用空间,该树仍由历史记录构成。

对于解决方案,@ 7ochem的答案确实涵盖了它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.