问题标签 [git-notes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
562 浏览

git - 在 git 中获取时缺少参考/注释

我有一种情况,我试图使用以下方法获取远程 git 注释:

在存储库的全新克隆上,这可以正常工作。它拉下 2 个注释命名空间:

但是,在我当前的项目存储库中,当我执行该获取时,我只得到一个参考。如果我手动删除文件.git/refs/notes/git-ratchet-1-test并再次尝试获取,我会拉下该文件/引用。

为什么我不拉下另一个/refs/notes/git-ratchet-1-test2

0 投票
1 回答
680 浏览

git - 是否可以将存储在 refs/heads 之外的 ref 视为一个分支并作为正常分支检出和处理?

现在,我不知道一个 ref 是否只有在 refs/heads 内部时才被认为是一个分支,实际上这个问题之前的标题是如何检查存储在 refs/heads 之外的分支?. 所以我不确定存储在 refs/heads 之外的 refs 是否仍然可以称为“正确的分支”,但重点是:

假设我有一个提交的引用,就像所有正常的分支一样,但存储在 refs/heads 之外;例如,使用 git-notes 添加的注释以这种方式存储,默认情况下在 ref refs/notes/commits 中。

是否仍然可以以某种方式将其签出,就好像它是一个正常的分支(进行分离头签出),然后使用其他 git 命令(rebase、cherry-pick 等)进行处理,好像它是一个普通的 refs/heads 分支?

我知道正常git checkout只会将其作为提交检出,将存储库置于分离头状态。

我确实找到了一种似乎可行的方法,即:

显然,我这次能够做我必须做的事情,但我想知道总的来说,这是否是受支持的,或受支持的,或者至少“现在它运作良好”,操作,以及如果我将来可以依靠它并建议其他人使用它。

我试图查看 git checkout 的源代码,但过了一段时间很明显,我最好在 Stack Overflow 中发布一个问题(当然,我之前在网上搜索过)。
事后看来,研究(整个)git 源代码可能需要更少的时间。

我确实需要这个东西来解决在存储库之间共享(可怕的实现/记录的)注释的问题,但不要专注于这个,只回答我上面的问题,或者忽略它,让其他了解的人它回答。

0 投票
0 回答
88 浏览

git - Git笔记:将具有相同命名空间的相同注释值附加到多个提交?

要添加具有特定命名空间的注释,您可以这样做:

但是,如果我需要指定与标签类似的东西怎么办。从现在开始(如果未另行指定),所有提交都必须带有命名空间task和值的注释10?稍后,如果我要更改,请从现在开始说:每个提交都应该自动带有注释namespace task和值11?换句话说,我会将所有未来的提交关联到自动获得相同的注释(如果没有以不同方式指定)。或者让它像标签一样,如果将过去的提交与特定的注释联系起来?

我需要这个,所以我不需要为每个具有相同注释(或相同元数据)的提交写相同的注释

我可以用笔记做类似的事情吗,或者也许还有一些其他很酷的功能可以在 git 中使用(不仅仅是笔记)?

0 投票
2 回答
3923 浏览

git - 如何获取给定目录名称的树哈希?

我想在树对象上附加一个注释。但是,为了做到这一点,我首先需要知道树对象的哈希值。对于作为我的存储库一部分的给定目录名称,我如何获取其所属树对象的哈希以便为其附加注释?

通过阅读这个答案,我知道我可以使用

列出根树的内容,但我仍然必须 grep 目录名称的输出,并递归地遵循嵌套树对象以获取树对象的哈希,以获取层次结构中更深的目录。

基本上,我正在寻找一个虚构get-tree-hash.sh脚本的实现。如果像这样调用

它应该输出

0 投票
1 回答
347 浏览

git - 与 ClearCase 相比,如何使用 git 元数据策略?

在我之前的开发者生涯中,clearcase 是 10 多年的版本控制工具。现在,我工作的组织已经迁移到 git 已有 4 年了。在清晰的情况下,有易于访问的元数据结构,例如所有级别的项目的属性,例如存储库或分支或标签。git notes 存在,但是经过一些网上冲浪后,我没有找到任何有效的好方法以及为什么。例如,UCM ClearCase 基线提升级别是一个很好的概念,我希望它在 git 中也很简单。

我代表这个特定问题的开发社区统计数据:< 100 个开发人员,< 5 个主要发布分支,< 100 个客户补丁分支,代码库大小:< 1000000 行代码。

因此需要一些适当的元数据策略和工具。

在明确情况下,存在以下元数据结构:

  • 标签(常见用法:指出外部软件交付中包含的所有文件修订)
  • 属性,可以应用于标签或分支:

    • label 属性,可以有任何值,常用用法:告诉一个标签的状态:TEST_RESULT:OK|NOK or CUSTOMER_AVAILABILITY:GENERAL|LIMITED|INTERNAL_ONLY
    • 分支属性,常用用法:BRANCH_STATUS:ACTIVE|OBSOLETE
  • UCM 基线,它是一种带有状态属性的标签形式(参见例如:https ://www-304.ibm.com/support/docview.wss?uid=swg21135893 )

  • 超链接(例如用于指向合并方向)

尤其:

  • 可用于 TEST_RESULT 的标签 + 属性构造
  • 可以使 BRANCH_STATUS 清晰的分支 + 属性
0 投票
1 回答
2580 浏览

git - 克隆时获取 git 注释

我知道克隆后可以使用以下命令获取 git 注释:

甚至在 git config 中设置为始终获取。

但是在克隆时我没有得到笔记,所以我必须克隆然后获取。虽然我确实看到--mirror在克隆时使用也会得到注释。但是,我的最佳设置是我可以克隆任何存储库而不做镜像(因为它暗示--bare并且还会获得其他不需要的参考)并获得注释。

有没有办法设置例如 git config 在克隆时获取特定的附加参考?

0 投票
0 回答
763 浏览

git - 将注释推送到远程 git 存储库

我最近遇到了一些我在 Git 中存档的项目的旧纸质文档,这些文档没有反映在提交中。不想变基和修改所有各种提交和重写历史,我决定通过添加新发现的信息Git Notes。我在本地存储库中输入了注释。

但是,现在我发现我无法将这些笔记推送到远程存储库。

我尝试了以下命令: git push "origin_ssh" "/refs/notes/*"

git push "origin_ssh" /refs/notes/commits

git push "origin_ssh" /refs/notes

所有这些都给出了错误fatal: remote part of refspec is not a valid name in /refs/notes

我在这里做错了什么?如何将笔记推送到远程存储库?

0 投票
2 回答
557 浏览

git - BFG 之后的 git 笔记?

我从 SVN 迁移到 git,并且在每个 git 提交中都有一个注释,引用了 SVN 修订号。在 repo 导入后,我使用 BFG repo 清洁器从二进制文件和其他垃圾中清除 git 历史记录。不幸的是,现在我在键入时看不到注释git log。我想 BFG 忘记更新注释提交的引用。BFG 留下一个 *.txt 报告,将旧对象 ID 映射到新对象 ID,格式如下:

鉴于上述映射,您能否建议一些脚本来快速修复注释?

PS:我几乎可以肯定问题是由未更新的参考文献引起的,因为当我输入git notes第二位时,我可以看到在 BFG 报告中被认为是旧的参考文献object-id-map.old-new.txt

0 投票
1 回答
134 浏览

git - 为什么当我复制笔记时存储库大小会翻倍?

我使用 Subgit 导入 SVN 存储库,这是一个出色的工具,可以快速完成并支持自定义 svn 布局。Subgit 将 git commit -> svn 修订参考保存在git notes. 每个提交在注释中都有修订号,您可以使用git log.

在 SVN->git import 之后,我使用 BFG 存储库清理器从 jar、dll 等二进制文件中清理旧项目存储库。BFG 不会重写 git 注释和更改的提交之间的链接,但幸运的是它留下了object-id-map.old-new.txt文件。

我使用此文件将注释从旧提交复制到新提交:

cat object-id-map.old-new.txt | git notes copy --stdin

复制笔记后,我将它们从旧对象中删除:

cat object-id-map.old-new.txt | cut -d' ' -f 1 | git notes remove --stdin --ignore-missing

问题是在修复 git notes 存储库大小后会变大 2 倍(即使我没有克隆--bare)。为什么?

示例:我已经使用 Subgit 从 svn 导入了 repo,并且有 400Mb .git。然后我应用 BFG 并获得 40 Mb 裸存储库。我想通过使用上面的 2 个命令移动(复制和删除)它们来恢复 git 笔记,但不幸的是 repo 的大小从 40 Mb 增长到 80 Mb。我尝试执行git notes prunegit reflog expire --expire=now --all && git gc --prune=now --aggressive这是 BFG 推荐的,但仍然有 80 Mb。

UPD:现在无法重现 40 Mb 回购:/ BFG 清理后为 80,复制笔记后为 86

0 投票
1 回答
158 浏览

git - 如何让 git 笔记自动为每个克隆 repo 的人提取?

有可能吗?

我已阅读文档,您可以在本地配置它,.git/config 例如:

但这是本地设置,据我了解,我无法将其推送到 github 或 bitbucket。能不能强制大家拉笔记?