- 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/
假设我有一个带有隐藏提交按钮的表单,我在其中输入值,然后我点击一个按钮,就会出现带有确认消息和确认按钮的对话框。当我单击“确认”按钮时,我还单击了表单中隐藏的提交按钮。这可能吗?我如何在 JQuery
我们正在学习 Git 并使用 GitHub 作为我们的托管站点。 我们都 fork upstream repo 并 PR 我们的提交到 upstream 以获取我们的更改。 我们正在努力学习如何压缩我
我只需要一些关于这段代码的帮助。 var prv3; var markIt3 = function(e) { if (prv3 === this && this.checked) { th
如果 1 个表单使用“GET”方法而另一个使用“POST”方法,我如何提交位于同一页面上的 2 个表单。每个表单都有相同的操作并转到相同的下一页。需要帮忙。感谢大家的帮助。 我怎样才能得到下面这两个使
您好,我的表单中有以下脚本 function pdf() { var frm = document.getElementById("form1"); frm.action = "http://www.
我有一个 iOS 胖静态库(iphoneos 和 iphonesimulator),如果我在应用程序提交期间使用它,它会因为二进制文件包含 iphonesimulator 代码而失败吗? 最佳答案 我
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我正在尝试发送由 jquery 创建的表单。该表单附加到一个 div 中,下面的变量“data”是使用 php 创建的,我将只发布最重要的 js 代码。 我尝试了很多带有和不带有“on()”的操作,但
我面临一个简单的问题,但不知道如何解决。我正在使用 twitter bootstrap 的标签。选项卡有效,但每个选项卡中的表单不提交。表单在没有选项卡的情况下提交。 以下是我用于标签的链接
我的计算机上有 140 个 git 存储库,每周我可以处理其中 10-15 个。有没有办法知道是否忘记提交/推送我的一个项目? 这些存储库都位于同一位置:“C:/Projects”。 输出类似于 C:
我对 javascript 完全陌生,目前正在开发我的第一个函数。我有这 2 个文本输入区域,可以在其中输入他的姓名和级别。 Nom: Niveau (1 á 6): 提交后,
我安装了最新的 Docker CS,得到了 LAMP image来自 Docker 集线器。我正在尝试在其中创建一个数据库并使用保存在其中的数据库制作一个新图像。 启动容器:docker run --
我有这个 jQuery 简单代码: 由于某种原因,submit() 无法正常工作(我的表单在单击 old_thumb 按钮后未提交。有人可以帮助我吗? 这里是 html 的一部分(它很长
如何获得 input type="submit"onclick 事件来触发 commitfunds.valdiate?我不能使用类或 ID。它必须是一个 onclick 事件。 这是代码: row A
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
来自 this earlier thread我以为我知道可以使用 javascript submit() 命令通过 POST 方法发送表单数据。但我无法让它工作。这个演示在目的方面没有明显的意义,但请
在 mysql 重新启动时提交 XA 待处理事务时,出现以下错误。请帮助我解决这个错误。 mysql> XA RECOVER CONVERT XID; +----------+------------
我有一个带有 的表单. 如果启用了 Javascript,我将删除此 submit -输入字段$('#no-js-submit').remove();并添加“fire-ajax”按钮 $('Fire
我希望在页面加载后提交此表单,并且我使用了以下代码来完成此操作。问题是页面不断重新加载并停留在该循环中。 HTML Select Genre
我们有一个表单,其中有几个单独的提交按钮,它们执行不同的操作。问题是我有几个具有以下 HTML 的按钮: 现在您无法使用标准的 find_control 函数按值定位元素。所以我写了一个谓词函数来
我是一名优秀的程序员,十分优秀!