Skip to content

Commit 03ca839

Browse files
wentasahgitster
authored andcommitted
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 <sojkam1@fel.cvut.cz> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent b2c2e4c commit 03ca839

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

git-filter-branch.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ while read commit parents; do
331331
die "tree filter failed: $filter_tree"
332332

333333
(
334-
git diff-index -r --name-only $commit &&
334+
git diff-index -r --name-only --ignore-submodules $commit &&
335335
git ls-files --others
336336
) > "$tempdir"/tree-state || exit
337337
git update-index --add --replace --remove --stdin \

0 commit comments

Comments
 (0)