Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git subdirectory filter with existing directory structure

I'm splitting out a Git repository using the --subdirectory-filter option of filter-branch which is working great except it pulls everything up to the root of the repository.

I currently have

ABC
  - DEF
      - GHI
      - JKL
  - MNO

And the result of this command:

git filter-branch -f --subdirectory-filter ABC/DEF --prune-empty -- --all

Generates this:

GHI
JKL

Where what I really want is this:

ABC
  - DEF
      - GHI
      - JKL

I can't see anything in the Git docs that shows a filter option which preserves (or sets) the directory structure and I haven't been able to find a command I can run after the filtering to remap the structure to how I want it.

Is this possible?

like image 753
JRoughan Avatar asked Sep 12 '11 03:09

JRoughan


1 Answers

I found an answer here which does the trick.

The command:

git filter-branch -f --index-filter 'git ls-files -s \
| sed "s-\t-&ABC/DEF/-" \
| GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info \
&& mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE'

works perfectly

like image 61
JRoughan Avatar answered Oct 23 '22 06:10

JRoughan