我从2006年开始使用CVS进行主要项目,于2008年移至Subversion,于2021年移至Git,但一开始,我还是版本控制的新手,我的存储库混乱不堪,这是我游戏的几种截然不同的实现。
我想将它们移到单独的分支中,但我不想丢失分支之间的历史记录,即,我希望能够在日志中找到一些文件最初位于“ master”分支中,但被移至了“ master”分支中。 “ pre-alpha”分支。我该如何实现?我应该创建一个分支,切换到该分支,删除其中没有任何关系的文件,回到“ master”分支,然后删除新分支中已经存在的文件吗?是为此目的使用Git的正确方法吗?
PS:我是根据Larsks的回答来做的:
git subtree split -b prealpha --prefix trunk
git subtree split -b alpha --prefix alpha
git subtree split -b jme --prefix tuer
git push origin prealpha
git push origin alpha
git push origin jme
git subtree split -b prebeta --prefix pre_beta
git branch -m master oldmaster
git branch -m prebeta master
git push origin oldmaster
仅这最后一行不起作用:
git push origin master
![拒绝] master-> master(非快进)错误:无法将引用推送到“ https://[email protected]/p/tuer/git”
看来您的Subversion -->
Git迁移可能不是最佳选择。您的master
分支包含一堆顶级目录,这些目录看起来可能与Subversion分支相对应。您到Git的迁移应该已经将它们转换为Git分支。
我已经对该项目进行了简要介绍,并且很难辨别各个分支之间的关系。我希望,例如,对的更改pre_beta
会在某些时候与alpha
代码共享一个共同的历史,但是我找不到明显的匹配项。
我们可以git subtree
用来将这些顶级目录拆分为不同的分支。我会做类似的事情:
git subtree split -b alpha --prefix alpha
git subtree split -b pre_beta --prefix pre_beta
git subtree split -b tuer --prefix tuer
git branch -m master old_master
git branch -m pre_beta master
这会将每个目录的历史记录分为一个单独的分支,然后将现有pre_beta
分支变成该master
分支(因为它似乎具有最新更改)。
这使您:
$ git branch
alpha
* master
old_master
tuer
$ git checkout master
$ ls
branding.properties lib NOTICE.txt src
build.xml LICENSE.txt README.txt versioning.properties
$ git checkout alpha
$ ls
about.txt changes_2.rtf contents.txt lib md3 sound tools
bean com drawer main readme.txt target
build.xml connection gpl.txt manifest snd texture
$ git checkout tuer
$ ls
about.txt changes_2.rtf contents.txt jme md2 snd tools
bean com drawer lib obj sound
build.xml connection gpl.txt main readme.txt texture
$ git checkout old_master
$ ls
alpha pre_beta trunk tuer
您可以在https://github.com/larsks/tuer-git上查看结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句