From: Michal Sojka Date: Thu, 28 Jan 2010 09:08:46 +0000 (+0100) Subject: filter-branch: Fix to allow replacing submodules with another content X-Git-Tag: v1.7.0-rc2~21^2~1 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=03ca839537c9df35cc58085daa2b75febd373edd;p=git.git filter-branch: Fix to allow replacing submodules with another content 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. The following command to remove the submodule and replace it with a file fails: git filter-branch --tree-filter 'rm -rf submod && git rm -q submod && mkdir submod && touch submod/file' with an error: 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. Signed-off-by: Michal Sojka Signed-off-by: Junio C Hamano --- diff --git a/git-filter-branch.sh b/git-filter-branch.sh index 195b5ef48..7c4ad7dcf 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 \