Git 手动将更改拉入存储库

Git 手动将更改拉入存储库,git,Git,我有一位客户使用我的应用程序和其.git存储库的本地副本,她使用该存储库恢复更改和测试修补程序等。但由于防火墙和其他规则的原因,她无法通过简单的方式获取最新更改的远程设备。所以我想“让他们下载一个新的、完整的.git存储库”。但是存储库是一个移动自如的大妈,所以我更愿意只发送一个压缩的.git增量更改(对象、引用等)到她的local.git dir中解压缩 根据文件时间戳,我尝试了以下工作流(在我的软件中自动执行): 在她的.git/objects目录中获取最近的时间戳 从my.git dir文

我有一位客户使用我的应用程序和其.git存储库的本地副本,她使用该存储库恢复更改和测试修补程序等。但由于防火墙和其他规则的原因,她无法通过简单的方式获取最新更改的远程设备。所以我想“让他们下载一个新的、完整的.git存储库”。但是存储库是一个移动自如的大妈,所以我更愿意只发送一个压缩的.git增量更改(对象、引用等)到她的local.git dir中解压缩

根据文件时间戳,我尝试了以下工作流(在我的软件中自动执行):

  • 在她的.git/objects目录中获取最近的时间戳
  • 从my.git dir文件中创建一个从该时间戳开始的zip文件
  • 电子邮件压缩文件
  • 解压缩customer.git中的zip文件(如果某些文件被覆盖,这并不重要)
  • git checkout-f master
    (或他们需要的任何分支/标记)和
    git clean-d-f
  • 它工作得很好,因为她的工作树和.git目录从来没有在本地修改过,只是从一个分支签出到一个标记或任何东西。但文件时间戳绝对不可靠。。。ie它可能会被一些备份或任何东西
    touch
    ed,所以我正在寻找一种更优雅的方法来使用某种提交创建这个增量zip


    因此,如果我从客户的本地.git获取了信息,我怎么能以编程方式创建.git目录的增量zip文件呢?我想这与git在内部以增量方式从远程获取信息的做法非常相似。选择正确文件的算法是什么?如何从客户的存储库中确定基线提交以构建增量zip

    为什么不使用命令?或这是一个如何做到这一点的例子。您的客户只需下载一次完整的压缩
    .git
    目录,之后他可以使用增量补丁。

    客户如何下载.zip文件?通常作为电子邮件+1的附件。。。似乎这种情况正是git格式修补程序的用途。我的目的是让两个存储库保持同步,因为有时支持开发人员必须在现场进行调试,而拥有镜像存储库更有效,可以说是责备或剖析提交。正如示例链接中所述:“但是,请注意,这种方法并没有像在发送者的存储库中那样重新创建世界状态”,不幸的是,这正是我所需要的。OTOH,git bundle可能是一个很好的解决方案。。。但我应该使用哪个ref、commit或timestamp来找到绑定的位置呢?当您应用补丁时,git不会为它重新创建commit和SHA1散列。它只会更改工作目录中的文件。这就是他们所说的历史不会完全相同的意思。在您的情况下,最好使用bundle。使用
    bundle..HEAD
    ,其中SHA1是提交的SHA1,该提交肯定在客户站点上(例如某个里程碑提交或发布标记)。如果客户此后有任何额外的更新,它们将被自动跳过。
    git bundle
    +
    git fetch
    效果很好,但我仍然很难找到客户的SHA1作为bundle的基础。我希望它是最佳的,以减少捆绑的大小到最小。我无法跟踪常见的标记/发布/分支,我只希望客户在他们的存储库中运行git命令,该命令将返回他们从我们那里得到的最新的SHA1。我试着在从捆绑包中获取git后查看客户的回购,在他们的回购中,我能找到的唯一指向捆绑包最新版本的是fetch_HEAD,但我不知道这是否可靠。没有魔力。Git无法解决跟踪最新发布的补丁的问题。需要额外的操作(如分析
    git日志
    gitk