Skip to content

Commit

Permalink
filter-branch: Fix to allow replacing submodules with another content
Browse files Browse the repository at this point in the history
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 <sojkam1@fel.cvut.cz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Michal Sojka authored and Junio C Hamano committed Jan 28, 2010
1 parent b2c2e4c commit 03ca839
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion git-filter-branch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down

0 comments on commit 03ca839

Please sign in to comment.