git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH/RFC] filter-branch: Fix to allow replacing submodules with another content

From
Michal Sojka <sojkam1@fel.cvut.cz>
Date
Jan 11, 2010, 16:33 UTC
Message-ID
<1263227634-11259-1-git-send-email-sojkam1@fel.cvut.cz>

When git filter-branch is used to replace a submodule with another content, it always fails on the first commit. Consider a repository with directory submodule containing a submodule. If I want to remove the submodule and replace it with a file, the following command fails.

git filter-branch --tree-filter 'rm -rf submodule &&
				 git rm -q submodule &&
				 mkdir submodule &&
				 touch submodule/file'

The error message is: error: submodule: is a directory - add files inside instead

The reason is that git diff-index, which generates a part of the list of files to update-index, emits also the removed submodule even if it was replaced by a real directory.

Adding --ignored-submodules solves the problem for me and tests in t7003-filter-branch.sh passes correctly.

Signed-off-by: Michal Sojka <sojkam1@fel.cvut.cz>
---
 git-filter-branch.sh |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 195b5ef..d4ac7fb 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 \
-- 
1.6.6
Next: Johannes Schindelin
Message 1 of 3 in “filter-branch: Fix to allow replacing submodules with another content”
  1. filter-branch: Fix to allow replacing submodules with another contentMichal Sojka, Jan 11, 2010
  2. Johannes SchindelinJan 11, 2010
  3. Michal SojkaJan 13, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.