1

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

我的想法是显而易见的:使用最旧的备份来初始化 repo,然后逐个浏览 40 个快照,每个快照:

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

有什么更聪明的吗?

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

4

3 回答 3

2

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

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


提示:在 bash 中删除工作副本:

( shopt -s extglob dotglob ; rm -r !(.git*) )
于 2010-06-20T14:58:37.057 回答
1

如果备份可以按顺序编号,那将变得非常容易。编写一个脚本,循环遍历它们,提交并标记版本。我已经为我接管的一个没有设置 VCS 的项目完成了此操作。

于 2010-06-20T14:08:10.167 回答
0

正如评论中提到的,您可以简单地将一个目录替换为另一个目录,然后进行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=.
于 2010-06-20T13:40:18.917 回答