[PATCH 1/2] filter-branch: Fix to allow replacing submodules with another content
- From
Michal Sojka <sojkam1@fel.cvut.cz>
- Date
- Jan 25, 2010, 13:06 UTC
- Message-ID
- <1264424786-26231-2-git-send-email-sojkam1@fel.cvut.cz>
- In-Reply-To
- <1264424786-26231-1-git-send-email-sojkam1@fel.cvut.cz>
When git filter-branch is used to replace a submodule with another content, it always fails on the first commit. Consider a repository with submod directory containing a submodule. If I want to remove the submodule and replace it with a file, the following command fails.
git filter-branch --tree-filter 'rm -rf submod && git rm -q submod && mkdir submod && touch submod/file'
The error message is: error: submod: is a directory - add files inside instead
The reason is that git diff-index, which generates the first part of the list of files updated by the tree filter, emits also the removed submodule even if it was replaced by a real directory.
Adding --ignored-submodules solves the problem for me and tests in t7003-filter-branch.sh pass correctly.
If somebody wants to replace one revision of the module with another, it can be done with --index-filter. Using --tree-filter for this has no sense since --tree-filter "git submodule update --init" fails with Clone of '/tmp/submod' into submodule path 'submod' failed so that the revision must be replaced only in index.
Signed-off-by: Michal Sojka <sojkam1@fel.cvut.cz> --- git-filter-branch.sh | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh index 195b5ef..d4ac7fb 100755 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh @@ -331,7 +331,7 @@ while read commit parents; do die "tree filter failed: $filter_tree" ( - git diff-index -r --name-only $commit && + git diff-index -r --name-only --ignore-submodules $commit && git ls-files --others ) > "$tempdir"/tree-state || exit git update-index --add --replace --remove --stdin \
-- 1.6.6