2016-05-17 10 views
0

私は自分のsvnリポジトリをgitに移行しましたが、何らかの理由でトランクフォルダが残っています。私は履歴ラインを傷つけることなくこれらのフォルダを削除したい。トランクフォルダを削除するGit filter-branch

これは、現時点では私が持っているgitリポジトリである:

- My repository 
    -- Project1 
    --- trunk 
     ---- src 
     ---- somefile.txt 
     ---- someotherfile.cpp 
     ---- andanotherfile.cpp 

、これは私が持っているしたいものです。

- My repository 
    -- Project1 
    --- src 
    --- somefile.txt 
    --- someotherfile.cpp 
    --- andanotherfile.cpp 

私は、コマンドフィルタ分岐が使用されていることを知りましたしかし、私は、thisthisを除いて、私の場合に合った例を見つけることができませんでしたが、そこにさえ、私はちょっと混乱していました。誰かが似たようなものに遭遇し、それらが解決策であることを確認できますか?

ありがとうございます。

更新:だから私は、次のコマンドは、行為を行うためにほとんどの時間を使用していることを知った:

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 

は確かに、私は、sedの行をチェックし、それがあろうと私に教えてくれありませんトランクを外し、内側のものを上位ディレクトリに移動します。ただし、実行は次のエラーを返します。

../myrepository/.git-rewrite/t/../index.new': No such file or directory 

このエラーが発生する理由はわかりません。私はそれを見て、それはのように、HEADの前の数字、このコマンドに追加する必要があるようです。しかし、私はこれが何であるか(私はリビジョン番号、おそらく、なぜですか?)、または私が何であるかを知りません。助けていただければ幸いです。ほぼ手に入れました!

答えて

0

を持つことが、ここでは行きます。

魔法があるんコマンド:第二または第三の早いのいずれかでなければなりません

git filter-branch -f --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"' af117ec86a30ba6676571cd1f73083c5cfbec0bd..HEAD 

ノートは..HEAD前にタグをコミットするには、ユーザーが入力しなければならないタグ​​をコミットします。最初に入力すると、エラーが発生します。コミット早いのタグをコミットを調べるに

、単純に使用します。

git log 

な限り多くをスクロールダウンして、そこには早いコミットが表示されます。二番目または三番目を取る。完了しました。

0

クローン別のレポは、テストので

git filter-branch --tree-filter 'cd Project1;cp trunk/* ./; rm -rf trunk' 
+0

このコマンドをどうしたらよいですか? 'cd:Project1にはcdできません、' 'cp:can not stat trunk/* ':'/usr/lib/git-core/git'という結果のファイルやディレクトリはありません。 -filter-branch:361:/ usr/lib/git-core/git-filter-branch:can not open ../commit:そのようなファイルはありません。 '../map/f4a19a767a46968b29e129c6d811b1cd3bd56eec:ディレクトリが存在しませんでした。 。 –

+0

それはトランクがsvnの機能だと思われますか?申し訳ありませんが、私はsvnについて少し知っています。歴史はどうですか?とにかく、あなたはレポをバックアップし、可能な方法を試してみることができます。 – ElpieKay

+1

したがって、Project1フォルダはルートコミットからリポジトリに追加されませんでした。Project1を含まないコミットを書き直すと、cd、cp、rmは失敗します。もっとテストをします。 – ElpieKay

関連する問題