我有一个git repo,其中包含多个孤儿分支,这些分支包含它们自己独立且不相关的历史记录。结构类似于
C:\repos\original-git-repo>git branch
orphan1
*orphan2
orphan3
事实证明,这对我的工作流程而言是一个糟糕的结构。
如何轻松地将每个孤立分支提取到独立存储库中,同时(a)维护每个孤立分支的历史记录,以及(b)每个新的独立存储库仅包含其匹配的孤立分支中的对象,而不包含原始存储库中的所有对象?
git repos的结果目录树看起来像
C:\repos>
|- original-git-repo/
|- orphan1/
|- orphan2/
`- orphan3/
更新:如下所述,原始存储库的正常克隆似乎会将所有对象克隆到新存储库的.git/objects
目录中,而不仅仅是特定孤儿分支的对象。对于最小的新仓库规模,我能做的最好的事情就是为每个原始的孤儿分支制作这份过于手工的食谱。
$ git init [--bare] <new repo>
# push orphan branch from orig to new repo as `push.default = current` in config
$ git remote add <new repo name> <path>
$ git push <new repo name>
# manually copy relevant tags from orig repo to new repo's `.git/refs/tags` dir
--local --no-hardlinks --branch orphan1 --single-branch
即使只克隆了一个本地/远程分支对,使用克隆也似乎会将所有orig仓库对象克隆到新仓库中。
UPDATE2-首选解决方案:如以下两个答案所示,可以通过git init
或git clone
手动进行的多种方式来解决此问题.git/packed-refs
。我正在根据以下公认的答案使用此食谱。
git init orphan1
cd orphan1
git fetch C:/repos/original-git-repo orphan1:orphan1
git checkout orphan1
git branch -m master
您可以仅使用url和refname来获取所需的任何内容
git init orphan1
cd orphan1
git fetch /path/to/original orphan1:orphan1
和其他人一样
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句