use*_*648 2 python git dulwich
我有一个带有一些分支的现有仓库。我想在该 repo 上创建一个没有任何历史记录的新分支。我正在尝试使用 Dulwich 来执行此操作,它支持大多数 git 操作,但不支持孤儿标志。
在不实际使用该标志的情况下创建孤立分支的等效 Git 操作是什么?理想情况下,我想:
这是可能的还是我需要创建一个空的新分支,克隆到一个单独的目录并将内容复制回来?
注意:我不使用德威,也不能肯定地说任何关于它的信息。取决于它从头开始重新实现了多少 Git,Git所做的事情可能无关紧要。
在 Git 中,孤儿分支实际上是一个不存在的分支。什么git checkout --orphan newbranch确实是写的名字newbranch进入HEAD,而不实际创建newbranch。
更具体地说,除了一致性和错误检查之外,1之间的区别:
git checkout -b newbranch
Run Code Online (Sandbox Code Playgroud)
和:
git checkout --orphan newbranch
Run Code Online (Sandbox Code Playgroud)
是前者运行:
git update-ref refs/heads/newbranch HEAD && \
git symbolic-ref HEAD refs/heads/newbranch
Run Code Online (Sandbox Code Playgroud)
后者运行:
git symbolic-ref HEAD refs/heads/newbranch
Run Code Online (Sandbox Code Playgroud)
第一步,git update-ref实际上创建了分支。
第二步,git symbolic-ref设置我们“在”分支上。
那么,孤儿分支是我们“在”上的一个不存在的分支。
实际的分支创建发生在稍后,当我们进行新的提交时。所以它不是git checkout创造这些的;是git commit!提交操作基本上包括:
git write-tree);HEAD并检查挂起的合并);HEAD写入当前分支名称(或直接写入HEADifHEAD已分离)。第 5 步是创建分支的地方。在第 2 步中,如果HEAD命名一个不存在的分支,则它不贡献父哈希 ID,因此新提交没有父级(推测此时没有记录的其他父级进行合并)。
如果Dulwich 在这里的行为与 Git 相同——这很可能是因为这种特殊的状态,在一个不存在的分支上,是 Git 引导空存储库的方式,这是执行此操作的显而易见的方法——那么你所拥有的一切要直接实现您想要的内容,要做的是重写HEAD信息(但 Dulwich 存储它),使其指向这个不存在的分支。
1git checkout -b newbranch还提供git checkout -b newbranch startpoint。使用不同的起点会产生一系列副作用:Git 首先尝试在git checkout startpoint内部进行,这可能会对索引和工作树进行任意修改。
| 归档时间: |
|
| 查看次数: |
481 次 |
| 最近记录: |