将 Git 存储库发布到 SVN

2023-12-07

我和我的小团队使用 Git 工作,较大的团队使用 Subversion。我想安排一个 cron 作业来发布我们当前的存储库HEAD每小时进入 SVN 存储库中的某个目录。

我以为我已经弄清楚了,但我之前写下的食谱现在似乎不起作用:

git clone ssh://me@gitserver/git-repo/Projects/ProjX px2
cd px2
svn mkdir --parents http://me@svnserver/svn/repo/play/me/fromgit/ProjX
git svn init -s http://me@svnserver/svn/repo/play/me/fromgit/ProjX
git svn fetch
git rebase trunk master
git svn dcommit

当我尝试时会发生以下情况:

% git clone ssh://me@gitserver/git-repo/Projects/ProjX px2
Cloning into 'ProjX'...
...

% cd px2

% svn mkdir --parents http://me@svnserver/svn/repo/play/me/fromgit/ProjX
Committed revision 123.

% git svn init -s http://me@svnserver/svn/repo/play/me/fromgit/ProjX
Using higher level of URL: http://me@svnserver/svn/repo/play/me/fromgit/ProjX => http://me@svnserver/svn/repo

% git svn fetch
W: Ignoring error from SVN, path probably does not exist: (160013): Filesystem has no item: File not found: revision 100, path '/play/me/fromgit/ProjX'
W: Do not be alarmed at the above message git-svn is just searching aggressively for old history.
This may take a while on large repositories

% git rebase trunk master
fatal: Needed a single revision
invalid upstream trunk

我可以发誓这以前有效,有人有什么建议吗?谢谢。


您的方法存在一些问题:

  • 您似乎正在使用预先存在的 git 存储库,而不是通过初始化的存储库git svn init。变基假定有一个共同的祖先,但是如果您的 git 存储库之前是通过git init, then git svn init将创建第二个根(即无父)提交,并且从一个提示到另一个提示的变基将无法进行--onto.
  • 您使用-s选项git svn init,这会导致它搜索branches/, tags/, and trunk/。作为警告(Using higher level...)明确指出,这导致git-svnconfig 指向 svn repo 的顶部,而不是fromgit/ProjX子目录。
  • 你参考trunk即使这个分支没有充分的理由存在;git svn init实际上创建了一个名为的跟踪分支remotes/git-svn.

所以你想要的实际顺序是:

# 1st time only
svn mkdir --parents http://me@svnserver/svn/repo/play/me/fromgit/ProjX
mkdir px2
cd px2
git svn init http://me@svnserver/svn/repo/play/me/fromgit/ProjX
git svn fetch

现在,黑客攻击可以同时发生在 git 和 svn 中。下次你想要的话dcommit从 git 到 svn,你只需执行以下操作:

cd px2
git svn rebase
git svn dcommit

如果您已经初始化了 git 存储库,开始破解它,并且需要将该历史记录移植到 svn 中,那么仅首次序列会更加困难,因为您需要将所有 git 历史记录移植到 svn 中,即使它们不这样做t 有一个共同的祖先:

# 1st time only
svn mkdir --parents http://me@svnserver/svn/repo/play/me/fromgit/ProjX
git clone ssh://me@gitserver/git-repo/Projects/ProjX px2
cd px2
git svn init http://me@svnserver/svn/repo/play/me/fromgit/ProjX
git svn fetch

# transplant original git branch onto git-svn branch
root_commit=$( git rev-list --reverse HEAD | head -n1 )
git tag original-git
git reset --hard $root_commit
git reset --soft git-svn
git commit -C $root_commit
# N.B. this bit requires git >= 1.7.2
git cherry-pick $root_commit..original-git
# For older gits you could do
#   git rev-list $root_commit..original-git | xargs -n1 git cherry-pick
# or use git rebase --onto but that requires jumping through some
# hoops to stop moving remotes/git-svn.

随后,进行同样的操作svn rebase and dcommit像之前一样。

如果有人想在沙箱中测试这种方法,您可以下载我的测试脚本。我建议您在运行之前进行视觉安全审核;-)

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

