从已有的repo子目录创建新的git repo

big*_*gie 11 git

我想从已经存在的repo的子文件夹创建一个单独的repo.

将(移动)子目录分离到单独的Git存储库中就可以显示出来.但是,我无法用它获得一个干净的回购.我最终遇到了新回购的两个问题:

  1. 历史似乎重复;
  2. 我不能保持分支机构的历史.

这是我做的:

$ git clone ssh://.../repo.git
$ cd repo
$ git filter-branch --subdirectory-filter subdirectory HEAD -- --all
$ git reset --hard
$ git gc --aggressive
$ git prune
Run Code Online (Sandbox Code Playgroud)

在此之后,我似乎拥有了回购和新历史的原始历史.我输入"git log --all --graph"(或gitk --all)我看到,作为第一个提交,第一个repo的初始提交.然后,图表显示原始repo的完整历史记录,直到最后一次提交.然后,我在第一个上面有一个SECOND历史,显示了我想要的子文件夹的历史.但在历史的那一部分,我只有"主人",没有分支/合并.

"git log",gitk或gitg都只显示"flatten"历史记录:它们不会在子文件夹的展平历史之前显示初始回购的历史记录.

我尝试使用"filter-branch"命令,克隆生成的repo(使用--no-hardlinks),使用:

$ git filter-branch --subdirectory-filter subdirectory -- --all
Run Code Online (Sandbox Code Playgroud)

代替:

$ git filter-branch --subdirectory-filter subdirectory HEAD -- --all
Run Code Online (Sandbox Code Playgroud)

但结果相同.

我做错了什么或者git坏了吗?我真的没有想法......使用git 1.7.6.谢谢.

编辑:我认为问题可能来自于filter-branch忽略了merge提交的事实,因此给出了没有分支或合并的平面历史记录......

Lil*_*ard 0

git filter-branch将所有原始引用保存到它们自己的命名空间中(在 下original/)。听起来你git log --all也在展示那些参考文献。相反,您应该检查您关心的所有引用,如果它们看起来不错,那么您可以丢弃original/名称空间。