summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Sojka <sojkam1@fel.cvut.cz>2010-01-28 09:08:46 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-01-28 21:49:53 (GMT)
commit03ca839537c9df35cc58085daa2b75febd373edd (patch)
treee5c8ecf6ad9fe89d232d642a98be8258294ac550
parentb2c2e4c22c6a4fe151f02380d247cf3d9a9d5d1e (diff)
downloadgit-03ca839537c9df35cc58085daa2b75febd373edd.zip
git-03ca839537c9df35cc58085daa2b75febd373edd.tar.gz
git-03ca839537c9df35cc58085daa2b75febd373edd.tar.bz2
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>
-rwxr-xr-xgit-filter-branch.sh2
1 files changed, 1 insertions, 1 deletions
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 195b5ef..7c4ad7d 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -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 \