将一个文件夹及其历史记录“结帐”到一个新的存储库中

时间:2011-10-15 13:18:07

标签: git

  

可能重复:
  Detach subdirectory into separate Git repository

我猜我所问的完全不可能......但值得问一下:)

我有一个存储库,我保存了代码和二进制文件(如PSD)。文件夹结构就像这样(非常简化):

  • GIT-PROJECT
    • DESIGNS
    • CODE

我现在要做的是拆分DESIGNS和CODE ......然后我会将DESIGNS移到Dropbox,而是继续在github上保存CODE。

所以......我的问题是我可以用root用CODE启动一个新的git存储库并保留该文件夹的提交历史记录吗?

注意:我想要摆脱DESIGNS文件夹的原因之一是我需要节省空间:) DESIGNS在此期间变得非常大......我宁愿不升级我的Github付费计划因为那个

谢谢!

2 个答案:

答案 0 :(得分:1)

git filter-branch可以保留历史记录并放弃其他所有内容。

$ git filter-branch --subdirectory-filter CODE

要注意这是破坏性的。稍后您可能想要这样做:

$ git reflog expire --expire=now
$ git gc --prune=now

您将看到存储库大小的显着减少,仅具有CODE的历史记录并删除所有这些无法访问的对象。

答案 1 :(得分:0)

为什么不提交删除DESIGNS的更改并将CODE移至顶级?这样就可以完全准确地保存历史记录。

E.g。 (来自GIT-PROJECT

git rm -r DESIGNS # assumes you've saved DESIGNS somewhere
git mv 'CODE/*' .

git commit -m "Removed DESIGNS, moved code to the top level"

如果您确实要从存储库的历史记录中删除DESIGNS并假装代码始终位于顶层,则可以git filter-branch使用--tree-filter或{{1重写历史,虽然这是一个更复杂的变化。