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

git - 在 filter-branch --tree-filter 之后从 git repo 中删除 refs/original/heads/master?

我在这里提出了同样的问题:New git repository in root directory to subsume an existing repository in a sub-directory

我在这里遵循了这个答案:New git repository in root directory to subsume an existing repository in a sub-directory

现在,gitk --all显示了两个历史:一个在 currentmaster中达到高潮,另一个在original/refs/heads/master.

我不知道这第二个历史是什么,或者如何从回购中删除它。我的存储库中不需要两个历史记录。

我该如何摆脱它?

要复制自己:

现在我们遇到了原始海报的问题。让我们使用上面链接的答案将 git repo 的根目录移动到 project-root :

现在,看看我目前的问题:

我如何摆脱refs/original/heads/master所有相关的历史记录?

0 投票
5 回答
21167 浏览

git - 获取特定 Git 提交的更改文件列表及其状态

我使用以下 Git 命令

获取已更改文件的列表。

不幸的是,该列表没有指定每个文件的更改类型:添加、修改或删除......等等

如何在特定提交的给定 SHA 中显示更改列表 [更改类型、文件名]。

0 投票
1 回答
1066 浏览

git - 如何仅使用管道命令复制 git-checkout?

我想避免从我的脚本中调用瓷器命令,但是有没有办法获得一些git checkout <commit>只使用管道命令的行为,比如checkout-index?我对工作副本的影响特别感兴趣:假设一切都是干净的,checkout删除在旧 HEAD 中跟踪而在新 HEAD 中不存在的文件。checkout-index似乎没有任何删除文件的概念。我能想到的最接近的事情就是打电话

但计算整个差异似乎不必要地昂贵。有没有更好的办法?

0 投票
2 回答
385 浏览

git - 从单个分支获取文件的所有版本

给定 git 存储库中的单个分支,我如何获取文件的所有版本?最终所需的输出是每个版本一个新的输出文件(尽管将所有版本打印到 STDOUT 也可以,只要很容易确定每个版本的范围)。

这是我目前正在使用的:

解释我在做什么:

  • 用于rev-list查找相关哈希
  • 去除提交和树的哈希值,只留下文件的哈希值(这些行还包括文件名)
  • 剥离文件名
  • 运行哈希cat-file并生成输出文件

我遇到的两个主要问题是 1)它不健壮,因为它grep可能有误报,我不确定它是否会跟随文件重命名,以及 2)感觉超级 hacky。

有没有更好的方法来做到这一点,也许可以更好地利用 git 的 API?

0 投票
1 回答
318 浏览

git - git refs/heads 子目录安全吗?在这里,还是应该在其他地方?

我有一系列带有前缀的分支,我希望重用此前缀,但不将它们与具有此前缀的现有分支(现在已过时)分组。我暂时在.git/refs/heads.

我想知道是否有任何不利的副作用,或者更好地建议在哪里放置一组分支名称以给它们一个前缀。目前不需要将它们克隆/推送/拉到任何其他存储库,尽管这种能力可能很好。

PS 如果这些分支也很容易结帐,那就太好了。

0 投票
2 回答
5008 浏览

git - 如何恢复 HEAD^'S 树?

tl; dr:HEAD^如果它被删除并且没有预先推送并且其他所有内容都完好无损,是否可以恢复它的树?

我不小心删除了我的部分.git. 我不完全确定缺少什么。

在发现这git push不起作用后,我运行了一个git fsck

所以我的假设是我只是缺少一些可以从 GitHub 恢复的信息。我的下意识反应是 run git fetch,但返回时没有输出,因为它认为没有什么新东西要获取。

我试过 unpacking .git/objects/pack/pack-ea43d1db155e4502c2250ec1d4608843715c8b1f.pack,几种方法,但它从来没有奏效。例如:

我每次都收到这个错误。(请记住:它是一个--mirror,所以它是 GitHub 所拥有的精确副本- 对吧?那它怎么可能是腐败的呢?)

最终我意识到我实际上并不需要解压缩包文件。我可以将它复制回原始存储库,Git 会很好地拾取它。所以:

这似乎起到了作用。大多。

正如你所看到的,这修复了除了一个缺失的链接之外的所有链接。事实证明,是我尚未推送db238d的提交的 id(恰好是)。HEAD^我是否正确假设此存储库中的最后两个提交是不可恢复的,我需要重新创建这些提交的内容?在这种情况下,我是否做出了正确的决定?

0 投票
1 回答
272 浏览

git - 将 git 的自动完成功能扩展到管道命令

作为对这个问题的跟进,我问自己是否可以告诉 git 为进一步的命令提供它的自动完成功能(分支等),特别是管道命令,如update-ref.

尽管update-ref提供了比 更多的灵活性branch -f,但使用起来相当麻烦,因为您总是必须输入完整的参考名称。这反过来又不会让我想使用它。

对此有什么想法吗?

0 投票
1 回答
80 浏览

git - 如何使用 github API 删除 repo 的第一次提交?

我知道可以使用命令行(删除第一个 git commit

但我无法弄清楚如何使用 github 的 API 完成类似的事情。甚至可能吗?

0 投票
2 回答
371 浏览

git - 使用没有工作树的 git read-tree

我正在尝试使用带有裸仓库的 git 管道命令创建提交历史记录。我可以使用包含 blob 的单个未命名树对象创建提交,但我无法弄清楚如何让这个未命名树对象包含其他树对象。

我尝试使用git read-tree --prefix=tree_name tree_sha 它告诉我:fatal: This operation must be run in a work tree

我尝试git mktree像这样使用(如本页所示):cat ../info.txt | git mktree

info.txt 是一个包含 1 行的文件:

它告诉我:

谁能告诉我一种创建和命名树的方法?

0 投票
2 回答
134 浏览

java - Git 提交对象作者和提交者字段

我正在尝试使用在 Linux 机器上运行的 Java 制作服务器,并且我希望我的服务器以与 GitHub 类似的方式支持 Git。我已经想出了很多事情来实现这一目标,但有一件事我想知道......

假设我将以下 Git 对象(带有标题)放气并存储在文件系统中。

最后的“1418335844 +0000”是什么意思?

我认为这可能是以毫秒为单位的时间戳,但是当我解析它时,我使用以下代码得到“1970 年 1 月 17 日”。

不管这可能是什么,我将如何解析它?