3

レイアウトは次のとおりです。

Branches\
    Project1/
        Branch11/
        ...
        Branch1N/
    Project2/
        Branch21/
    ProjectX/   # not anywhere else
Excluded1\
Excluded2\
Excluded3\
Excluded4\
Programs\
    Excluded11\
    ...
    Excluded1N\
    Project1/   # the main one
    Project2/
    ...
    ProjectN/
Tags\
    Project1/
        Release1/
        ...
        Release69/

除外することができましたが、ブランチ/タグをgitブランチ/タグにマップする方法を完全に理解できません-できれば事後(各クローンには約5時間かかります)。

私はSVNを初めて使用することを覚えておいてください-私は分岐/タグ付けシステムを知りませんし、理解していません。

私はwindozを使用しています-svn2gitはオプションではありません(とにかく、クローンの後にこれを行う方法、またはさらに悪いことに再びクローンを作成する方法に興味がありますが、バニラgitのみを使用します)
また、これを永続的な移行として意図するものではなく、ブリッジとして機能しますSVN と dev で使用される新しい git レポジトリの間 - だから私はできるだけ多くの情報を保持したい - しかし必要以上のものはありません. ある時点で永続的になる可能性があります-空のコミットを(除外されたプロジェクトに)除外する必要があると思います(?)

レポ

指示 :

$ git svn clone --ignore-paths="^(?:Releases|Projects|Scripts|Games|)/|^Programs/(?:Nif Scanner|Nif Viewer|Raziel23x's Oblivion Toolset|Shader Disasm|Shader Editor)/" --authors-file=authors_with_emails.txt svn://svn.code.sf.net/p/oblivionworks/code/ .

クローンの後、私は持っています:

$ git branch -r
  git-svn
$ git branch
* master


要約:除外したいものを除いてクローンBranchesを作成しました-今、gitに「これらのsvnブランチのそれぞれにgitブランチを作成します-デルタを計算して圧縮し、フォルダーを削除する実際のgitブランチを作成します-そしてそれらを追跡します - この (700 mb) タグ ディレクトリは単なるタグです - それについて何ができますか (彼らはそうします)いいえ
コミットに対応します) ?」悪のトランク

私のconfig

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[svn-remote "svn"]
    ignore-paths = ^(?:Releases|Projects|Scripts|Games|)/|^Programs/(?:Nif Scanner|Nif Viewer|Raziel23x's Oblivion Toolset|Shader Disasm|Shader Editor)/
    url = svn://svn.code.sf.net/p/oblivionworks/code
    fetch = :refs/remotes/git-svn
[svn]
    authorsfile = authors_with_emails.txt
[gui]
    wmstate = zoomed
    geometry = 787x377+54+59 305 1127
[remote "github"]
    url = https://github.com/Utumno/wrye_bash_refactoring.git
    fetch = +refs/heads/*:refs/remotes/github/*
[branch "master"]
    remote = github
    merge = refs/heads/master
4

2 に答える 2

1

私は最近、このようなことをしました。

まず第一に、svn から git に移動したにすべてを再配置する理由がわかりません。私はそれが可能であることを疑います。

第二に、svn2git なしでこれを行うことは夢にも思いません。あなたが言及しているWindowsの問題が何であるかわかりません-svn2gitはRubyで書かれています。避けられるなら Windows はやりませんが、Cygwin を介して Windows 用の Ruby 実装が存在することは確かです。

3 番目に、これが鍵でした。変換する前に、svndumpfilter を使用して、 svnリポジトリを希望どおりに (つまり、svn2git が喜んで消費する形式で) 取得しました。これには試行錯誤が必要でしたが、最終的にはうまく機能しました。

http://svnbook.red-bean.com/en/1.7/svn.reposadmin.maint.html#svn.reposadmin.maint.migrateおよびhttp://svnbook.red-bean.com/en/1.7/svnを参照してください。詳細については、 .reposadmin.maint.html#svn.reposadmin.maint.filtering (SVN バージョンのリンクを調整してください) を参照してください。

編集:これをコメントにしましたが、長すぎます。あなたができる最善のことは、次のようなものだと思います:

[svn-remote "svn"]
    ignore-paths = ^(?:Releases|Projects|Scripts|Games|)/|^Programs/(?:Nif Scanner|Nif Viewer|Raziel23x's Oblivion Toolset|Shader Disasm|Shader Editor)/
    url = svn://svn.code.sf.net/p/oblivionworks/code
    fetch = Programs/Wrye Bash:refs/remotes/git-svn/Wrye Bash
    branches = Branches/Wrye Bash/*:refs/remotes/git-svn/Wrye Bash/branches/*
    fetch = Programs/Skyrim Viewer:refs/remotes/git-svn/Skyrim Viewer
    fetch = Programs/CBash:refs/remotes/git-svn/CBash
    branches = Branches/CBash/*:refs/remotes/git-svn/CBash/branches/*
# etc.

つまり、fetch、および該当する場合は、branches関心のある各プログラムの行です。リンク先の回答のように、もう一度.git/svn/.metadata実行する前にファイルをパージする必要がありますgit svn fetch

しかし、これは私の以前のコメントに影響を与えるものではありません。git の履歴は完全に線形であり、プロジェクトの実際の分岐およびマージの履歴を反映していません。これを永続的な移行にすると、これは望ましくありません。

于 2013-07-27T16:29:36.270 に答える