15

私はローカルの git リポジトリに取り組んでおり、ローカルの git を既存のsvn リポジトリにプッシュする必要があります。私の git リポジトリは純粋なローカル git リポジトリであり、init を使用したものではありませんgit svn clone

このローカル git リポジトリを svn にインポートするにはどうすればよいですか?

できれば、SVN にインポートされている git 履歴を保持したいと思います。

現在、SVN リポジトリは次のような構造になっています。

https://svnrepohost
           /branches
           /tags
           /trunk
                  /projectA
                  /projectB
                  /newProject

必要なのは、フォルダーが空https://svnrepohost/trunk/newProjectであると仮定して、gitリポジトリを上記にインポートすることです。newProject

4

4 に答える 4

28

私は最終的に次の手順でこの問題を解決しました。

  1. たとえば、インポート先のsvnに適切なプロジェクトフォルダを設定しますhttp://svnrepo/svn/trunk/newProject

  2. 新しいgit-svnリポジトリを作成します

    git svn clonehttp://svnrepo/svn/trunk/newProject

  3. リモートとしてインポートするgitリポジトリを新しいgit -svnリポジトリに追加します

    git remote add origin ../original-git-repo

  4. original-git-repoからすべてのデータをプルします

    git pull origin master --allow-unrelated-histories

  5. ローカルリポジトリをsvnに対してリベースする

    git svn rebase

  6. 変更をsvnにコミットします

    git svn dcommit

  7. リモコンをクリーンアップする

    git remote delete origin

于 2012-07-03T23:58:35.683 に答える
1

これを行う最も簡単な方法はsvn import、Git ディレクトリだけにすることです。ただし、Git のコミット履歴は失われます。

まず、Subversion 構成ファイルで.gitを設定して、ディレクトリがインポートされないようにします。global-ignoresファイルを開き~/.subversion/config(Windows のような場所C:\Users\username\.subversion\configにあります)、 で始まるセクションを見つけ、次のように[miscellany]read のすぐ下に行を追加します。

global-ignores = .git

global-ignores =(前にがない行が既にある場合は、その行の末尾に#追加するだけです。).git

次に、以下を実行します。

svn import <path-to-local-git-repository> https://svnrepohost/trunk/newProject

これにより、ローカルの Git リポジトリの内容がサーバーの必要な場所に正確にコピーされます。

于 2012-06-27T14:20:45.810 に答える
0

SubGitを使用できます。

$ svnadmin create repo.svn
$ subgit configure repo.svn                                                                                                                                                              

...                                                                                                                                                                           

            CONFIGURATION SUCCESSFUL                                                                                                                                                                                   

            Adjust '/tmp/repo.svn/conf/subgit.conf' file                                                                                                                                                               
            and then run                                                                                                                                                                                               
                subgit install "repo.svn"                                                                                                                                                                              
            to complete SubGit installation.
$ nano repo.svn/conf/subgit.conf #edit to set git.default.repository=path/to/your/bare/git/repository
$ subgit install repo.svn

また、Gitリポジトリのベアクローンを作成し、元のリポジトリの代わりにそのクローンへのパスを(git.default.repositoryで)指定することをお勧めします。つまり

$ git clone --bare path/to/your/original/repository path/to/your/bare/git/repository

「subgitinstall」コマンドの後、リポジトリ(repo.svnとrepo.git)は継続的に同期されます(Gitのpre-receiveフック(ベアリポジトリへのプッシュを開始)とSVNのpre-commitによってトリガーされます)。同期を停止するには、次のコマンドを実行します

$ subgit uninstall repo.svn
于 2012-06-22T10:43:30.047 に答える