我想从已经存在的仓库的子文件夹中创建一个独立的仓库。
将(移动)子目录分离为单独的Git存储库 就是这样做的。但是,我无法得到干净的仓库。新仓库有两个问题:
- 历史记录似乎重复了;
- 我无法保留分支历史记录。
这是我所做的:
$ git clone ssh://.../repo.git
$ cd repo
$ git filter-branch --subdirectory-filter subdirectory HEAD -- --all
$ git reset --hard
$ git gc --aggressive
$ git prune
在此之后,似乎我拥有了仓库的原始历史和新的历史。我输入 "git log --all --graph" (或 gitk --all) ,我看到,作为第一次提交,是第一个仓库的最初提交。然后,图形显示了原始仓库的完整历史,直到最后一次提交。接下来,我有了第二个历史,位于第一个历史之上,只显示我想要的子文件夹的历史。但在那部分历史中,我只有 "master" 而没有分支/合并。
"git log"、gitk 或 gitg 都仅显示 "flatten" 历史,不显示子文件夹的平坦历史之前的原始仓库历史。
我尝试只使用 "filter-branch" 命令,在克隆结果仓库时(用--no-hardlinks),使用:
$ git filter-branch --subdirectory-filter subdirectory -- --all
而不是:
$ git filter-branch --subdirectory-filter subdirectory HEAD -- --all
但结果相同。
我是做错了什么还是git出了问题?我真的没有头绪...使用git 1.7.6。谢谢。
编辑:我认为问题可能来自于合并提交被filter-branch忽略,从而得到一个平坦的历史记录,没有分支或合并...
git branch -a
命令可以查看分支历史吗? - Andy