我正在尝试将更改从一个源代码控制系统(专有且复杂)导入到 git 存储库中。我目前正在通过运行一个脚本来执行此操作,该脚本只是按顺序同步到每个修订版并将其提交到 git 存储库,但由于各种原因,这已变得不可行。
对于每个修订版,我都可以获得描述更改的通用差异。对我来说,这似乎足以将历史记录导入 git,但我一生都无法弄清楚如何让 git 做到这一点。看起来我需要介于 git-apply 和 git-fast-import 之间的东西。也许我应该从以前的版本和差异构建文件内容,然后使用 git-fast-import ?或者也许我应该将 diff 格式化为 git 补丁,将其另存为文件,然后使用 git-apply?
有人对我有什么好主意吗?
编辑:同步和提交变得不可行的原因有两个:
首先,服务器维护您已编辑的文件列表。与已编辑的文件同步无法轻松自动化,因此我在更新时恢复更改。我们有一个签入队列系统,仅当您前面没有人拥有与您“编辑”相同的文件时,才允许您签入。因此,将文件“停止编辑”进行更新会创建一个窗口,看起来人们可以安全地跳到您前面。
其次,所有分支都存储在同一个存储库中,并且我们大量使用分支。同步所有内容都很简单并且有效,仅同步一个目录(我所在的分支的目录)似乎有问题。如果我同步所有内容,当我不希望其他分支更新时,它们就会更新。这通常不会成为问题,但我们有另一个工具,这使事情变得......复杂。
- The
apply
接受统一差异并应用它的命令(即没有“git patch 格式”,它只是统一差异;也git apply -
会很乐意读取标准输入,因此无需保存任何内容)。
-
The am
命令采用包含补丁的 mbox 格式文件,并应用并提交每个补丁。您也许能够轻松生成此内容;很简单:
From [email protected] /cdn-cgi/l/email-protection Mon, 23 May 2011 14:49:12 +0200
From: [email protected] /cdn-cgi/l/email-protection
Date: Mon, 23 May 2011 14:49:12 +0200
Subject: First line of commit message
Content-length: <bytes-until-next From>
Other lines of commit message
---
unified diff
连接所有修订。
- 确实看起来
fast-import
不接受差异,但是你不能只要求源系统为你提供修订的内容(这将处理无法构建统一差异的二进制文件)吗?如果没有,你可以询问fast-import
给你以前的内容(与cat-blob
命令),修补它并再次输入它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)