问题标签 [git-plumbing]

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 投票
2 回答
405 浏览

git - 如何以编程方式比较 git 中两个版本的文件?

我想在 git 的不同提交中比较文件的两个版本(存在于不同的路径)。我不想要差异,我只是想知道内容和模式是否相同。diff-files 的文档没有说明返回值的任何含义。我在 git 中没有看到类似于 cmp(1) 的东西。是否有另一个管道工具可以做到这一点,或者差异文件是否有表达这一点的返回值?

0 投票
1 回答
1950 浏览

git - Git:获取.git目录中的blob路径

我想在回购历史的某个时刻访问一些 blob。

目前,我使用git show $REV:$PATH. 但是文件非常大,我不希望它们在脚本中被读取和传输。我想获取他们的路径,然后作为纯文件读取。

我可以依靠当前文档中描述的布局(例如.git/objects/ee/2403ffd236587a2b17ddc35b0e711fc99ba6a0),获取文件哈希并将其手动转换为路径吗?我的意思是它在未来的版本中不会很快改变,并且对象目录总是具有这种结构。有没有更简单的方法可以通过一些管道命令来做到这一点?

0 投票
2 回答
1099 浏览

git - git管道命令获取子模块远程

我正在只读文件系统中使用 git 管道和镜像(因此是裸露的)存储库。

我可以看到子模块的存在git ls-tree。我可以推断出它们的名称/路径和 SHA1,但我找不到获取子模块远程的方法。

信息在某处;如果我克隆回购,git submodule init成功。(克隆对于正常使用来说太昂贵了,特别是对于非常大的存储库。)我怎样才能直接访问子模块远程?

0 投票
2 回答
1998 浏览

git - Git克隆没有blob的裸仓库

在我的 git 存储库中,我使用一种算法根据分支名称和标签为每个提交分配一个或多个唯一的版本号。我想将此机制与另一个大型存储库一起使用,我想在不传输任何文件的情况下进行克隆。

裸克隆帮助我摆脱了 blob 的工作副本,但它仍然从服务器下载它们。跳过大多数 blob的浅层克隆--depth 1,但也跳过下载除一个之外的所有提交的元数据。

有没有类似的东西git fast-export --no-data可以在客户端使用来获取包含提交元数据和文件名的图形信息,而无需先从我的服务器克隆存储库?理想情况下,我可以通过git log|show|rev-parse|show-ref.

(我知道 git LFS 和 git Annex 存在,可以帮助减少一些 repos 的大小,但我不能在现有存储库上使用它们而不更改它。)

0 投票
1 回答
289 浏览

git - Git:列出分支中所有提交的标签和日期/时间

对于我的 Python 项目,我需要从 git 存储库中获取数据。

目前我正在使用:

列出分支中的所有提交以及日期、时间和提交消息。

但是由于我正在使用的存储库依赖于标记,因此我还需要阅读每个提交的标记。

这个 git log 命令向我显示了标签,但是对于所有分支加上我不能在我的脚本中使用它,因为它是一个瓷器命令。

有人知道我可以使用的命令吗?

0 投票
1 回答
252 浏览

git - `git checkout -- 的管道等效项。

我正在寻找与高级瓷器命令等效的适合脚本的管道命令(或命令)git checkout -- .

我最初的想法是使用git checkout-index --all --force,但是在以下情况下这并不能完全恢复工作目录core.autocrlf = input

这会产生以下输出:

请注意,即使在这种情况下,它也会git checkout -- .正确地将工作目录恢复到 的内容。index

0 投票
1 回答
134 浏览

git - 用于检测子模块更新并获取暂存区或工作目录中的哈希的 Git 管道命令

在瓷器模式下,git diff通告子模块更改:

哪些管道命令可以提供以下信息?

  • 子模块更新,这里是 software/zemke-ryne
  • 旧哈希,这里是 0fff2fc52bdc2a62a2647110e712b1b3baa48613
  • 新的哈希,这里是 cb69287a3540054ff85cd14199cf36b4b5098c1a

例如,目标是自动化提交消息,以通过 git rev-list 简要记录更新子模块中的更改。

0 投票
1 回答
129 浏览

git - `git checkout -` 如何在低级别工作

如何使用 Git 管道命令或状态文件获取先前的分支/提交?

编辑:问题是 - 我如何在不执行实际结帐的情况下获取此信息(上一个分支或提交)?这对于在 Git 上运行的工具是必需的,而不是常规 Git 场景。

0 投票
2 回答
64 浏览

git - 如果提供给散列对象的文件名参数与原始文件名不同,则无法创建提交

我正在玩弄git管道命令以更好地了解其内部机制。我正在尝试在不使用该git commit命令的情况下重现提交。让我们创建一个blob

现在让我们将它添加到索引中,但使用不同的文件名

这是输出git status

这里发生了什么?

apple.txt仍然存在但未被跟踪,这对我来说似乎很正常,因为我将 SHA-1 提供给了blob仅包含文件内容的对象。

让我们继续写树:

让我们通过创建指向这棵树的提交来完成这个操作:

现在,如果我运行git status,输出与上面给出的相同。为什么?此外,似乎还没有创建提交:

我错过了什么?

0 投票
1 回答
169 浏览

git - Git - 作者的 rebase 提交

在包含名为 的示例文件的 git 项目中file.txt,我想要一个脚本:

  1. 解析当前以空格分隔的单词(在示例中,对于第一次迭代,这将是Enlargement)。也许通过使用正则表达式\b[A-za-z+]\b来进行单词检测。
  2. 检查单词的长度是否至少为 5 个字符。如果不是,请继续移动到下一个单词,直到满足此条件。如果满意,请移至下面的#3。
  3. 检查项目的整个历史,找出是谁最初提交了引入这个词的提交。
  4. 如果该特定提交的作者匹配johndoe,则从文件中删除正在考虑的单词。
  5. 重复 #1 - #3 直到文件中的所有单词都被解析并且特定作者的原始单词被剪掉。

常用词的处理:

忽略常见的关键字很重要,例如a, an, the, of, for, if, then, but, else, not, any, or, nor. 因此,我建议保留5 characters字符串中的最小长度,以使单词有资格被删除

基本上,这个想法是消除或恢复特定作者所做的类似英语的贡献。如何才能做到这一点?

latexdiff 后处理:

此问题用于在删除作者的贡献后生成差异报告。在修剪文本之后(即在我得到这个问题的答案之后),我打算使用一个标准但令人惊叹的 perl 脚本latexdiff ,它可以检测这些单词删除(或者实际上两个文件之间的任何其他差异latex)并输出复合 PDF ,用红色的罢工线突出显示删除的单词。我需要做的就是识别并删除其他作者最初介绍的单词(即我的核心问题)。因此,复合 pdf 中的所有句子都应保持连贯,不会失去意义,但会继续将已删除的单词保留在同一位置,但另外只需在它们上面加上红色删除线标记。

背景和背景:

这是在学术背景下。git 项目是手稿的 LaTeX 存储库。我与一篇论文的共同作者发生了作者权纠纷,因此该论文没有提交给任何期刊。我们都是博士生。为了声明我们在各自论文中使用的词语的版权,我们的博士导师要求提交我们各自对我们每个人在手稿中介绍的词语的声明,以便在我们的论文中重复使用,并避免剽窃指控。我们都致力于同一个 repo ,现在我正在考虑利用 , , 或其他任何东西的力量来git帮助我声明我以诚信贡献的正确词语。您的帮助将不胜感激。shellgit-grepsedawkperl