path: root/
diff options
authorMichal Sojka <>2010-01-28 09:08:46 (GMT)
committerJunio C Hamano <>2010-01-28 21:49:53 (GMT)
commit03ca839537c9df35cc58085daa2b75febd373edd (patch)
treee5c8ecf6ad9fe89d232d642a98be8258294ac550 /
parentb2c2e4c22c6a4fe151f02380d247cf3d9a9d5d1e (diff)
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 <>
Diffstat (limited to '')
1 files changed, 1 insertions, 1 deletions
diff --git a/ b/
index 195b5ef..7c4ad7d 100755
--- a/
+++ b/
@@ -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 \