filter-branch to remove extra directory

后端 未结 2 647
深忆病人
深忆病人 2020-12-10 14:49

I\'m migrating several Subversion repositories to Git, but they were set up a bit weird: the standard trunk/branches/tags structure lives within several subdirectories of th

相关标签:
2条回答
  • 2020-12-10 15:08

    Figured it out based on a comment here. It seems to be an issue with how git-svn represents "empty" (directory-only) commits. It works fine if I start at a normal commit:

    git filter-branch --index-filter \
        'git ls-files -s | sed "s-/trunk/-/-" |
            GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
                git update-index --index-info &&
         mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' 83df928c..HEAD
    
    0 讨论(0)
  • 2020-12-10 15:14

    Hmm. I can't see anything wrong with what you're running, and it works fine for me in an example repository:

    $ git init
    Initialized empty Git repository in /Users/bcampbel/tmp/git-subdir/.git/
    $ mkdir -p proj1/trunk
    $ echo "hello" > proj1/trunk/test.txt
    $ git add .
    $ git commit -m "initial commit"
    [master (root-commit) cd431f3] initial commit
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 proj1/trunk/test.txt
    $ echo "foo" > proj1/trunk/another.txt
    $ git add .
    $ git commit -m "add a file"
    [master 84139f2] add a file
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 proj1/trunk/another.txt
    $ git filter-branch --index-filter \
    >     'git ls-files -s | sed "s-/trunk/-/-" |
    >         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
    >             git update-index --index-info &&
    >      mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
    Rewrite 84139f26c7921721190b3c5dd57e2b49a41034aa (2/2)
    Ref 'refs/heads/master' was rewritten
    $ ls proj1/
    another.txt test.txt
    

    It appears that for some reason, the index.new file did not get written out on your system, or could not be read by the mv command. I am not sure why this would be, but I wonder if it may be due to the fact that you're using msysgit on Windows. Do you have a Linux box or Mac that you could try it on?

    0 讨论(0)
提交回复
热议问题