【发布时间】:2013-06-10 16:26:17
【问题描述】:
我正在尝试将更改从一个源代码控制系统(专有且复杂)导入 git 存储库。我目前正在通过运行一个脚本来执行此操作,该脚本只是按顺序同步到每个修订版并将其提交到 git 存储库,但由于各种原因,这已变得不可行。
对于每个版本,我都可以获得描述更改的通用差异。对我来说,这似乎足以将历史导入 git,但我一生都无法弄清楚如何让 git 做到这一点。看起来我需要介于 git-apply 和 git-fast-import 之间的东西。也许我应该从以前的版本和差异构造文件内容,然后使用 git-fast-import?或者我应该将 diff 格式化为 git 补丁,将其保存为文件,然后使用 git-apply?
有人对我有什么好主意吗?
编辑:同步和提交变得不可行的原因有两个:
首先,服务器会维护您已编辑的文件列表。与编辑过的文件同步不容易自动化,所以我在更新时恢复了我的更改。我们有一个签入队列系统,仅当您面前的任何人都没有与您“正在编辑”的任何相同文件时,您才允许您签入。因此,将文件“关闭编辑”进行更新会创建一个窗口,看起来人们可以安全地跳到你前面。
其次,所有分支都存储在同一个存储库中,我们大量使用分支。同步一切都很容易并且有效,只同步一个目录(我所在的分支的目录)似乎有问题。如果我同步所有内容,其他分支会在我不希望它们时更新。这通常不会成为问题,但我们有另一个工具,它使事情变得……复杂。
【问题讨论】:
-
哦,希望编辑完答案。
-
你能告诉我们它是哪个系统吗?不是 ClearCase 还是 Synergy?也许有人知道特定的系统,并且可以告诉您如何在不同步任何内容的情况下从中获取全文(包括 ClearCase 在内的大多数系统都有一个命令可以在不检查文件的情况下获取特定文件的特定修订版,如果您找到了,您可以与快速导入一起使用)。
-
你说得对,那就太完美了!我怀疑有很多人很了解它——它被称为“Source Depot”,这是微软使用的一种内部工具。据我了解,这是 Perforce 的一个非常古老的分支。