This question把我的一部分,但我仍然失去了一些东西。如何分离一个Git仓库干净?
我有一个单用户存储库(所以在重写历史记录与推/拉时没有问题),我已经开发了产品代码并支持代码和文档。
经过一年多的工作,我终于看到了光明,并希望将我的回购分为两部分。这是我试过的:
- 在项目根目录下创建两个新目录;让我们称他们为项目/代码和/工程/支持/
- 混帐MV所有代码的东西到Code/
- 混帐MV所有支持的东西到支持/
- 复制和修改的.gitignore适当
- 承诺一切
现在,当我运行了我认为正确的命令:
git filter-branch -d /cygdrive/z/temp/ --subdirectory-filter Code/ -- --all
我只是得到一种超然分支一个单一的提交,我的原始分支仍然在那里(如original/refs/head/brent
),而其他所有分支都是原样。
我真正需要的是重写历史,就好像代码/目录是“永远存在”,而Support/stuff不是,反之亦然。
我是一个相对的Git小白,所以我敢肯定,我已经错过了一些重要的概念 - 请填写我
OK,我做到了这一点,而且它似乎。做我所需要的,非常感谢。我有一对夫妇补充问题:
我加了-r以允许移除完整的目录。它是否正确?我实际使用的命令是:
git的过滤分支--index过滤器\
'git的RM -r --cached - 忽略的不匹配' \
- - 所有- 的仓库现在的提交次数大约是我预期的两倍。这些在gitk中显示为与名称为“original/refs/heads/TestSys”的东西链接在一起。
我假设这些是原始提交树;我如何摆脱它们?他们不会出现在fsck中,修剪和gc - agressive都不能摆脱他们。
嗯,哦,只是读了精细的手册;去尝试git克隆来修剪cruft。
好的,现在我已经完成了克隆,并且存储库已缩小到原始大小。克隆似乎只是复制的分支信息当前(源回购)头,我不得不手动设置其他分支机构与此:
for n in `git branch -r|grep -v 'HEAD'` ; do git branch ${n/origin?/} $n ; done
有没有一种简单的方法,在克隆的时间来做到这一点?
加上这个:我不希望看起来忘恩负义,但现在有“空”提交,它只用于触摸现在已经消失的文件。
有没有简单的方法来消除这些?
非常感谢您的帮助和耐心。