- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想将远程存储库的单个提交(当然有历史记录)提取到本地存储库中。一些 Stack Overflow 回复表明以下内容应该有效,但事实并非如此:
md foo
cd foo
git init
git fetch https://github.com/ld4apps/lda-serverlib.git f1e32e18a90e10c150221af55c69aeafaa42c57a
这会产生以下错误:
error: no such remote ref f1e32e18a90e10c150221af55c69aeafaa42c57a
令我惊讶的是(对我而言)以下确实(有点)起作用:
git fetch https://github.com/ld4apps/lda-serverlib.git :f1e32e18a90e10c150221af55c69aeafaa42c57a
这会创建一个名为 f1e32e18a90e10c150221af55c69aeafaa42c57a
的新本地分支(我不想要),但至少新分支具有我尝试获取的内容。我可能期望以下命令会做同样的事情,但它会得到与第一个示例相同的错误:
git fetch https://github.com/ld4apps/lda-serverlib.git f1e32e18a90e10c150221af55c69aeafaa42c57a:f1e32e18a90e10c150221af55c69aeafaa42c57a
我在 Windows 和 Linux 上用几个不同的 git 版本尝试了这个,并看到了相同的行为。
谁能解释一下这是怎么回事?我对 Git、fetch
和 refspecs 有什么不了解的地方?我真正想要的是单个 git fetch
命令,我可以向其提供远程分支或标记的 ID 或提交 ID,它将获取相应的提交。
最佳答案
更新:自 Git 2.5(2015 年中左右)以来,服务器现在可能暴露原始哈希。这是一个服务器端配置项。您必须对服务器有足够的控制权才能进行设置,并且在设置之前应考虑潜在的安全问题。有关详细信息,请参见 this answer 至 Retrieve specific commit from a remote Git repository。 (原始答案,适用于 pre-2.5 或如果未设置配置旋钮,请参见下文。)
git fetch
命令或多或少地向远程传送引用(名称,而非原始提交 ID)。 (更具体地说,使用 git ls-remote <em>remotename</em>
查看远程愿意为您提供的名称。这会在左侧生成一个 SHA-1 列表,在右侧生成名称,而您的 fetch
唯一可以询问 for is the names-on-the-right. 此时您将获得 ID-on-the-left if Remote 上的名称仍指向该 ID,因此它取决于 Remote 更新的积极程度。)
可以通过多种方式将原始提交 ID 传送到远程并询问远程从该点开始可见的内容,有时也可以通过历史向后工作,但不是通过 git fetch
。 (您可以使用 git archive
但远程可以决定是否允许您通过原始提交 ID 进行访问;或者对于具有 Web 服务器访问权限的远程,包括特定提交,您通常可以只查看顶级内容提交,并用它来“向下钻取”,正如他们所说,到各个部分。但这是一种非常缓慢的方法。)
如果您想使用 git fetch
来获取某个特定的提交,最简单的方法可能是让有权访问远程的人为该提交 ID 附加一个名称(很可能是一个标签)。然后你可以让你的 git fetch
带上那个 refspec,并将它放在你喜欢的任何其他 refspec 下。例如,假设您可以直接通过 ssh 连接到任何主机 origin
:
$ ssh our.origin.host 'cd /repos/repo.git; git tag temporary f1e32e1'
[enter password, etc; observe tag created]
$ git fetch origin refs/tags/temporary:refs/heads/newbranch
[observe fetch happen; now you have local branch 'newbranch']
$ ssh our.origin.host 'cd /repos/repo.git; git tag -d temporary'
请注意,名称不必是分支,它只需要是一个引用,您可以使用 git fetch
parking 并使用 git ls-remote
查看。然后,您使用一个名称,该名称将在获取时与您的 refspec 左侧的名称相匹配。在您的 存储库中创建的名称由 refspec 的右侧控制(上例中为 refs/heads/newbranch
)。
这也是你最后一段问题的答案:你只能命名在远程有名字的东西(这部分是为了避免“泄漏”在垃圾收集之前保留在存储库中的未命名提交,所以它被认为功能而不是错误)。这些名称位于 refspec 的左侧。你自己的名字在右边。
你右边的名字被假定为一个分支或标签名(基于左边的名字匹配,虽然你可以明确拼出 refs/heads/
或 refs/tags/
来覆盖它),所以即使 f1e32e1...
是一个有效的 SHA -1,它在这里被视为一个分支名称——左边缺失的名称转换为 HEAD
,因为缺失的名称几乎总是如此——而 git fetch
创建了一个名称令人不安的 SHA-1ish 分支。 (顺便说一句,我曾经创建了一个看起来像 SHA-1 的分支名称,后来我把自己弄糊涂了。我忘记了具体的名称,比如没有连字符的 de-bead
。我将它重命名为带连字符的版本只是为了清楚我没有这意味着原始提交 ID!:-) )
关于Git 获取单个提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25815202/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!