问题标签 [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 投票
1 回答
90 浏览

git - Git 目录权限总是 000

通过弄乱 Git 对象,我发现树对象中的树条目总是具有这些权限。

04表示它是一个目录,但权限是000。这是否意味着Git不存储树权限,或者是Unix的工作方式?

0 投票
1 回答
196 浏览

git - git:确定脚本中未合并分支的最佳方法

在交互式提示下,我可以使用该git branch -r --no-merged命令来确定尚未合并的远程分支。但是,git branch它是一个瓷器命令,因此不适合在脚本中使用。

有什么好的管道命令可以用来确定--no-merged选项返回的相同分支吗?

0 投票
1 回答
891 浏览

git - 哪个管道命令提供与 git log --follow 相同的功能?

为了提高稳定性,我目前正在重构所有与 Git 相关的 shell 脚本,以便它们只使用管道(而不是瓷器)命令。特别是,我试图通过调用(管道)来替换对git log(瓷器)的调用。git rev-list

然而,尽管git rev-list似乎提供了 的大部分功能git log,但它似乎缺少与git log'--follow标志等效的选项,该标志告诉 Git 列出影响路径的提交,甚至超出重命名(例如README-> README.md)。从git log手册页

--follow

继续列出重命名后的文件历史记录(仅适用于单个文件)。

我已经筛选了git rev-list手册页,但找不到任何与git log --follow. 我错过了什么?可以这样做git rev-list吗?还是我应该完全使用另一个管道命令?

0 投票
2 回答
128 浏览

git - Git 管道:在提交时导出树而不接触 HEAD/索引

我正在编写一个程序,该程序需要同时从同一个存储库中提取不同的提交(就像在这个问题中一样,但同时)。

瓷器命令(例如git checkoutgit archive)对索引进行操作,因此任何时候需要提取提交时,都需要先移动 HEAD 和/或通过索引。

有没有一种简单的方法可以将 Git 树对象转储到文件系统上的目录中?

0 投票
1 回答
145 浏览

java - 使用 Jgit 和管道命令创建提交

我正在尝试使用 JGit 中的管道命令构建提交。除了获取信息,我使用的基本上是这些命令:

最终

最后将最终树设置为提交。这适用于某些提交,但对于其他提交,尽管文件在那里,但我无法推送 repo。bash 说:

错误:解包失败:错误无效树(树号):错误排序

我在这里发现

树条目按包含条目名称的字节序列排序。但是,出于排序比较的目的,比较树对象的条目就好像条目名称字节序列有一个尾随的 ASCII '/' (0x2f)。

因此,尝试根据转换为对象名称(不是文件名)字节的特定顺序添加文件,但与来自 bash 的实际提交相比,我无法弄清楚 Git 需要哪个顺序添加文件。

所以:任何人都知道如何使用 JGit 中的管道方法来构建包含多个文件的提交?我很确定我只需要正确的对象排序方式,但不知道它是什么

0 投票
1 回答
171 浏览

git - Git id 没有显示二进制文件的任何冲突

我们正在将二进制文件签入 git。问题是 git 在合并时不显示冲突/更改。它只是接受文件并覆盖它,即使有冲突。我不确定 git 是否理解二进制文件。请帮助并提供建议。

注意:二进制文件是由我们自己的工具生成的。

0 投票
1 回答
49 浏览

git - Git保存使用index update-index命令添加的文件的所有版本?

我试图理解 git 的管道命令以及它的低级操作如何构建高级操作,如添加和提交。

我知道,每次我使用:

我从这个文件创建 blob 并在索引中创建引用(文件名和 SHA1 密钥一起写)(当然只有在文件被更改的情况下)。如果我提交,我会创建只指向一个 blob 的树(我只更改了一个文件)。

但是在 .git/objects 数据库中存储的不是一个,而是更多(例如五个或六个)由 update-index 命令从这个文件创建的 blob,它们不是由任何 commit object 指向的任何树所指向的。git 应该只保存这个 blob,它们位于提交创建的快照中。

Git 有一些自动垃圾回收,以后可以去掉不指向的 blob?命令 update-index 是 add 命令的完全等价物吗?

0 投票
2 回答
1095 浏览

git - git scripting:如何列出所有包含提交的 git 分支

我可以列出包含某个提交的所有分支,使用git branch --list --contains就好了。但正如有关如何列出所有分支的相关问题中所解释的,这是一个不应在脚本中使用的瓷命令。

后一个问题建议使用管道命令git for-each-ref,但不支持--contains

列出包含某个提交的所有分支的正确管道接口是什么。

0 投票
3 回答
1784 浏览

git - 删除提交的父级,从而使其成为初始提交

注意:我知道这是在改写历史,会改变所有的哈希值,把其他人搞砸。


我想提交,并删除其父级。具体来说,提交现在应该看起来像一个初始提交。这意味着它的差异会改变;在历史上的那个时刻,看起来所有文件都是由该提交创建的。

如何做到这一点?(当然,我可以去编辑提交对象,但是提交不会相互指向。)另外,我想在一个新分支上执行此操作(这意味着现在有两个历史记录:原始的一个,另一个提交是初始提交。)

0 投票
1 回答
481 浏览

git - 哪些管道命令与 git add 实现相同?

我想通过了解进入时实际发生的情况来更好地理解

它是如何工作的?

通过阅读progit 的 git internals section 可以获得一个粗略的想法。

  • If$DIRECTORY是一个目录,类似于find $DIRECTORY -type f -exec git add {} \;,即递归添加所有文件在$DIRECTORY. 然后,git add $FILENAME适用于每个文件。
  • 检查.gitignore(及其“上级”)
  • 检查,如果适用.gitattributes,运行过滤器clean
  • git hash-object -w编辑clean内容

然后索引以某种方式得到更新,这涉及git mktree。但是那里到底发生了什么?目录的树是否仅包含添加的文件或之前提交的所有文件?接下来会发生什么?