【问题标题】:How do I connect a COPY (an archive, not a clone) of a git repository to its remote?如何将 git 存储库的 COPY(存档,而不是克隆)连接到其远程?
【发布时间】:2014-09-16 21:08:27
【问题描述】:

我想知道如何将 git 存储库的 COPY(存档,而不是克隆)与其远程存储库连接并同步。

背景: 我有一个本地和远程存储库。我使用 git archive 压缩本地存储库,然后将其复制到服务器:

$ git archive --format=tar HEAD | gzip > myarchive.tar.gz

问题: 在服务器上解压缩存档后,如何再次连接服务器的副本并将其与远程存储库同步?

如果我这样做:

$ git init
$ git remote add origin git@github.com/myusername:reponame.git
$ git fetch origin

git status 仍将所有内容报告为未跟踪。

应该我应该怎么做才能使我的解压缩文件夹与远程仓库完全同步,这样我就可以简单地将任何未来的提交拉到远程仓库?

非常感谢, 蒂姆

【问题讨论】:

    标签: git github archive


    【解决方案1】:

    不要做存档:做一个git bundle:这会给你一个文件,除了你将能够从中提取一旦复制到偏远地区。

    在“How can I email someone a git repository?”查看更多信息

    该捆绑包也可以是增量的(另请参阅“Difference between git bundle and .patch”)。
    这意味着您不必复制 full 存储库,只需复制自上次备份以来丢失的提交。

    我有一个脚本可以访问我所有的裸存储库并每周进行一次完整备份,每天进行增量备份(如果检测到新提交):sbin/save_bundles


    正如Nevik Rehnel 提到的in the comments,git archive 只会保存一个修订,这会使远程仓库中的任何同步都不完整(缺少中间提交)。

    另一种方法是tar the all repo,但包含的内容太多(包括可能的私有敏感文件或挂钩脚本)。 git bundle 是 git 方式。

    【讨论】:

    • 应该提一下archive在这里不合适的原因是它只打包了单个修订的内容,没有任何历史信息——如果它应该重新集成到一个git中回购,不过,这些信息很重要。
    • @NevikRehnel 确实如此。我已将您的评论包含在答案中以提高知名度。
    • 超级!非常感谢@VonC 和 NevikRehnel。我很欣赏解释和链接。问候,蒂姆
    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2013-02-21
    相关资源
    最近更新 更多