有选择地将文件和目录移动到新的存储库(保留历史记录)

Fru*_*ner 4 git git-filter-branch

我有一个结构如下的项目:

src/
scripts/
db/
other_stuff/
even_more_stuff/
file1
file2
file3
Run Code Online (Sandbox Code Playgroud)

该存储库需要拆分。数据库和脚本需要分成自己的存储库,我知道这可以很容易地完成git filter-branch --subdirectory-filter ...

我还需要根据当前结构(包括历史记录)创建一个新的主存储库,但排除已拆分到其自己的存储库的任何内容要排除的特定文件列表中的任何文件:file1file3even_more_stuff。有没有一种方法可以按git filter-branch特定名称过滤掉文件?

最终的主仓库应该是:

src/
other_stuff/
file2
Run Code Online (Sandbox Code Playgroud)

一个问题是我不应该对原始存储库进行任何更改,因此我不能只删除filefile3等...然后将其余部分复制到新存储库。

Fru*_*ner 13

好的,这是我使用 git-filter-repo 的方法:

  1. 安装 git-filter-repo ( https://github.com/newren/git-filter-repo )
  2. 新克隆源代码库
  3. cd my-source-repo
  4. git filter-repo --path src --path other-stuff --path file2
  5. 检查结果、剩余文件,git log看起来没问题。
  6. 克隆目标存储库(我的是空的)
  7. cd my-target-repo
  8. 将源添加为目标的远程:git remote add src-repo path/to/my-source-repo
  9. 从源存储库中拉取:git pull src-repo main --allow-unrelated-histories
  10. 清理远程:git remote rm src-repo
  11. 推送到原点:git push --set-upstream origin main

(在适当的情况下更改分支名称)

我只做过一次,所以我不知道是否有更短、更简单的方法,但这仍然比使用git filter-branch.