2010-05-03 70 views
8

我是git的新手,我从一个长期运行的项目中获得了大量的每周tarball。每个tarball平均有几百个文件。我正在寻找一个git策略,允许我将每个tarball的扩展内容添加到新的git存储库,从版本1.001开始并通过版本1.650。在项目的这个阶段,99.5%的tarball(n)只是版本(n-1)的一个副本 - 换句话说,是git的完美候选人。期望的最终结果是仅在过程结束时保留主分支。有没有方法可以轻松地将源码树的一系列tarball转换为git存储库?

我认为我知道git足够做到“手工”。据我了解,不存在合并冲突的可能性,因为在添加和提交下一个版本之前,没有机会改变主设备。 shell脚本是我的第一个猜测,但我不确定bash在branch_n-1中执行bash时如何处理git checkout branch_n会如何。对于本项目而言,主机环境为Ubuntu 10.4,可用资源为8 Gig RAM,500 GB的磁盘空间,以及3.ghz的4 CPU处理器。

我不需要别人来解决这个问题,但我可以用正确的方向推动git专家如何接近它。任何意见来自“谁在那里做过”的人将不胜感激。

布袋

PS:我已经看过现场的建议“相关问题”,没有发现任何有关。

+0

这些问题的答案都指向的是分支不应该是必要的。但是,您可能希望创建标签,这些标签是固定指向提交的指针,常用于标记版本号。 – Cascabel 2010-05-03 17:37:34

回答

3

对此评论:当你关注的两个混帐结账branch_n被同时bash是以branch_n-1

执行处理

我不知道还有庆典怎么会喜欢同时运行并进入彼此的方式?除非您有意并行运行操作,否则这不应该成为问题。

假设tarball遵循线性演化,分支不应该进入这个。

的过程应该是相当简单:

  1. git init
  2. untar ball _n_
  3. git add --all .; git commit(在适当的标志)
  4. git tag -a v1.001 -m "Version 1.001."
  5. rm -rf *(处理缺失的历史;要当然离开.git完好无损)
  6. 转到2
+0

也许'有关'不是正确的词。如果git从bash中取出$ PWD,我“不确定会发生什么”。 也许bash不这样做,但很久以前我依稀记得读过sh创建了一个作为文本文件在某处执行的命令的副本,然后在脚本执行时修改该文本文件。如果这在$ PWD中没有发生,那么它不是问题。 – Hotei 2010-05-03 17:54:43

+0

回到你的其他问题 - 不,我不打算并行运行,因为我希望结果是一个按时间顺序排列的合并行,然后我可以使用gitg等浏览。 – Hotei 2010-05-03 17:56:54

+0

我喜欢你的建议,并在评论中与上面的建议合并。 – Hotei 2010-05-03 18:08:13

1

而没有被确切地那里,玉应该简单:

  • 解压存档任何你想要
  • 与混帐为了工作目录进行rsync它:
    • 变化相关的文件
    • 将该档案中的新文件添加到工作目录中
    • 从工作目录中删除没有铃声的文件呃当前存档
  • git add -A
  • git commit -m "archive n"
  • 重复

想法的一部分是不签branch_n + 1,但留在同一分支内,提交各焦油含量一个在同一个git仓库的同一分支之内。
如果你真的总得有两个并行的过程,然后你可以:

  • git clone第一混帐回购协议
  • git branch -b a_new_branch以确保您隔离在其自己的分支并行处理,你将能够逼退到第一个回购时完成。
+1

我喜欢这个想法,但是可能会更容易合并前两款游戏机。到目前为止,它看起来像: git的初始化 解压压缩包(N)进入新的回购 混帐添加-A git的承诺-m“版本号富” 室射频*(但不是git的) 重复 – Hotei 2010-05-03 18:05:05

2

我会做在这种情况下什么,因为你是在最后的tar包“标记版本”:

  1. 创建空的Git仓库
  2. 将压缩包到该目录覆盖任何文件
  3. 添加的所有文件git add .
  4. git commit -a -m 'version foo'
  5. git的标签当前版本
  6. 删除所有文件从步骤2
  7. 重复每个压缩包

在你的情况下,它没有必要创建您的所有压缩包是不同的,连续的版本分支机构;每个迭代覆盖前一个。

+1

你缺少一个步骤 - 删除之前的内容,然后再转储到tarball中。 – Cascabel 2010-05-03 17:36:09

+0

确实,将它添加到列表中。否则删除将不会被处理。 – 2010-05-03 19:36:22

+0

我打电话给他们的版本,但这不完全是他们是。它更像一个'快照号码'。我通常每个月或每两个月进行一次实际版本更新。 – Hotei 2010-05-03 21:44:14

8

看看$GIT_SRC_DIR/contrib/fast-import/import-tars.perl

+0

http://git.kernel.org/?p=git​​/git.git;a=blob;hb=HEAD;f=contrib/fast-import/import-tars.perl – 2010-05-03 20:52:44

+0

Stefan, 好的建议! Perl并不是我最喜欢的脚本语言,但它确实证明了一般方法,并指出了一些潜在的问题,如果我在tarball中有符号链接。我需要按照特定顺序应用更新以获得期望的结果,但这将是一个很好的基准。进口焦油似乎也依赖于我不熟悉的快速进口 - 但那是另一回事。 谢谢 – Hotei 2010-05-03 21:28:54

+0

@Hotei:import-tars.perl是一个* example *脚本;它服务于(除其他外)来说明如何使用快速导入界面。你可以用你最喜欢的脚本语言编写自己的脚本(例如,在Python中的contrib/fast-import中有import-zips.py例子)。 – 2010-05-04 08:51:06

相关问题