git filter-branch和子目录filter

时间:2019-05-28 19:05:26

标签: git git-filter-branch

Git将文件夹拆分为具有所有分支,标签和历史记录的新存储库。

source_repo
component1/{file1/sub-dir1}
component2/{file2/sub-dir2}

target_repo1 (target repo to be like this)
component1/{file1,sub-dir1}

target_repo2 (target repo to be like this)
component2/{file2,sub-dir2}

“ git add -A”的git文档说,它更新索引以匹配树。如果没有更改,为什么要更新索引以匹配工作树。 git add和git commit是否需要for循环?签出将远程跟踪分支拉到本地存储库。是否有合理的理由让git在for循环中添加并提交。在for循环中使用“ git add”有什么优点或缺点。

  

-A,--all,--no-ignore-removal       不仅在工作树具有文件匹配的位置,而且在索引已经具有条目的位置,都更新索引。       这将添加,修改和删除索引条目以匹配工作树。       如果在使用-A选项时未给出任何信息,则会更新整个工作树中的所有文件(Git的旧版本用于限制   更新到当前目录及其子目录。

我正在使用从答案https://stackoverflow.com/a/26033230/3437439复制的脚本

#!/bin/bash
repoDir=$1
folder=$2
newOrigin=$3
cd $repoDir
git checkout --detach
git branch | grep --invert-match "*" | xargs git branch -D
for remote in `git branch --remotes | grep --invert-match "\->"`
do
        git checkout --track $remote
    #    git add -vA *
    #    git commit -vam "Changes from $remote" || true
done
git remote remove origin
git filter-branch --prune-empty --subdirectory-filter $folder -- --all
(script truncated)

在将文件夹从一个存储库拆分到另一个存储库的过程中,做什么和不做什么。请分享。

0 个答案:

没有答案