git-archive与cp的区别

3
使用的优势是什么?
git archive master/foo | tar -x -C ~/destination

部署 /foo 的拷贝 从工作副本复制的区别。

cp foo ~/destination/foo

所以,除非有某些原因不想将子目录foo中的所有内容从主分支(master)(或者你正在工作的任何分支)复制过来,使用cp命令部署到[目标]上就足够了。
1个回答

5

git archive 只导出 git 仓库中的项目。而 cp 则会复制指定目录下的所有内容,包括 .git 目录、被 git 忽略的文件等。


我在某种程度上同意第一部分。但是只有一个.git文件夹,它位于foo之外,所以复制foo并不意味着.git文件夹也会被复制...只有foo及其子文件夹会被复制。 - dkinzer
另外,如果我已经将所有内容添加到了上一个提交中(为什么不这样做),那么意味着foo与主分支上的副本完全相同。 - dkinzer
2
你可能不想复制 foo 中的 所有 内容:考虑中间构建产品、编辑器备份文件以及任何其他通常在 .gitignore 文件中的内容。 - Cameron Skinner
@Cameron Skinner,我想这真的是决定性因素。如果我不想从foo复制所有内容,那么使用git-archive更有意义。但否则,cp也同样好用。 - dkinzer
1
@DKinzer: 绝大多数项目都会在它们的.gitignore文件中列出至少一些内容,如构建产品、日志、临时文件、本地数据等等。我认为更普遍的情况是要避免这些文件,但你是对的,如果你不介意它们一起出现,只需复制即可。 - Cascabel
1
git archive 还遵循 export-ignoreexport-subst gitattributes,如果给定提交 ID 或标签 ID,则将提交 ID 存储在全局扩展 pax 标头中(除非请求不这样做)。 - Jakub Narębski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接