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>
This commit is contained in:
parent
b2c2e4c22c
commit
03ca839537
@ -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 \
|
||||
|
Loading…
Reference in New Issue
Block a user