2016-05-12 10 views
0

私はSVNからGitに移行したプロジェクトが30あります。SVNからGitへの移行後にトランクフォルダの名前を変更

ただし、フォルダ構造を参照すると、各プロジェクトにトランクフォルダが表示されます。これを迅速かつ自動的に削除する方法はありますか?ここで

は、リポジトリ自体がトランクを持っていないことに注意してください、私のsvnフォルダ構造ですが、プロジェクトが実行します。

--MyRepository 
    --Project1 
    --trunk 
     -- files 
    --Project2 
    --trunk 
     -- files 
    --Project3 
    --trunk 
     -- files 
    --Project4 
    --trunk 
     -- files 
    --Project5 
    --trunk 
     -- files 
    -- .. 

そして、これは私のGitのリポジトリに何をしたいです:

--MyRepository 
    --Project1 
    -- files 
    --Project2 
    -- files 
    -- .. 

ありがとうございます。

PS:私は移行に使用するコマンドを共有できると思いました。そこに行く:

+1

あなたがsvnに持っているフォルダレイアウトと、gitで何を持ちたいのかを表示すると、もっと簡単になります。 – kan

+0

今更新しましたので、もう一度チェックしてください。どうもありがとう。 –

答えて

1

だからここに行く。

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

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 

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

1

正しく移行する場合は、trunkフォルダでなければなりません。 git svn--stdlayoutを参照してください。

  1. 正しくやり直しの移行(最も簡単な、しかし あればgitのレポのユーザーに影響します):だから、あなたは3つのオプションがあります。
  2. filter-branchなどを使用してgit履歴を再作成します(最初のものより速く、元のsvn reposは必要ありませんが、git repoユーザーには影響します)。
  3. フォルダを移動してコミットするだけです(もっとも簡単で安全ですが、トランクフォルダは永久に履歴に残ります)。

リポジトリを正しく移行する方法。

/ 
/projectA 
/projectA/trunk 
/projectA/branches/... 
/projectB 
/projectB/trunk 
/projectB/branches/... 

ですから、各プロジェクトのために、2つのgitリポジトリを作成し、2つの移行を行う必要があります:私はあなたがこのようなのsvnレポ構造持って理解したよう

git svn clone --stdlayout full/svn/repo/url/projectA 
git svn clone --stdlayout full/svn/repo/url/projectB 

を事がある - SVNはしていませんトランクとブレッチについて考えてみてください。それはフォルダだと分かっています。 gitに移行するときには、svn repo構造を知っていて、フォルダをブランチにマップする必要があります。

+0

私のSVNリポジトリ自体は 'trunk'を持っていませんが、それぞれのプロジェクトは持っています。だから私が '--stdlayout'を使うとうまくいきません。単純に何もコピーしません。 –

+0

@frageDE自分のアンサーで更新を参照してください – kan

+0

git svn cloneコマンドはgitリポジトリ自体としてプロジェクトを作成しますが、これは私が求めているものではありません。 1つの.gitフォルダを持つ1つのリポジトリと30のプロジェクトが必要です。 –

-1

いいえ、最初は必要に応じてフォルダルートを構造化してから、ルートをマップする必要があります。適切なやり方。

+0

さて、 'git svn init URL --no-metadata --stdlayout'と' git svn fetch'を使用しますが、動作しません。あなたは「正しい」という意味を具体的に説明しますか? –

関連する問題