问题标签 [svn2git]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6574 浏览

git - 如何将平面 svn 存储库迁移到 git 存储库

我有一个扁平的 svn 存储库,如下所示:

这个 repo 没有分支或标签,我要做的就是将它转换为 git 存储库并维护提交历史记录。

我努力了:

git svn clone --trunk=/ -A users.txt svn+ssh://user@svn.example.com/projects/my_repo dest_dir

我认为这会起作用,但是,当我导航到dest_dir并执行git svn fetch时,它似乎没有获取任何东西。使用git log产量:

fatal: bad default revision 'HEAD'

如果我使用svn checkout svn+ssh://user@svn.example.com/projects/my_repo 它返回:

所以存储库是活跃的并且可以访问的。

我尝试了各种工具,包括subgit哪个工具给了我这个错误:svn: E170003: 'stat' not implemented我认为这是因为托管存储库的服务器使用的是旧版本的颠覆。我无法控制服务器,因此无法执行更新。

我也尝试过使用svn2git, 使用命令

svn2git svn+ssh://user@svn.example.com/projects/my_repo --rootistrunk -authors users.txt --verbose

但这给了我另一个错误:

E: 'svn+ssh:/user@svn.example.com/projects/my_repo' is not a complete URL and a separate URL is not specified command failed

这难倒了我,我不知道为什么它不起作用。基本上我想知道如何在保持历史记录的同时将我的 svn 存储库变成 git 存储库。希望有人可以帮助我,或者指出我正确的方向。从未意识到将这个简单的 repo 转移到 git 会如此困难!

谢谢

0 投票
1 回答
343 浏览

git - 在大型 Git 存储库中更改多个作者

我有一个非常大的 Git 存储库(几乎 20K 次提交,3GB+,10+ 个作者),我正在从 Subversion 转移到 Github。我已经使用nirvdrum 的 svn2git(不是gitorious 上的 svn2git)移动了 repo,但是我没有设置作者文件来映射作者。还没有人使用这个 repo,也没有人克隆它,我已经告诉大家我正在做的改变会破坏任何克隆。

所以,我想做的是重写提交历史中的作者电子邮件,以便 Github 正确链接到那些 Github 用户。

我不想一次重写它们(正如Change the author and committer name and e-mail of multiple commits in GitRewrite author of Git commits所建议的那样),因为每位作者大约需要 30 分钟(我已经这样做了一位作者),我想在 repo 中的所有分支上进行所有提交,而不仅仅是当前分支。

0 投票
1 回答
104 浏览

linux - svn2git - “热迁移” 保留文件权限

我们正在将 SVN 迁移到 Git。在一个项目上。

一切都很好,但是我在保留一些未跟踪(忽略)的目录和文件的权限(文件模式)方面遇到了问题。我们以下流程:

  • 清理 SVM 存储库(整理、清理未提交的内容等)
  • 本地环境上的 svn2git(从联网的 SVN 迁移 - 所以最新版本,没有进一步的提交,这确实包括正确的authors.txt映射和对分支、标签等的正确跟踪)
  • 创建被忽略的文件和目录 li (.gitignore)st - 部分自动化svn propget,手动完成(逐行)
  • 添加遥控器并推送到它(我们使用的是 github,但它应该无关紧要)

    在这个阶段遥控器已经准备好,所有的历史都被转换了。现在是我想在不更改目录、移动文件或创建符号链接的情况下热迁移服务器部署的困难部分。假设有两个镜像环境位于两台不同的服务器上——一个用于测试版,一个用于生产版。让我们说目录是/var/www/depl/例如/。问题是,作为每个 Web 项目,都有我们不需要跟踪的目录和文件。 我将用命令编写我的步骤,因为我认为它也可以成为其他人的一个很好的指南。所以在服务器上的策略是:

  • 去那里cd /var/www/depl/

  • 通过备份到另一个目录rsync并按原样保留权限!
  • 递归删除所有 .svn 目录find -type d -name .svn -exec rm -rf {} \;
  • 初始化一个空的 git 存储库git init(注意我们没有使用“裸”存储库)
  • 添加 GitHub 远程并将其命名为“origin”,同时下载所有分支git remote add -f https://github.com/ORG/REPO
  • 检查状态(本地副本应该是干净的)
  • 拉(所以 fetch + merge 但它实际上只是一个合并git pull origin master

这最后一步破坏了我的权限。还记得那些我不想/不需要跟踪的文件吗?现在看来,这些人的权限已被修改。它们都被正确地忽略了,但是当我应用拉/合并时它会中断。好的,确定问题来自远程存储库并通过合并。这不是问题,而是文件是如何提交的(使用什么文件模式)。

问题是: 在最后一步,拉取更新时,我可以指示 git 保留所有文件的当前文件权限吗?如在当前目录中并递归向下? 所以:不要更改任何本地权限?

是的,也许我之后会有一个差异和一些东西要提交,但这并不是一个大问题,因为权限被破坏了。

所以?有办法吗?服务器当然运行 Linux。

提前致谢。

干杯!

0 投票
1 回答
177 浏览

svn2git - svn2git 停止处理并显示错误消息“命令失败”

在使用 svn2git 将 svn 项目转移到 git 项目时,我遇到了以下问题。

命令失败:git checkout -b "1.7.8" "remotes/svn/1.7.8"

0 投票
1 回答
56 浏览

windows - svn2git迁移后的git子树拆分问题

我刚刚使用 git2svn 命令行工具将一个大型嵌套 SVN 存储库转换为 git,现在有一个 git 存储库D:\project

repo文件夹结构如下:

我想提取\web\projectA到一个新的 git repo 上传到 github。

经过一些研究,我使用了git subtree split --prefix=web\projectA -b justprojectA

然而,运行 subtree 命令后的新分支仍然包含来自 repo 根目录的所有文件夹,并且似乎根本没有工作。

我在 Windows 7 上使用 git shell。

0 投票
1 回答
463 浏览

git - SVN 到 git 迁移只创建 .git 文件夹

我正在尝试从 svn 迁移到 git。我尝试使用以下工具这样做

然而,这两个工具只创建了一个.git文件夹,没有签出文件和文件夹(说一个工作副本)。

git-svn尝试执行以下操作

我到底做错了什么?

ps 我试过谷歌搜索,但所有博客都声称这两个命令都应该创建一个包含所有文件和文件夹的本地存储库。还有一次我使用 hg convert 将 svn 项目转换为 mercurial 项目。在将 svn 项目转换为 mercurial 项目后,我完成了 hg up 或类似的操作,它带来了项目的所有文件和文件夹,我可以轻松地将该项目推送到 mercurial 服务器。这里我只有一个 .git 文件夹。我错过了哪一步,或者我到底做错了什么?

0 投票
0 回答
104 浏览

git - svn2git 结合起来回购

我对svn2git 转换器有一个非常奇怪的问题。

我有 2 个 svn 存储库(都是 svn 1.7 和在 Windows 中开发的)。我创建了一个 python3 脚本来自动同步 repos 并每天将其推送到我们的 gitlab 服务器(转换器在虚拟 ubuntu 实例上运行)。一切正常,但今天我看到我的回购搞砸了。第一个 repo 包含来自第二个 repo 的内容,第二个 repo 包含来自第一个 repo 的内容。怎么可能???

有人对svn2git有这种问题吗?有没有人知道一个很好的工具来自动检查每次提交(svn vs git)以确保每次提交都很好?

编辑:这是我使用的脚本(它有点 hacky :-))

