repo1
和repo2
之间移动一些文件。我有一个短列表,列出了我想要移动的文件(保留历史记录)。从
repo1
移动三个文件:libraryname/file1
libraryname/file2
tests/libraryname/file3
libraryname/
和 tests/libraryname/
目录下还有其他文件。在 /
和 tests/
目录下还有其他文件夹。
我的计划是先检出 repo1
,然后修改历史记录树,只保留我感兴趣的文件的历史记录。然后检出 repo2
,并合并之前操作的输出。看起来 git filter-branch
是第一步正确的工具。
到目前为止,我已经尝试过 git filter-branch --index-filter 'git rm -r --cached <FILES>'
其中 <FILES>
列出了每个不需要的整个文件夹或文件。
但是这样会留下许多文件夹,这些文件夹在此版本库的生命周期中曾经存在,但在当前版本 HEAD
下不存在。找出该仓库历史记录中曾经存在的所有文件夹和文件似乎相当繁琐 - 必须有更好的方法。
如何最终获得只包括这三个文件的 Git 提交树?是否有比我提出的更好的方法?或者,有没有一种方法可以删除所有当前在 HEAD
下不存在的文件的痕迹?
pip3 install git-filter-repo
,因为它仅使用stdlib,不安装任何依赖项。在Ubuntu 18上,它与发行版的git版本不兼容,但很容易在docker run -ti ubuntu:20.04
上运行它。 - kubanczyk