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; doneThe 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