克隆示例:

它使用本地目录名称MyLocalDir将我的 svn-repo 克隆到我的 local-repo 目录(存储所有转换的 repos 的地方)

同步示例:

参数 all 同步我的 repo 目录中的每个 repo。我也可以使用目录名称而不是 MyLocalDir,但我使用了 99% 的 all 参数

推送示例:

推送标签示例:

问候唐卡

0 投票
1 回答
597 浏览

ruby - 安装 svn2git gem 时出错 (EADDRNOTAVAIL)

在将 svn2git 用于我的真实项目之前,我正在尝试在测试 PC 上使用它。所以我已经安装了 tortoiseSVN 和一个在本地存储库中使用 SVN 的项目(我只在本地网络中进行我的测试,PC 没有连接到其他项目)。

我为我的测试安装了 GIT(V 1.9.5-preview20150319),并在 V2.2.2 中安装了 Ruby 以使用 gem。我点击了这个链接:http ://www.troyhunt.com/2014/08/migrating-from-subversion-to-git-with.html

但是当我输入命令:“gem install svn2git”时,它不起作用,我有以下错误:

ERROR : while executing gem ... (Errno::EADDRNOTAVAIL) The requested address is not valid in its context - connect(2) for "0.0.0.0" port 53

我下载了 svn2git-2.3.2 并将其放在 Ruby22\lib\ruby\gems\2.2.0\gems\svn2git-2.3.2

如果您有任何建议..谢谢

0 投票
2 回答
1548 浏览

svn2git - 如何使用 svn2git 排除某些分支?

我在 Windows 上运行 svn2git,并希望从迁移过程中排除一些分支。这是如何实现的?

0 投票
1 回答
106 浏览

git - Git 迁移:将提交从一个仓库复制到另一个仓库,包括合并提交并保留历史记录

我们最近的项目(大约 4 个月前)从 SVN 转移到了 git。我们最初的迁移是由一个具有基本 git 知识的人完成的。我们的 git repo 现在有点混乱(有一个提交删除了 100 万个文件,差异就像 25G)。

我想修复git repo,因为blame 退出时出现内存不足错误,更不用说sonarqube 需要很长时间才能运行。

项目布局为:

我们在 svnroot 下的子目录中有几个模块。

现在我们有一个“大” git repo,其中所有模块都是子目录。

我无法导入整个 svnroot(我只对树干感兴趣),并尝试了包括 git svn 在内的几种工具,但没有奏效。

我读过一个关于同样问题的问题:https ://serverfault.com/questions/420828/migrate-multiple-svn-repositories-into-single-git-repository

我做了什么:

管理导入子目录(使用 svn2git ruby​​gem)作为 git repos,并使用过滤器分支移动子目录中的文件,并合并开发中的所有内容。删除 100 万个文件后,我检查了旧的仓库。这是基础。

问题:

为了替换我们当前“损坏”的 repo,我需要确保每次提交在 git 迁移之后完成,都将迁移到新的 repo。

我试图挑选提交,但看起来我会丢失历史记录,因为它只保留合并提交的差异。

问题是:

我如何将提交(从旧的存储库,在该特定提交之后)迁移到新的存储库,其中分支和合并提交及其所有历史记录也将被复制?