为什么' git repack'有时会说“没什么新东西可以装。”#39;有时它重新包装一切(没有更改回购)?

时间:2017-09-16 14:15:16

标签: git bitbucket-server svn2git

我有一个拥有17年历史的大型git存储库。在用svn2git转换它之后,我通常会做一个' git repack -a -d -f'。这说“打包没什么新东西。'然后,如果我将它推送到服务器(在我的案例中为Bit Bucket),然后在服务器上找到存储库并重新打包,它将重新打包整个存储库。如果可能的话,我希望能够一直重新包装整个回购。我无法弄清楚推送到服务器之间的变化,允许重新包装。请注意,客户端和服务器之间的存储库没有任何更改。

1 个答案:

答案 0 :(得分:0)

您看到的输出来自these source lines

    if (!names.nr && !quiet)
            printf("Nothing new to pack.\n");

此处names.nr是从git pack-objects命令读取的SHA-1 ID行的数量,当使用先前在此相同代码中计算的argv和环境中提供的参数运行时。

在这种情况下发生的事情是,您使用的svn2git实用程序正在构建单个包文件,无论出于何种原因,git pack-objects选择单独保留该文件。

我无法解释的是为什么-a -d -f没有强制重新包装,因为它应该。 git pack-objects命令应该生成一个带有新压缩的新包文件。 (我想有一种可能性是git pack-objects完全失败了你的特定系统,但是你也应该对此抱怨。)