@matheusbsbs / matheus-bagliano / commits / 03ca839537
Fork 0

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>

Michal Sojka committed Jan 28, 2010 at 10:08 UTC 03ca839537c9df35cc58085daa2b75febd373edd
1 file changed +1 -1
git-filter-branch.sh
+1 -1
@@ -331,7 +331,7 @@ while read commit parents; do
331 die "tree filter failed: $filter_tree"
332
333 (
334 - git diff-index -r --name-only $commit &&
334 + git diff-index -r --name-only --ignore-submodules $commit &&
335 git ls-files --others
336 ) > "$tempdir"/tree-state || exit
337 git update-index --add --replace --remove --stdin \