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

Re: How to change a submodue as a subdirectory?

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Nov 15, 2007, 12:28 UTC
Message-ID
<Pine.LNX.4.64.0711151322590.16728@wbgn129.biozentrum.uni-wuerzburg.de>
In-Reply-To
<46dff0320711150014x4a35975eqc53ef1fce7d40b18@mail.gmail.com>
Hi,
On Thu, 15 Nov 2007, Ping Yin wrote:
Show 10 quoted lines
> On Nov 15, 2007 2:16 PM, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> > Provided you do not kill the repository of the submodule (you have some
> > public repo for that, right?) you will not lose anything, since the
> > history of the superproject has pointers to the submodule.
> >
> > But I guess that you want something different... You probably want to
> > rewrite history as if the submodule had not been a submodule at all,
> > right?
>
> Yeah, this actually what i want. Now i find a way:

If this works for you, I am all the more happy for you. I thought that you wanted to be able to go to a certain revision and get the same working directory/directories. (But that is not what you get...)

> 1. move submodule subB outside
>     mv subB /newpath/to/subB
>     git-commit subB
Strictly speaking, you do not have to move it outside.
Show 9 quoted lines
> 2. git-filter-branch to rename all files in subA repository to subB
> directory (say subB/subB).
> 
>        cd newpath/to/subB &&
>        git filter-branch --index-filter \
>                'git ls-files -s | sed "s-\t-&subB/-" |
>                        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
>                                git update-index --index-info &&
>                 mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
No need to play games with GIT_INDEX_FILE, as far as I can tell.
> 3. in directory of super project superA, git-fetch repository subB to
> branch subB
>    cd path/to/superA && git-fetch /newpath/to/subB master:subB

If you plan to do away with subB, you do not need to specify it... Just use FETCH_HEAD, directly after the fetch.

> 4. git-cherry-pick each commit  (except the root commit) of branch
> subB to the super project superA
>     git-cherry HEAD subB | awk '{print $2}' | sed -n '2,$ p' | while
> read name; do git cherry-pick $name; done

The git-cherry call is not really necessary, right? The two repos have no common history (not even common patches).

Besides, I think that what you did is just a complicated way of doing a rebase.

But be aware that checking out older versions of the superproject will still have the submodule!

Ciao, Dscho

Previous: Ping YinNext: Ping Yin
Message 6 of 7 in “How to change a submodue as a subdirectory?”
  1. Ping YinNov 14, 2007
  2. Alex RiesenNov 14, 2007
  3. Ping YinNov 15, 2007
  4. Johannes SchindelinNov 15, 2007
  5. Ping YinNov 15, 2007
  6. Johannes SchindelinNov 15, 2007
  7. Ping YinNov 15, 2007

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.