我已经将一个远程Git存储库克隆到了我的笔记本电脑,然后我想添加一个标签,所以我跑了
git tag mytag master
Run Code Online (Sandbox Code Playgroud)
当我git tag在笔记本电脑上运行时,mytag会显示标签.然后我想将它推送到远程存储库,所以我在所有客户端都有这个标签,所以我运行git push但是我收到了消息:
一切都是最新的
如果我去我的桌面并运行git pull然后git tag没有显示标签.
我还尝试对项目中的文件进行微小更改,然后将其推送到服务器.之后,我可以将更改从服务器拉到我的台式计算机,但git tag在台式计算机上运行时仍然没有标记.
如何将我的标签推送到远程存储库,以便所有客户端计算机都可以看到它?
如果我想标记当前提交.我知道以下两个命令行都有效:
git tag <tagname>
Run Code Online (Sandbox Code Playgroud)
和
git tag -a <tagname> -m '<message>'
Run Code Online (Sandbox Code Playgroud)
这些命令有什么区别?
是否有一个衬垫向我显示所有git轻量级标签创建的日期?
像这样的东西:git show tags --format=date?
我需要一些方法来列出我们系统中所有标签的创建日期,但我不确定我是否可以通过git-log获取该数据.想法?
输出git tag按字母顺序排序.我希望它按时间顺序排序(它们被分配的提交日期,而不是它们被创建的日期),否则输出应该保持不变.
我已经尝试过来自http://networkadmin20.blogspot.de/2010/08/howto-list-git-tags-by-date.html的建议,但订单仍然相同.
为了确保它不是我的存储库的错误,我尝试使用干净的存储库:
soeren@ubuntu ~/Projects/sandbox % mkdir chronogit
soeren@ubuntu ~/Projects/sandbox % cd chronogit
soeren@ubuntu ~/Projects/sandbox/chronogit % git init
Initialized empty Git repository in /home/soeren/Projects/sandbox/chronogit/.git/
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % touch a
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git add a
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'a'
[master (root-commit) f88e0e9] a
0 files changed
create mode 100644 a
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag 'A-first'
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git mv a b
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % …Run Code Online (Sandbox Code Playgroud) 获取单个分支时,git fetch包括指向分支的任何标记:
当refspec将获取的结果存储在远程跟踪分支中时,将自动跟踪指向这些分支的标记.这是通过首先使用给定的s从远程获取来完成的,如果存储库具有由远程标记指向的对象,那么它将获取那些缺少的标记.如果另一端有标签指向你不感兴趣的分支,你就不会得到它们.
有没有办法让git push行为方式相同?手册页说明了如何--tags在命令行中不使用任何标签(默认值),所有标签()或名称.它没有提供一种方法来推动指向分支的所有指针.
我知道这两种命令之间的技术差异(没有-a的用法创建一个轻量级标签,它本质上是一个永远不会移动的分支,使用-a在Git的对象数据库中创建一个完整的对象,其中包括提交者的名字,电子邮件等).
问题是:我应该在我的项目中使用哪一个(例如,在Github上指示发布版本)?如果一个人比另一个人更受欢迎,为什么另一个选择存在呢?每个版本的用例有哪些?
我想在我的存储库中列出所有轻量级标签; 我能想到的最好的东西包括结合git for-each-ref,grep和cut,但似乎它会有点狡猾......
(虽然我们正在谈论它,但我们不妨谈论注释标签的相同事情:有人肯定会在某处对此感到疑惑.)
编辑:
通过lightweight标签,我的意思是那些不引用标签对象的标签引用.(换句话说,未注释的标签.)
您查看的每个git教程都对标记有明确的看法:一个应该始终使用带注释的标记,其中一个原因是它们被使用git describe.
但是,我没有看到使用git describe --tags中的任何不良内容,也将未注释的标记作为参考点.对于未注释的标签,还有什么其他的被认为是坏的吗?
我问,因为我刚刚将SVN项目转换为git.我实际上是在考虑为标签提供一个注释,但是如果不是一个令人担忧的多余的"我们项目的标记版本1.5"消息(它已被用作SVN注释),我应该放在那里?
带注释的标签对我来说似乎是件好事(你可以把东西标记为不同的作者并可能给出一个简短的描述),但是如果除了原始提交之外你没有任何有意义的说法,你是否应该真正使用它们?信息?
要么
在哪些情况下未注释的标签并不令人不满?
编辑:我不是在谈论签名注释标签(我理解在某些情况下签名标签的优势); 我只关心未注释和无符号注释之间的区别.
编辑2:附加另一个问题以扩大范围,并可能得到一些关于现实生活中最佳实践的深刻见解
什么时候你使用未加标签和你感到很难过的时候你怎么办?
我熟悉Git 如何为文件(blob)创建 SHA1 哈希值,但不熟悉如何为标签对象创建它们。如果我创建一个带注释的标签,我认为它们是,但是配方是什么?我如何在 Git 之外复制它(例如,在 Perl 或 Python 中)?