为具有许多现有快照的项目设置git

时间:2010-06-20 10:29:49

标签: git init

我需要为git修订设置一个项目。项目团队保留了当前200多个编号构建中的大约40个的备份快照。将它带入新git仓库的最有效方法是什么?

我的想法很明显:使用最旧的备份来启动仓库,然后逐个遍历40个快照,每个快照:

  • 查找快照中比repo更新的文件
  • 将这些文件移至修订版
  • 的项目
  • 提交更改

有什么更聪明的吗?

FWIW,它是一个使用Xcode 3的C ++ Mac项目,在稍后阶段使用Visual Studio 2008添加了Windows版本。所有源代码在Mac和PC版本之间保持同步。

3 个答案:

答案 0 :(得分:2)

Git(有效地)为每个修订版存储完整的源代码树。如果提交之间存在差异,则会从这些完整副本中得出结论。它不依赖于工作副本中的任何特定操作。

正如其他人已经写过的那样,你可以随便吹掉你的工作副本,将下一个快照解压缩到其中,然后git add -A && git commit。你不必做任何比这更复杂的事情。


提示:用bash吹掉工作副本:

( shopt -s extglob dotglob ; rm -r !(.git*) )

答案 1 :(得分:1)

如果备份可以按顺序编号,则变得非常简单。编写一个脚本,循环遍历它们,提交并标记版本。我已经为我接手的没有设置VCS的项目做了这个。

答案 2 :(得分:0)

如评论中所述,您只需将一个目录替换为另一个目录,并make a git -A组合:

  
      
  • git add .”,它查看工作树并将所有这些路径添加到分阶段更改中(如果它们已更改或是新的且未被忽略),它不会进行任何“rm”操作。
  •   
  • “git add -u”,它查看当前跟踪的所有文件,并将这些文件的更改分级,如果它们不同或已被删除。它不会添加任何新文件,只会对已经跟踪的文件进行更改。
  •   

实际上,如果您有40个不同的目录,如果指定GIT_DIRGIT_WORK_TREE环境变量,则可以在每个目录中执行该命令。
除了你可以直接在命令行中指定它们(这对GIT_WORK_TREE更方便,因为它会改变40次)

在任何你想要的地方初始化一个git repo(/ path / to / my / repo)并使40 git add添加如下:

git add -A --git-dir=/path/to/my/repo --work-tree=.