将 Git 存储库发布到 SVN 的相关文章

  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • IntelliJ IDEA 中多个 SVN 分支的工作流程

    我想使用 IntelliJ IDEA 在 SVN 主干和一个或几个功能分支之间轻松切换 最好能够同时在多个分支上工作 我有一些 本地 配置 例如用于集成测试的数据库设置和启用的调试日志记录 我想继续使用而不是提交到 SVN 各种选择的优缺点
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 为所有子文件夹设置 git 配置值

    我知道可以设置每个存储库的配置来覆盖用户级配置 即 path to my repo gitconfig覆盖 gitconfig 是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置 即 我有 topLevelFolder1
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • 如何让 Aptana Studio 记住 git ssh 密码

    我找不到任何有关如何获得 Aptana Studio 的内置 git 支持来记住执行推 拉操作的 ssh 密码的指南 信息 有人有什么想法吗 Aptana Studio 实际上是内置的 GIT 程序 它将在 Windows 上的 C Use
  • Git - 如何将整个目录恢复到特定提交(删除任何添加的文件)

    我想恢复 git 中的目录 恢复其中的所有文件 并删除自该提交以来添加的所有文件 进行结账似乎只能满足我的第一个要求 但不会删除任何文件 我想出了最简单的解决方案 git rm path to dir git checkout
  • 无法通过 Git Bash 克隆 git 存储库

    在尝试使用克隆存储库时git clone 它显示以下错误 致命 无法访问 https github com microsoft c9 python getting started git https github com microsoft
  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t
  • 如何提取 Mercurial 中变更集的所有已更改文件?

    直到最近 我们一直在网络工作室的所有项目中使用 SVN 并且 Subversive 和 TortoiseSVN 等多个客户端中存在一个非常方便的功能 可以提取在某个版本中更改的所有文件 Mercurial 有没有办法做到这一点 我不在乎它是
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 部分共享git仓库

    我是 git 新手 我想知道是否支持以下场景 如果支持的话如何支持 即用于设置和更新的 git 命令 可以从三个不同的地方获取存储库 本地 镜像 和 github mirror 完全镜像 local github 镜像 local 但 受版
  • Phonegap使用命令行工具添加插件

    我是phonegap的新手 我按照phonegap官方网站中定义的步骤使用命令行工具创建项目 nodejs 我成功创建项目并添加平台 但是 当我尝试添加插件时出现以下错误 命令 cordova plugin add https git wi
  • Git - 远程:错误:无法运行钩子/后接收:没有这样的文件或目录

    我收到错误 remote error cannot run hooks post receive No such file or directory 当尝试推送到远程时 接收后文件存在于正确的位置 testnew git hooks 并包含
  • Git:如何修改服务器的提交?

    我已经在 EC2 上的 git 服务器上推送了一些提交 而不是在 github 上 如何修改 git 服务器上的这些提交 操作就像 删除提交 例如变基 更改提交消息 是否可以 非常感谢 你几乎可以通过用力推动来完成所有事情 将您的本地树更改
  • 为 RHEL 6 安装/构建 git-svn

    我无权访问 RHEL6 存储库 那么在 RedHat Enterprise Linux 6 上构建和 或安装 git svn 工具的最佳方法是什么 通过卸载现有的 yum擦除git 并从源安装最新的来设法安装git和git svn 1 7
  • 使用Git记录文件复制操作

    当我使用 git mv 在 git 中移动文件时 状态显示该文件已被重命名 即使我更改了某些部分 它仍然被认为几乎是相同的东西 这很好 因为它让我可以跟踪它的历史记录 当我复制文件时 原始文件有一些历史记录 我想将其与新副本关联起来 我尝试
  • 有没有办法导入/导出容器绑定脚本

    我有一个插件 它使用 appscripts gs 以及 html js 和 css 文件 目前我们所做的是我们有一个参考 Google 文档 其中有一个脚本项目包含所有这些源代码 但是除了手动复制和粘贴之外 没有办法在 GIT 中保留源代码
  • Git 认为我每次进行小更改时都在重写我的一个文件

    我有一个中等大小的 Java 文件 每次我对一个文件 BuildTable java 进行更改时 Git 都会将其报告为巨大的更改 即使只是一两行 BuildTable java 大约有 200 行 本次提交中的更改仅更改了一行 git d
  • git 错误:无法处理 https

    当我尝试使用 git clone 时https xxx https xxx我收到以下错误我不处理协议 https 有人可以帮我吗 完整消息 dementrock dementrock A8Se git 克隆https git innosta

