如何将提交推送到一个被空气隔离的远程Git仓库?

9

我和我的团队在不同的网络上工作。我们没有互联网连接,也没有共享相同的网络。因此,我们唯一可以传输文件的方式是使用U盘。

唯一让我能够提交到远程Git仓库的方法是使用我的同事的电脑,该电脑可以访问连接了Git服务器的网络。那么,我需要运行哪些命令来获取、合并并将我的提交推送到她的计算机上,而不是传输整个工作目录?

比如,只传输远程服务器缺少的提交。

编辑:我忘记提到U盘可能会定期被清除,这是安全措施的一部分。但在U盘上存储远程仓库仍然是一个非常好的想法!


1
除了其他答案,可以使用bundles;请参见如何使用git-bundle来保持开发同步?和被接受的答案。 - coredump
3个回答

2
你可以在文件系统上设置 Git 远程仓库,因此我假设如果你在他们的机器上挂载了你的 U 盘,他们可以将你的仓库添加为远程仓库并合并你的更改。
# Mount thumbdrive
# Add a remote to the filesystem
git remote add cardin_usb /Volumes/myusb # or whatever the usb path is

# pull in the changes
git fetch cardin_usb
# merge any branches as per normal eg
git checkout master
git merge cardin_usb/my_feature

编辑 - 刚刚看到您只想进行更改。如果您知道远程服务器的最后一次提交,您可以生成补丁:

git format-patch lastServerCommit^..HEAD --stdout > new_changes.patch

然后通过USB传输,你的同事就可以提交了。

1
导出一个包含所有提交的补丁怎么样?我已经更新了我的答案来涵盖这个问题。 - acanby
1
@Cardin 这只是一个小细节,但我真的很好奇为什么会有人定期擦拭那个存储驱动器(顺便说一下,当它发生时,使用 git clone --bare 更容易操作,比手动处理补丁更容易)。 - coredump
1
@Cardin(安全方面,嗯,我明白...)打补丁相当于将多个提交压缩在一起:您所有的小型、原子提交最终都会导致单个提交。这并不仅仅是关于大小的问题,而是关于破坏git首先能够创建的有用历史记录。通过pull/fetch交换的已经是一个捆绑包(如您所说的压缩的增量)。git bundle允许您采用自己的方式传输该数据,特别是“通过 sneakernet”(请参见:http://linux.die.net/man/1/git-bundle)。 - coredump
1
@Cardin,很抱歉我不知道SourceTree是什么,但如果你只需要通过命令行git fetch来获取你的提交内容,那会怎样呢?fetch只会更新分支:没有冲突(没错,我在引用达斯·维达的话)。然后,SourceTree可能能够看到参考信息已经被更新。 - coredump
1
@coredump:哦,没错,这个方法可行!(这也是我喜欢 Git 的原因之一。可以在 Bash 和 GUI 中修改同一个暂存区) - Cardin
显示剩余4条评论

2

另外,您可以在计算机之间创建以太网网络,并使用局域网连接到彼此的计算机并拉取更改。

例如: git remote add xyz myuser@laptop:/path/to/repo.git git pull xyz abc


以太网很有趣...但对于我的情况可能没有帮助,因为它是直接连接,没有防病毒软件在中间 - IT安全会将其视为一个问题。不过我仍然会点赞你的回答,因为它可能对其他人有用! :) - Cardin

1
您的基本策略应该是将存储库克隆到本地计算机上的拇指驱动器上,设置远程存储库,然后从同事的计算机上推送存储库:
在您的计算机上:
git clone file:////192.168.1.1/yourbranch
git remote add myorigin https://path/to/remote/repository

在你的同事电脑上:
git pull myorigin/yourbranch  (or git rebase myorigin/yourbranch)
git push myorigin yourbranch

我假设你的同事电脑的IP地址是192.168.1.1,但你需要更改它(在Windows命令提示符中键入ipconfig)。这还假定你在本地机器上有一个名为yourbranch.git的文件可以克隆。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接