将旧版本添加到Git历史记录中? (在另外两个版本之间插入一个版本?)

时间:2013-10-04 06:18:28

标签: git

我一直不一致地使用Git跟踪我的应用程序中的更改,而是使用.zip存档每个发布版本的代码。

现在我实际上正在接受Git,我希望将所有这些旧历史记录放入一个简洁明了的简单Git历史存档中,以便轻松回滚到旧版本以进行测试和历史目的。

如何才能最轻松地获取一系列.zip文件并将其添加到当前项目的过去历史记录中?

我已经看到了如何执行此操作的一些描述 - 但它需要先按顺序查找和排序所有版本,然后一次提交一个空白存档。如果我这样做并记录版本1.0和3.0,并且稍后才找到2.0的代码 - 我怎么能在以后将2.0插入历史而不影响1.0或3.0?

谢谢!

PS:Git档案不与其他任何人共享。完全不关心搞乱其他人的共同历史。

3 个答案:

答案 0 :(得分:1)

你问了两个问题:

  1. 如何将一些zip文件转换为git历史记录?
  2. 如何将提交插入git历史记录?
  3. 这些问题的答案如下:

    1. 我写了一个小的bash脚本应该这样做。它假设您在一个文件夹中包含要提交的zip文件,并且您需要修改前两个参数以使其适合您的设置:

      # The path to your git project.
      gitFolder=/myproject
      
      #The path to your zip files.
      ZIP_FILES=/path/to/files/*.zip
      
      for zipFile in $ZIP_FILES
      do
          echo "Wiping previous files"
          rm -rf $gitFolder
          echo "Unziping the file into the $gitFolder folder"
          upzip $zipFile -o -d $gitFolder
          echo "Staging all changes"
          git add --all
          commitMessage="commit for: $zipFile"
          echo "Committing the changes, with the commit message: $commitMessage"
          git commit -m '$commitMessage'
      done
      
    2. 您可以执行interactive rebase,它允许您(除其他外)重新提交订单。因此,为了在以后添加旧版本,您可以:

      1. 将它们添加为新提交。
      2. git rebase -i
      3. 将提交重新排序为正确的顺序。

答案 1 :(得分:0)

如果你有1.0和3.0的提交,你可以通过检查1.0,提取2.0并提交它来创建2.0的提交。但是,这将留下3.0作为其父级的1.0。可以通过设置移植文件来替换提交,更改其父级:

echo (commit id of 3.0) (commit id of 2.0) >.git/info/grafts

此时,如果您查看当前版本并运行git log,您应该会看到您想要查看的历史记录。然后,您可以使用git filter-branch为3.0创建新的提交(对于更高版本也是如此)真正将2.0作为其父级。

答案 2 :(得分:0)

如果您可以对某些工作进行排序,只需在某个分支(可能是您的主分支)中逐个提交它们。

如果您无法轻松对其进行排序,您可以创建与zip文件一样多的分支,并将旧树分别提交到每个分支。你甚至不需要维护很多分支(这可能很无聊) - 你可以简单地标记它们并删除分支指针。只要通过分支或标记可以访问提交,它就可以在不丢失提交的情况下工作。

当然,第二种方法有点乱,但仍然比保留zip文件更好。