如何将2个文件作为git子模块提取?

时间:2017-10-02 11:43:42

标签: git split git-submodules git-filter-branch revision-history

我有两个文件想发送自己的新存储库,但我也想保留自己的历史记录,以便新的存储库已经有了一些历史。

我尝试搜索并找到了这些帖子:

  1. Splitting a set of files within a git repo into their own repository, preserving relevant history
  2. How to split a git repository while preserving subdirectories?
  3. Create a submodule repository from a folder and keep its git commit history
  4. 但我无法弄清楚如何编写命令。我试着根据上面的答案运行这个:

    git clone repo
    git remote rm origin
    cd repo
    git filter-branch --tree-filter 'git rm --cached --ignore-unmatch "filename1" "filename2"' -- --all
    

    我期望清理当前的存储库并仅保留这两个文件及其历史记录,然后我可以将其作为新的子模块推送,但在运行命令后,我的所有文件都保留在存储库中。

1 个答案:

答案 0 :(得分:0)

我设法删除了历史记录中的所有文件,除了我需要的两个文件。我必须查看整个历史记录,找出重命名的所有文件的名称,并详细说明一个大文件和文件夹名称列表。然后我运行这些命令:

git clone repo
git remote rm origin
cd repo
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch "folder1" "file1" "etc" -r -f' \
--prune-empty --tag-name-filter cat -- --all
git remote add origin new_bare_empty_remote
git push -u origin master