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

2023-12-10

我将 SVN 存储库迁移到 Git 并将其推送到中央存储库。我们有相当数量的标签和分支,但不知何故,我们无法从 Git 客户端列出和获取它们。这很奇怪,因为标签和分支似乎在服务器上可用。

在一个人的帮助下乔恩·马多克斯博客文章, a Marc Liyanage 的博客文章 and a 所以凯西的回答我能够将解决方案缝合在一起。感谢您的帮助!

这就是我最终所做的。首先,我使用 svn 提交者创建了一个文件:

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 <[email protected]> 
bob = Bob Hope <[email protected]>
eve = Eve Leave <[email protected]>

然后我从我们的 svn 存储库创建了一个 git 存储库:

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

重申一下:本指南包括有关远程标记和分支可用性、镜像到远程存储库以及重用 svn:ignore 中的值的提示。我之前没有在一本指南中找到所有这些内容。

最后一点:ebneter 关于 svn2git 的提示也很棒,因为这个实际上将标签保留为标签,而 git-svn 将它们转换为分支。另一方面,我无法让“git svn create-ignore”与 svn2git 一起使用......


如果这是一种单向转换(永远不会返回到 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

...这就是它的全部内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SVN 到 Git 迁移后如何列出和获取远程分支? [复制] 的相关文章

随机推荐