有没有办法从具有完整历史记录的仓库中提取文件夹?

时间:2017-04-18 08:22:22

标签: git

我有一个包含许多Visual Studio项目的回购,我想提取到他们自己的解决方案和回购,但我不想放弃历史。

有没有办法从当前版本创建一个具有完整历史记录但仅包含我选择的文件夹的仓库?

我可以克隆回购并删除我不想要的东西,但我希望能节省一些空间。

5 个答案:

答案 0 :(得分:1)

该过程描述为here。如果您不需要使用GitHub(或任何其他托管服务),步骤1到5就足够了。

答案 1 :(得分:1)

在磁盘上创建Git存储库文件夹的多个副本(每个解决方案对应一个解决方案),然后使用 BFG Repo-Cleaner 删除不属于每个文件夹的所有文件夹,有效地重写每个仓库的历史记录,只留下您想要的文件(并保留其历史记录)。

答案 2 :(得分:0)

创建补丁文件

cd ~/repository/path
git log --pretty=email --patch-with-stat --reverse --full-index --binary -- path/to/file_or_folder > /tmp/patc

如果需要,路径替换

sed -i -e 's/deep\/path\/that\/you\/want\/shorter/short\/path/g' /tmp/patch

致力于新的回购

cd ~/another_repository/path
git am < /tmp/patch

答案 3 :(得分:0)

添加到@kowsky答案,您可以使用git-filter-branch来完成相同操作,如下所示:

git clone https://github.com/USERNAME/REPOSITORY-NAME
cd REPOSITORY-NAME
git remote rm origin
git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME BRANCH-NAME
git remote set-url origin https://github.com/USERNAME/NEW-REPOSITORY-NAME.git
git push -u origin BRANCH-NAME

答案 4 :(得分:0)

git filter-branch现在建议使用替代品! (在git版本2.26中检查)

$ git filter-branch --prune-empty --subdirectory-filter ...
WARNING: git-filter-branch has a glut of gotchas generating mangled history
     rewrites.  Hit Ctrl-C before proceeding to abort, then use an
     alternative filtering tool such as 'git filter-repo'
     (https://github.com/newren/git-filter-repo/) instead.  See the
     filter-branch manual page for more details; to squelch this warning
...