代码之家  ›  专栏  ›  技术社区  ›  neu242

SVN到Git迁移后,如何列出和获取远程分支?[副本]

  •  4
  • neu242  · 技术社区  · 14 年前

    在a的帮助下 Jon Maddox blog post blog post from Marc Liyanage 以及 SO answer from Casey 我能把一个解决方案拼凑起来。谢谢你的帮助!

    local$ svn log svn://server/opt/svn/our_app |grep ^r[0-9] | cut -f2 -d\| |sort |uniq | tee ~/users.txt
    alice
    bob
    eve
    local$ vim ~/users.txt
    local$ cat ~/users.txt
    alice = Alice Malice <alice@malice.doh> 
    bob = Bob Hope <bob@hope.doh>
    eve = Eve Leave <eve@leave.doh>
    

    然后我从我们的svn repo创建了一个git repo:

    local$ mkdir our_app
    local$ cd our_app
    local$ git svn init --stdlayout svn://server/opt/svn/our_app 
    local$ git config svn.authorsfile ~/users.txt
    local$ git svn fetch
    local$ git svn create-ignore
    local$ git commit -m 'added .gitignore, created from svn:ignore'
    local$ for remote in `git branch -r`; do git checkout -b $remote $remote; done  
    

    local$ ssh server
    server$ mkdir /opt/git/our_app.git
    server$ cd /opt/git/our_app.git
    server$ git --bare init
    server$ git config core.sharedrepository 1
    server$ git config receive.denyNonFastforwards true
    server$ find objects -type d -exec chmod 02770 {} \;
    server$ exit
    local$ git remote add origin ssh://server/opt/git/our_app.git
    local$ git push --mirror
    

    local$ git clone ssh://server/opt/git/our_app.git
    local$ cd our_app
    local$ git branch -a
    * master
      remotes/origin/master
      remotes/origin/pre-svn-move
      remotes/origin/tags/mytag-0.1
      remotes/origin/tags/mytag-0.2
      remotes/origin/trunk
      remotes/origin/mybranch-1
      remotes/origin/mybranch-2
    

    现在可以签出远程分支:

    local$ git checkout -t origin/mybranch-1
    local$ git branch
      master
    * mybranch-1
    

    最后说明: ebneter's tip about svn2git

    2 回复  |  直到 8 年前
        1
  •  1
  •   ebneter    14 年前

    如果这是一个单向转换(永远不会返回到svn),我强烈建议使用 svn2git

    svn2git <svn repo url> --authors <author names & emails file>
    git remote add origin <git bare repo url>
    git push --all
    git push --tags
    

    ... 这就是它的全部。

        2
  •  0
  •   VonC    14 年前

    我能在你的序列中找到的唯一可疑命令是

    git config branch.master.remote origin
    

    首先,你的第一个本地回购协议(来自 git svn fetch

    你能试试 没有 git config branch.master.remote origin ?