- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我曾希望这能起作用:
git checkout remote/tag_name
git checkout tags/tag_name
最佳答案
内容提要:可能要实现的目标是可能的,但首先必须发明远程标记。
您可以通过一系列refspec来做到这一点,每个refspec一个。剩下的就是这些,它们是如何工作的,等等。
您的问题询问有关 checkout “远程标签”的问题,但是Git没有远程标签,这是:
but I'm doing something weird where I have a lot of remotes, and I'm worried about what happens if two remotes have the same tag. Is there a way to specify the remote when checking out the tag?
master
,
devel
,
feature
等),“远程分支名称”(例如
origin/master
和
stuff_from_bobs_computer/master
)以及标签名称。像Git的“隐藏”之类的东西也使用引用,甚至
HEAD
也是引用,尽管它是一个非常特殊的引用,通常是“符号”引用。这里的要点是,Git有很多形式的引用,并且它们最终实际上都以相同的方式工作:引用名称最终将解析为那些SHA-1大值之一,
676699a0e0cdfd97521f3524c763222f1c30a094
或其他。
HEAD
,
ORIG_HEAD
,
MERGE_HEAD
以及其他类似内容)都是以
refs/
开头的名称拼写的。它们保存在某种类似于目录或文件夹的结构中,1带有子目录:
refs/tags/
包含您的标签,2
refs/heads/
包含您的所有分支,
refs/remotes/
包含您的所有远程分支。
refs/remotes/origin/
包含所有
origin
远程分支,而
refs/remotes/stuff_from_bobs_computer/
包含所有
stuff_from_bobs_computer
远程分支。如果您有很多 Remote ,则
refs/remotes/
中有很多子目录。
refs/tags/
中。 Remote 的标签,所有各种 Remote 上的所有标签呢?好吧,再次,git没有“远程标签”。 Git确实有“远程分支”,但实际上所有分支都是本地的。它们存储在
refs/remotes/
标题下的存储库中。
git fetch remote
,也包括
push
(以及初始
clone
步骤),您的Git会询问远程Git3问题:“您拥有哪些本地分支?它们的SHA是什么-1值?”实际上,这就是
fetch
的工作原理:作为简化的描述,获取过程包括向远程Git询问“嘿,whaddaya得到了吗?”。它为您提供了一组名称和SHA-1。然后,您的Git会检查它是否具有相同的SHA-1。如果是这样,对话就完成了;如果不是,您的Git会说“好吧,我需要这些SHA-1进行提交”,实际上是另一堆SHA-1,您的Git和他们的Git讨论了一下SHA-1可以识别哪些文件以及您所需的文件。您的Git带来了这些对象,并将新的SHA-1填充到
refs/remotes/
中,以远程名称命名,然后以其本地分支名称命名。
fetch
询问标签,您的Git还会执行更多操作。4您的Git不仅会询问他们的Git有关其分支的信息,还会询问他们的有关其标签的问题。同样,他们的Git只是为您提供了名称和SHA-1列表。然后,您的Git带来了所需的任何基础对象,然后-这是解决整个问题的关键-
将其标记名称写入refs/tags/
中。
origin
并询问其标签时会发生什么,并说“我有
refs/tags/pinky
和
refs/tags/brain
”,这会为您创建本地标签
pinky
和
brain
,在您的引用中也称为
refs/tags/pinky
和
refs/tags/brain
namespace 。
stuff_from_bobs_computer
),并询问其标签。他是神经病学专家,而不是Warner Brothers和Sister,他的标签是
refs/tags/spinal_cord
和
refs/tags/brain
,第二个标签可能与
origin
上的标签无关。哦哦!
fetch --tags
的工作方式。它们都使用相同的基本机制,即git称为“refspecs”。
refs/heads/master:refs/heads/master
。实际上,您甚至可以省去
refs/heads/
,Git会为您省去
git push
,6,有时您也可以省去冒号和重复的名称。这是您与
git push origin branch
一起使用的一种方式:
origin
表示使用
refs/heads/branch
推送到
refs/heads/branch
,并在到达“其” Git时也将其称为
fetch
。
+
,执行远程分支时,您会得到一个如下所示的refspec:
+refs/heads/*:refs/remotes/origin/*
*
表示“力”,而
refs/heads/*
则做明显的事情。您的Git与他们的交谈,并获取引用列表。那些与
refs/remotes/origin/
匹配的文件将带入(以及需要时与它们的存储库对象一起)—但是随后,它们将它们以
origin
开头的名称粘贴在您的存储库中,现在您拥有了
git fetch --tags
.7的所有“远程分支”。
+refs/tags/*:refs/tags/*
时,您的git会将
fetch
添加到其使用的refspecs中。8将其标签移到本地并放到本地标签中。因此,您要做的就是给
refs/rtags/
一个refspec,看起来像:
+refs/tags/*:refs/rtags/origin/*
origin
下将拥有一个全新的“远程标签”命名空间(在这种情况下,仅适用于
+
)。在这里使用
--no-tags
强制标志是安全的,因为您只是在更新其标签的副本:如果它们已强制移动(或删除并重新创建)了标签,则可以强制移动副本。您可能还希望甚至需要
--no-tags
行为,可以通过在命令行上指定
git fetch
来获得,或者,请参见下一段。
fetch =
从Git配置文件中获取其默认的refspecs。9如果您检查了Git配置文件,则将使用
+refs/heads/*:refs/remotes/remote-name/*
字符串在每个 Remote 下看到
fetch =
行。 。每个 Remote 可以具有任意数量的
--no-tags
行,因此您可以添加一行以移走它们的标签,但可以将它们放在新创建的“(远程)标签”命名空间中。您可能还想通过在同一部分中设置
tagOpt = --no-tags
来将
git checkout
设置为该 Remote 的默认设置。有关详细信息,请参见
this comment by user200783。
.git/refs
进入相应的SHA-1上的“分离式HEAD”模式:
git checkout refs/rtag/stuff_from_bobs_computer/spinal_cord
.git/packed-refs
中。但是,还有一种“打包”形式的引用,以
polish
结尾。压缩形式旨在节省不经常更改的引用的时间和精力(或根本不更改,这在标记中很常见)。还需要不断努力来重写“后端”存储系统以供引用,因此在某些时候,许多情况可能会改变。 Windows和Mac系统需要此更改。 Git认为分支名称和标签名称区分大小写:您可以为擦皮擦鞋 Material 使用
Polish
分支,对香肠使用
refs/tags/
。压缩版本区分大小写,因此可以使用;但是文件存储版本有时不是,所以不是!
fetch
空间中的标签。但是,通常,每个带注释的标签都有一个对应的轻量级标签,因此对于这种特殊用法,它们的工作原理相同。
clone
和
--tags
的特殊怪异之处,即没有
--tags
的版本。带有
--tags
的版本很容易解释:它们使用我在这里描述的refspecs来带走所有标签-至少在Git 2.10和2.11中,
+
还会强制更新,就像设置了
--no-tags
强制标志一样。但是,除非您明确要求
--tags
,否则简单的获取(和克隆)将带来一些标签。它所做的偷偷摸摸的事情是寻找与由于获取而进入的对象相对应的标签,并将这些标签(不强制更新)添加到您的(全局)标签 namespace 中。没有
--tags
,您的Git不会覆盖您自己的现有标签。使用
git push
,根据2017年初进行的实际实验,您的Git至少会覆盖Git 2.10中自己的现有标签。
--tags
仅需要强制标签。从
--tags
提取refspec并没有设置force标记,但是却像设置了一样。我还没有尝试使用
git fetch
进行push。关于
--tags
与
--no-tags
与显式refspecs还有另一种特殊的
--prune
怪异之处,与
--prune
的工作方式有关。该文档说
refs/tags/
适用于任何显式命令行
--tags
refspec,但不适用于隐式
refs/heads/
refspec。我也没有尝试验证这一点。
refs/tags/
或
git push
,您的Git必须能够弄清楚您的意思是哪一个。在某些情况下会这样做,在某些情况下则不会。如果您的Git无法弄清楚,您将收到一条错误消息,并且可以在填写时再次尝试-但是在脚本中,您应该始终明确地填写它,以获得更可预测的行为。如果您只是运行
git fetch
来推送现有分支,则几乎总是可以让Git找出来。
git fetch
来说效果不佳:它告诉您的Git根本不更新自己的引用!这似乎毫无意义,但实际上可能有用,因为
FETCH_HEAD
总是写特殊文件
git fetch --tags
。您可以从特殊文件中取出Git对象ID(SHA-1),然后查看获取的内容。这主要是对Git早期版本的保留,这是在发明了远程跟踪分支之前。
git push --tags
和
+
使用的refspec是在Git 2.10版中内部预先编译的,并由某些特殊情况的代码处理。预编译的表单没有设置
--tags
标志;但是实验表明,在Git 2.10 / 2.11中强制更新了获取的标签。我记得几年前使用Git 1.x进行试验,发现这些
--tags
提取的标签未强制更新,因此我认为情况已经改变,但这可能只是错误的内存。无论如何,如果您(正在)发明远程标签,则您很可能不想使用显式的
fetch = +*:*
。
git ls-remote
,您将获得一个纯粹的获取镜像。提取过程可以查看所有引用。您可以使用
--single-branch
自己查看它们。这也是
--single-branch
的工作方式:如果在克隆过程中使用ojit_code,则Git配置文件将仅在访存行中列出一个分支。要将单分支转换为全分支,只需编辑该行以包含常规的glob-pattern条目即可。
关于git - Git-当两个 Remote 具有相同标签名称时 checkout 一个远程标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108391/
我时不时地输入“git”,然后想到别的东西,然后输入例如“git checkout master”。当然,这给我留下了 $ git git checkout master git: 'git' is
我做到了 git 克隆 git://foo.git 光盘富 ...编辑文件.. 现在我想重新开始。我不在乎我已经做出的任何改变,但我不想再次克隆整个巨型 foo.git,只是丢失我所有的更改。我怎
我在我的电脑上开发代码,我的计算节点很少。 为了让我的程序保持同步,我决定使用 git。以前,我以一种单向模式使用它来“下推”从 PC 到计算节点的更改。但是时不时遇到计算节点特有的小bug,现场修复
虽然它似乎什么也没做,但它没有给出任何警告或错误消息。有什么想法吗? 最佳答案 来自 Git 源的注释: /* * Read a directory tree. We currently ignor
我知道如何为这样的 HTTPS 请求提供用户名和密码: git clone https://username:password@remote 但我想知道如何像这样向 Remote 提供用户名和密码:
Git GUI、Git Bash 和 Git CMD 之间有什么区别?我是初学者,为了进行安装,我发现自己通常同时使用 git bash 和 git CMD 最佳答案 Git CMD 就像使用 git
有人能告诉我git中文件索引被删除是什么意思吗?这些文件在我的 VS Code 中标记为红色,但我仍然可以修改文件并将更改推送到将反射(reflect)这些更改的远程存储库。我认为这一切都是在我使用命
我通过 git 子树将 GLFV 库添加到项目中,但出现此警告“看起来您的 git 安装或您的 git-subtree 安装已损坏”。还描述了几个原因,为什么这可能是: 如 git --exec-pa
我有需要外部 git 项目的 repo,但我不想使用子模块,因为我想在 github 上存档所有文件,所以我认为我只是将具有 git repo 的整个目录添加到 git 但它不t 添加里面的 .git
我有需要外部 git 项目的 repo,但我不想使用子模块,因为我想在 github 上存档所有文件,所以我认为我只是将具有 git repo 的整个目录添加到 git 但它不t 添加里面的 .git
我一直在阅读一篇文章,作者在其中指示:在现有存储库中创建一个新存储库,并想知道这是否是他忽略的错误。稍后我会与他核实。 这些是我要检查的条件: 将现有目录制作成仓库的条件,并且已经 checkin 主
我确实在不同的计算机上处理相同的项目,我想知道是否有一种方法可以跟踪该 .git 文件夹,这样我就不必在所有本地文件中重新配置配置文件。 我将所有工作推送到 bitbucket。 最佳答案 不,没
这个问题在这里已经有了答案: How does git store files? (3 个答案) 关闭 9 年前。 我为我的许多项目创建了一个远程存储库,所以它是我的push 的目的地。与 git
应该如何在 git 中查看文件内容的完整历史记录? 一个文件在 git 中的历史很短,存储库通过 git-svn 同步,但在 svn 中的历史很长。 git 中的历史记录到达文件移动的位置。要查看历史
我是confused here ... 如何对修改后的文件进行git commit,以及如何对新文件进行git commit? 还有,你如何在git中单独提交文件? 最佳答案 git 提交过程分为两个
正在搜索 throw SO 来寻找答案。遇到这个似乎没有给出任何答案的旧线程。重新触发此线程,希望有人知道! 有人能告诉我 git subtree 和 git filter-branch 的区别吗?为
我想知道是否有一种方法可以避免在每个 Git 命令的开头键入单词 git。 如果有一种方法可以在打开命令提示符进入 “Git 模式” 后只使用一次 git 命令就好了。 例如: git> 之后,我们键
当您修改工作目录中的文件时,git 会告诉您使用“git add”暂存。 当您向工作目录添加新文件时,git 会告诉您使用“git add”开始跟踪。 我对这两个概念有点困惑,因为我假设跟踪文件的更改
为什么 git://有效 $ git clone git://github.com/schacon/grit.git Cloning into 'grit'... ... Checking conne
我在以下沙箱中练习 git:https://learngitbranching.js.org/?NODEMO 我在两个单独的 session 中运行了两组命令。第一组命令顺序如下: git clone
我是一名优秀的程序员,十分优秀!