【问题标题】:How do I export a specific commit with git-archive?如何使用 git-archive 导出特定提交?
【发布时间】:2012-06-16 14:51:44
【问题描述】:

我之前问过一个类似的问题,但回答得不够充分,所以我想我会在这里再问一次,但提供更多信息。我需要获得不同版本和旧版本的 git 存储库,但我遇到了麻烦。我试过的是

git checkout master~X 

git archive --format zip --output /full/path/to/zipfile.zip master 

git checkout master 


git checkout master~Y 

git archive --format zip --output /full/path/toDifferent/zipfile.zip master 

git checkout master 

解压缩后,它们最终完全相同。我不知道为什么或如何解决它。

【问题讨论】:

  • 试试git archive --format zip --output /full/path/to/zipfile.zip master~X
  • 哦,我想我明白我做错了什么。无论如何感谢您的帮助。
  • @Banthar 请将其作为答案发布,以便 SSEMember 可以接受。

标签: git repository export


【解决方案1】:

问题

在您的两个示例中,您正在导出 master 的提示。拿出你的旗帜和论据,你就有了:

git archive master

换句话说,您通过将存储在 .git/refs/heads/master 中的任何内容指定为您的树形结构来明确地对自己执行此操作。

解决方案

如果你想导出不同的提交,你需要提供一个符合gitrevisions(7) 的树状结构。例如,要导出提交 29435bc,您可以指定:

git archive --format zip --output /full/path/to/zipfile.zip 29435bc

【讨论】:

  • 是的,我确定我为什么是个白痴是正确的。感谢您确认并给了我一些可以接受的东西。我很感激:)
  • 我正在使用第二个推荐 git archive --format zip --output /full/path/to/zipfile.zip 29435bc,但它导出了整个源代码,你能告诉我是什么问题吗?我的确切评论是 $ git archive --format zip --output C:/Users/anishanth/zipfile.zip 2dbbc28
  • 使用 sha1 (f.x. git archive --remove=file:///var/git/repo/ --output /tmp/specific_ref.tar <specific_ref_sha1>) 通过远程调用 git 存档将不起作用,因为远程上的 git 存档只会给出 HEAD 参考。如果您需要特定 ref 的存档,则需要执行 git clone 然后从该工作副本中调用 git archive(即省略命令的远程部分,fx:git archive --output /tmp/specific_ref.tar <specific_ref_sha1>
【解决方案2】:

分辨率

这是最新版本的 Git 的预期行为。远程 Git 存储库不允许客户端访问任意 SHA1。请求的对象应通过 ref(即文件名)访问。

git-upload-archive-archiver-died-with-error

【讨论】:

  • 虽然您是对的,但在原始问题中,提问者并未引用遥控器,因此此响应并不真正相关。 git-archive 在回购本身中执行。在原始问题的情况下,git-archive 命令显式导出相同的树形(即:master)而不是预期的树形(master~Xmaster~Y)。
猜你喜欢
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2011-12-06
相关资源
最近更新 更多