问题标签 [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.
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
所有相关的历史记录?
git - 获取特定 Git 提交的更改文件列表及其状态
我使用以下 Git 命令
获取已更改文件的列表。
不幸的是,该列表没有指定每个文件的更改类型:添加、修改或删除......等等
如何在特定提交的给定 SHA 中显示更改列表 [更改类型、文件名]。
git - 如何仅使用管道命令复制 git-checkout?
我想避免从我的脚本中调用瓷器命令,但是有没有办法获得一些git checkout <commit>
只使用管道命令的行为,比如checkout-index
?我对工作副本的影响特别感兴趣:假设一切都是干净的,checkout
删除在旧 HEAD 中跟踪而在新 HEAD 中不存在的文件。checkout-index
似乎没有任何删除文件的概念。我能想到的最接近的事情就是打电话
但计算整个差异似乎不必要地昂贵。有没有更好的办法?
git - 从单个分支获取文件的所有版本
给定 git 存储库中的单个分支,我如何获取文件的所有版本?最终所需的输出是每个版本一个新的输出文件(尽管将所有版本打印到 STDOUT 也可以,只要很容易确定每个版本的范围)。
这是我目前正在使用的:
解释我在做什么:
- 用于
rev-list
查找相关哈希 - 去除提交和树的哈希值,只留下文件的哈希值(这些行还包括文件名)
- 剥离文件名
- 运行哈希
cat-file
并生成输出文件
我遇到的两个主要问题是 1)它不健壮,因为它grep
可能有误报,我不确定它是否会跟随文件重命名,以及 2)感觉超级 hacky。
有没有更好的方法来做到这一点,也许可以更好地利用 git 的 API?
git - git refs/heads 子目录安全吗?在这里,还是应该在其他地方?
我有一系列带有前缀的分支,我希望重用此前缀,但不将它们与具有此前缀的现有分支(现在已过时)分组。我暂时在.git/refs/heads
.
我想知道是否有任何不利的副作用,或者更好地建议在哪里放置一组分支名称以给它们一个前缀。目前不需要将它们克隆/推送/拉到任何其他存储库,尽管这种能力可能很好。
PS 如果这些分支也很容易结帐,那就太好了。
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^
我是否正确假设此存储库中的最后两个提交是不可恢复的,我需要重新创建这些提交的内容?在这种情况下,我是否做出了正确的决定?
git - 将 git 的自动完成功能扩展到管道命令
作为对这个问题的跟进,我问自己是否可以告诉 git 为进一步的命令提供它的自动完成功能(分支等),特别是管道命令,如update-ref
.
尽管update-ref
提供了比 更多的灵活性branch -f
,但使用起来相当麻烦,因为您总是必须输入完整的参考名称。这反过来又不会让我想使用它。
对此有什么想法吗?
git - 如何使用 github API 删除 repo 的第一次提交?
我知道可以使用命令行(删除第一个 git commit)
但我无法弄清楚如何使用 github 的 API 完成类似的事情。甚至可能吗?
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 行的文件:
它告诉我:
谁能告诉我一种创建和命名树的方法?
java - Git 提交对象作者和提交者字段
我正在尝试使用在 Linux 机器上运行的 Java 制作服务器,并且我希望我的服务器以与 GitHub 类似的方式支持 Git。我已经想出了很多事情来实现这一目标,但有一件事我想知道......
假设我将以下 Git 对象(带有标题)放气并存储在文件系统中。
最后的“1418335844 +0000”是什么意思?
我认为这可能是以毫秒为单位的时间戳,但是当我解析它时,我使用以下代码得到“1970 年 1 月 17 日”。
不管这可能是什么,我将如何解析它?