所以这是我使用 GIT 的第一个真正的挑战。我有一个要掌握的个人存储库,我准备好标记和发布。存放我的代码的设备无法访问互联网,因此我需要能够通过 USB 驱动器升级存储库。我一直在阅读捆绑文件,但很难将它们用于我的预期目的。这是到目前为止我的步骤。
在我连接互联网的个人设备上
在没有网络的设备上
克隆捆绑包后,我收到一条警告,指出“警告:远程 HEAD 引用不存在的引用,无法签出”,并且目录中唯一的项目是 .git 文件。我确信我不是第一个遇到这个问题的人,但一直无法找到有效的解决方案。任何和所有的想法将不胜感激
我希望能够通过捆绑文件维护和更新离线 git 存储库。
可能最简单的方法是完全放弃捆绑包,而是将一个裸存储库放在 USB 记忆棒上(至少,这是我会做的)。
在您的开发机器上(有代码) - 假设您的项目克隆存在
~/src/projectX
并且您已将 USB 记忆棒安装为 /media/user/USBDRIVE
user@devmachine:~/src/projectX$ git init --bare /media/user/USBDRIVE/projectX.git
user@devmachine:~/src/projectX$ git remote add usb /media/user/USBDRIVE/projectX.git
user@devmachine:~/src/projectX$ git push --mirror usb
对于未来的更新,只需再次运行
git push
(假设USB分区在同一路径下可用)
将所有更改同步到 USB 驱动器后,卸载它并将其插入目标系统。 假设 USB 分区再次以
/media/user/USBDRIVE
结尾,请在目标上运行以下命令。系统
pi@device:~$ git clone /media/user/USBDRIVE/projectX.git projectX
pi@device:~$ cd projectX
pi@device:~/projectX$ git checkout v1.0.0
对于未来的更新,只需运行
git fetch; git checkout v1.2.3
(再次假设路径不会改变)
此方法的优点是可以非常轻松地将代码从设备推送回您的开发机器。
如果出于某种原因,您无法使用上述方法(例如,因为 USB 驱动器上的文件系统太有限),您当然可以使用捆绑包。
技巧是,在创建捆绑包时,您必须提供的不仅仅是一次提交。
user@devmachine:~/src/projectX$ git bundle create /path/to/projectX.bundle HEAD <tag_name>
甚至更好(导出所有已知标签):
user@devmachine:~/src/projectX$ git bundle create /path/to/projectX.bundle HEAD $(git tag)
之后,您应该能够克隆捆绑包并签出您的标签:
pi@device:~$ git clone /media/user/USBDRIVE/projectX.bundle projectX
pi@device:~$ cd projectX
pi@device:~$ git checkout <tag_name>