拆分 Git 仓库

4

我目前有一个从svn导入的git仓库,名称为school。在这个school仓库中,我有每门课程的文件夹。

我不知道如何将这个仓库拆分成每门课程的仓库,而不会丢失整个课程的历史记录,我不想这样做。

有什么建议吗?

2个回答

6

git filter-branch 是解决问题的方法。为每个子目录复制一份代码库,然后在每个副本中运行以下命令(将 "myclassname" 替换为您实际的类名):

git filter-branch --subdirectory-filter myclassname -- --all

更详细的过程描述可在Github帮助页面上找到。


2
非常感谢,这个方法非常有效。我已经将其转换为一个 shell 脚本,您可以在此处查看:http://github.com/icco/git-explode。 - icco
也许还可以加上“--remove-empty”选项,以删除不涉及“myclassname”子目录的提交……除非打开了“--subdirectory-filter”选项。 - Jakub Narębski
2
标志是--prune-empty - 它不与子目录过滤器一起启用。 - richq

-1
运行以下命令
git log -u <path>

这将为您提供指定文件夹中每个变更集(包括diff)的变更集列表。
从这里,您可以编写一个脚本来解析git日志输出并在新存储库上运行每个补丁,保留变更集和作者信息。
有点不讲究,但它会起作用。

肯定有比那个更好的方法。我已经有五年的提交记录了... - icco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接