summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b2c2e4c)
raw | patch | inline | side by side (parent: b2c2e4c)
author | Michal Sojka <sojkam1@fel.cvut.cz> | |
Thu, 28 Jan 2010 09:08:46 +0000 (10:08 +0100) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Thu, 28 Jan 2010 21:49:53 +0000 (13:49 -0800) |
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>
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>
git-filter-branch.sh | patch | blob | history |
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 195b5ef48ed3371b2010f9caf711e12089da9c06..7c4ad7dcf9c29030ac5c40a0ef3820c8b0287f8a 100755 (executable)
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
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 \