随机推荐

  • 如何从 OData Atom feed 反序列化对象?

    我正在尝试解析来自 OData REST 服务的响应 当响应是JSON格式时 很容易使用ReadAsJsonDataContractWCF REST 入门工具包中的方法 然而 如果响应是 Atom feed 事情似乎会更加复杂 这是一个例子
  • 根据余弦相似度值进行聚类

    我从一组 URL 中提取了单词 并计算了每个 URL 内容之间的余弦相似度 而且我还标准化了 0 1 之间的值 使用最小 最大 现在我需要根据余弦相似度值对 URL 进行聚类以查找找出类似的 URL 哪种聚类算法最合适 请建议我一种动态聚类
  • 应用程序安装失败:未知错误 Xcode 7

    我的应用程序在模拟器中运行良好 但当我尝试将其安装在 iPhone 上时 它说 应用程序安装失败 发生未知错误 我打开设备日志并得到以下信息 11 月 12 日 21 17 19 Isaacs iPhone Streaming zip co
  • 简化为派系问题

    子图同构 我们有图 G 1 V 1 E 1 G 2 V 2 E 2 Question 图 G 1 与 G 2 的子图同构吗 即 是否存在 G 2 V V 2 的顶点子集和 G 2 E E 2 边的子集 使得 V V 1 和 E E 1 并且
  • 是否保证新实体的数字自增ID始终大于现有ID?

    是否保证新实体的自动递增ID始终大于现有ID 基本上 我想定期将后台任务中的实体 例如评论 转储到客户创建的大块中 因此 如果现在有 100 个实体 我会将它们存储在 blob 中 并为该 blob 创建辅助实体 例如 class Blob
  • Google Apps 脚本:使用电子表格范围作为参数从菜单调用函数[重复]

    这个问题在这里已经有答案了 我有一个函数 它接受电子表格范围作为参数 然后在给定范围的同一行中添加日期 function autoDate cell var currentDate new Date var currentMonth cur
  • Entity Framework Core 多对多导航问题

    Entity Framework Core 尚未实现多对多关系 如 GitHub 问题中所述 1368 但是 当我按照该问题中的导航示例或类似的答案在 Stack Overflow 上 我的枚举未能产生结果 我的照片和标签之间存在多对多关系
  • 无法比较 SqlBulkCopy 中的列

    这是我的代码 protected void Button1 Click object sender EventArgs e string strFileType System IO Path GetExtension FileUpload1
  • “对齐陷阱”错误意味着什么?

    我的一位朋友在尝试调试开始显示 对齐陷阱 错误的代码时遇到了一个大问题 当特定函数访问全局结构时 就会出现问题 经过在网络上的一些研究 仍然不清楚 对齐陷阱 是什么意思或是什么 有人可以给出一个解释 特别注意通常导致对齐陷阱的原因以及解决问
  • ActionEvent e 是什么意思?

    我正在学习 Java 非常想更深入地了解 ActionEvent e 参数的含义和代表的含义 当我编码时 我不只是想吐出有效的代码 但我不明白 我想在使用概念之前充分理解它们 那么它具体要求什么以及两个部分 ActionEvent 和 e
  • 使用 tidytext 和 broom 但没有找到 LDA_VEM 的 tidier

    tidytext 书中提供了主题模型 tidier 的示例 library tidyverse library tidytext library topicmodels library broom year word counts lt t
  • 扩展 Mach-O 文件中的部分

    我正在尝试从 Dyld shared cache 中提取库 并且需要修复外部引用 例如 中的指针 DATA objc selrefs部分通常指向 mach o 文件外部的数据 为了解决这个问题 我必须从 dyld 复制相应的 c 字符串并将
  • “分段错误(核心转储)”:libioP.h、printf-parse.h、vfprintf-internal.c 等的“没有此类文件或目录”

    核心转储文件中的示例错误 1289 vfprintf internal c No such file or directory 111 printf parse h No such file or directory 948 libioP
  • MVC 中公共字段与属性的数据注释

    为什么 DataAnnotations 不适用于公共字段 例子 namespace Models public class Product Display Name Name public string Title get set publ
  • React Native:如何将 require(path) 与动态 url 一起使用?

    我想使用WebView来显示一些html内容 这是一个例子 return
  • ORM / 如何处理Domain对象和Persistent对象的对应关系?

    在应用程序中 至少有两种方法来处理域对象持久性和 ORM 使用某种 ORM xml 或注释 将域对象直接映射到持久性 Making 关注点分离如果您的域和持久模型 表列 之间存在大量阻抗不匹配 这意味着 域对象与持久性无关 并且存在一些到某
  • 每次打开项目时 Xcode 都会意外退出

    打开 xcode 后 当我打开当前项目时 它会显示类似 xcode 意外退出 的警告 并有 3 个选项 忽略 报告 和 重新打开 当我单击 重新打开 时 它将打开 xcode 窗口 然后再次自动关闭并显示相同的警告 为什么会发生这种情况 如
  • 如何实现多线程并行执行多个任务?

    我是线程编程的新手 我必须在并行和后台运行一些任务 以便主 UI 执行线程保持对用户操作的响应 并等待每一项任务完成 然后再继续进一步执行 就像是 foreach MyTask t in myTasks t DoSomethinginBac
  • 操作按钮和observeEvent

    我想要一个按钮来触发对预先指定的非反应变量的操作x 每次按下按钮时x lt x 1应予执行 为了检查是否正确完成 应显示结果 为了实现这个我尝试过observeEvent 但它只做了一次它应该做的事情 它如何正常工作 看起来rv仅在以下范围
  • 将 Git 存储库发布到 SVN

    我和我的小团队使用 Git 工作 较大的团队使用 Subversion 我想安排一个 cron 作业来发布我们当前的存储库HEAD每小时进入 SVN 存储库中的某个目录 我以为我已经弄清楚了 但我之前写下的食谱现在似乎不起作用 git cl