将 git 存储库复制到离线机器并通过记忆棒 pushing/pulling

Copy git repository to offline machine and pushing/pulling via memory-stick

我需要在无法访问我的存储库的离线计算机上工作。现在我也不想错过完全使用 Git。

问题:


编辑:我应该声明,我必须将记忆棒交给管理员,他会为我进行复制,也就是说,我不能用我的用户安装记忆棒。

要将您的存储库复制到记忆棒,只需使用 git clone,然后使用 git pull 更新它。

例如,在安装了记忆棒的在线计算机上,执行

cd <memory-stick-mount-point>
git clone <local-path-to-git-repo>

现在 <local-path-to-git-repo> 将成为您 U 盘上 repo 的 origin 遥控器,所以稍后您可以 只需使用 git push/pull(安装在在线计算机上时)即可同步您的离线工作。

记忆棒上的 git 存储库是独立的,因此现在您可以在任何计算机上对其进行操作,然后在将其安装到在线计算机上时按上述方式同步。

编辑,回复:不允许自己安装棒子:

如果你可以让管理员git clone将回购到记忆棒上就可以了。否则,你的管理员可以简单地复制整个 project.git 目录(如果它是一个裸仓库)或 project/.git (否则)到你的记忆棒,你可以反对那个,值得关注的事情出的是遥控器等将是在线机器的遥控器。

然后,拉动不是问题,但如果您不相信您的 sysadm 会为您解决合并冲突,则推动可能需要进一步的解决方法。 如果您有自己的分支机构,那么合并不是问题。 除此以外 要进行合并 "offline",您可以拥有 两个 个存储库的离线副本,一个是您处理的,另一个是您的 "origin",当您得到返回,让 sysadm git 拉到 "origin" 仓库,然后在离线计算机上,在两个记忆棒仓库之间进行合并,然后让 sysadm 合并你的原始仓库进入线上。

虽然这感觉有点脆弱并且对竞争条件开放,所以我真的会尝试在 "going offline" 之前创建单独的分支。

要复制完整的 Git 存储库,您只需复制文件夹 .git;它包含了一切。 Git 使用安全的文件名并忽略回购协议内的时间戳,因此该数据对于常见的文件系统怪癖是安全的。

在目标机器上,新建一个文件夹,复制里面的.git文件夹。现在 git checkout <branch> 会给你一份工作副本。

如果您想来回移动补丁而不是整个存储库,那么 git format-patch <branch> 会创建它们。该命令将创建更新远程仓库所需的所有补丁(即输出将包含尚未推送的所有内容)。您还可以为其提供提交 ID(= 从该提交开始)或范围。

要应用它们,请在远程仓库上使用 git am < 0001....

相关:

命令git bundle就是为此设计的。例如离线克隆仓库的master分支,

cd my-repository
git bundle create offline-repos master

这会将整个 master 分支存储在名为 offline-repos 的文件中。将文件复制到另一台计算机。在该计算机上,键入

git clone -b master offline-repos new-repos

这将创建从 offline-repos 检出的文件夹 new-repos。您从中克隆的捆绑文件将被视为远程存储库。您甚至可以创建一个包来存储自引用以来的更改,如:

git bundle create offline-repos e45ad329..master

如果您用包含新更改的包替换包文件 offline-repos,您可以从中 git pull,如:

cd new-repos
git pull