使用 git checkout --orphan
命令,Git 可以在同一仓库中托管多个有向无环图(DAG)。Git 这个功能的一个经常被引用的用例是将分支分开,例如为文档或 GitHub 的 gh-pages
孤立分支创建静态网站。
除了上述原因,还有其他使用孤立分支的理由吗?
使用 git checkout --orphan
命令,Git 可以在同一仓库中托管多个有向无环图(DAG)。Git 这个功能的一个经常被引用的用例是将分支分开,例如为文档或 GitHub 的 gh-pages
孤立分支创建静态网站。
除了上述原因,还有其他使用孤立分支的理由吗?
另一个可能的用途是将多个存储库合并为一个。以下是一些示例:
在这些情况下,在它们被合并成单一的统一树之前,您将在同一存储库中拥有两个独立的DAG。因此,这不是长期使用,而是一个将暂时经过拥有同一存储库中的独立DAG状态的操作。
来自Git在线文档的另一个用例:
当您想要发布某个提交树但不想暴露其完整历史记录时,这会非常有用。您可能想要这样做是为了发布项目的开源分支,而该分支的当前树是“干净的”,但其完整历史记录包含专有或受限制的代码。
GitHub上的Git项目仓库镜像有一个todo
分支,维护者在其中记录了一些笔记和脚本,这些脚本似乎可以帮助他发布项目的状态更新(“What's Cooking”)[1]。
> ls
add-by CB cook dodoc.sh git-topic.perl KO people RB Release round taboo.perl WCBCC
amlook Checklist.txt Count Doit Gitweb Linus post-applypatch README.cooking RelSave RP TODO whats-cooking.txt
Announce CheckPush count-contributors.sh DoKernelOrg GRADUATED MaintNotes pre-applypatch Reintegrate RelSign SE UWC WI
AT check-topic-merges cycle-run Dothem info Make ProjectContact RelBuild RelStat SR V worklog
candidates compare-cooking.perl docbuild-8.sh genMaintNotes.perl jc.png ML pushall RelClean RelUpload Summary WC
最后发送的消息可以在whats-cooking.txt
中查看。
因此,这不是“为文档分离出一个分支”(这些内容位于主分支上),而是一个用于管理公告的单独分支。可能还有其他东西。
这是该分支上的第一个提交,当然是根提交(没有父级):
commit 1bd90415deccc4562e0fb4d0f8e58140aa687ac1
Author: Junio C Hamano <junkio@cox.net>
Date: Fri Aug 26 00:32:15 2005 -0700
Keep track of to-do document.
This is written in a form of to-do list for me, so if I say
"accept patch", it means I do not currently plan to do that
myself. People interested in seeing it materialize please take
a hint.
Signed-off-by: Junio C Hamano <junkio@cox.net>
† 1:截至提交acb9ef215eb2(What's cooking (2023/03 #01),2023年3月1日)