【问题标题】:Using git to transfer data via usb stick between Windows and Linux使用 git 在 Windows 和 Linux 之间通过 U 盘传输数据
【发布时间】:2015-08-19 17:45:59
【问题描述】:

我第一次尝试使用 git,以便在工作中的 Windows 计算机和家中的 Linux 计算机之间传输我目前正在编写的学士论文。因为我没有服务器,所以我想使用 U 盘来存储共享存储库。从这个question我明白这应该是可能的。

在 Windows 系统上,我在 U 盘上创建了一个工作存储库和远程存储库,并将工作目录推送到 U 盘。这似乎工作正常。

在 Linux 系统上,我克隆了存储库,进行了一些更改,添加并提交了它们。到目前为止,一切似乎都运行良好。但是当我尝试将更改推送回 U 盘时,我收到以下错误消息:

Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 264 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: error: unable to create temporary file: Operation not permitted
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To /media/usb-stick-sta/git/bachelor
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to '/media/usb-stick-sta/git/bachelor'

/etc/fstab 中,我使用以下选项挂载USB 记忆棒:noauto,user,uid=1000,gid=1000 所以我拥有所有文件,并且我已经使用ls -l 验证确实是这种情况。 只是为了确保我也尝试在该目录中创建一个文件并再次删除它,没有任何问题。

另一个 stackoverflow 问题的答案(不幸的是我找不到它了)建议在远程存储库上执行 chmod -R g+ws *。它导致了许多错误消息,例如(与我是以文件所有者还是以 root 身份执行此操作无关):

chmod: changing permissions of ‘config’: Operation not permitted

进一步的研究发现这些文件可能是不可变的,所以我尝试了chattr -i * 导致如下消息:

chattr: Inappropriate ioctl for device while reading flags on config

进一步阅读,我发现并非所有文件系统都支持这些属性。 U 盘已格式化为 FAT。

任何帮助将不胜感激。 提前致谢。

【问题讨论】:

  • 为什么不将其存储在私人服务器上?例如,Bitbucket 允许这样做。
  • @Bartlomiej Lewandowski 不幸的是,我目前居住的公寓的互联网连接不可靠。而且我不确定我写单身汉的公司是否允许我使用这样的服务。我不熟悉这样的法律内容。事情有点复杂,因为我正在做双重研究(不确定英语术语)......
  • @BartlomiejLewandowski 我的导师建议我使用捆绑包,因为我告诉他我在使用这种方法时遇到了问题。但这似乎不像简单的推动那么舒服。我仍然想知道出了什么问题。无论如何,谢谢你的提示。
  • 你使用什么 Linux 发行版?
  • @axiac 我正在使用 Debian(不确定确切的版本,我目前正在工作,所以我无法查找,但我认为是 jessie,如果重要的话,桌面环境是肉桂)

标签: linux windows git usb-drive


【解决方案1】:

如果 repo 不是那么大,我只需将其打包成 tar 或 zip 文件,然后将其复制到 U 盘并在另一台机器上解压。为了帮助我解决这个问题,我编写了genbackup 脚本。它使用当前日期和文件名中的短标签创建一个备份 tar 文件。

如果这太麻烦,请跟踪提交并在一台计算机上的 repo 中执行git format-patch。将补丁文件复制到U盘,在另一台电脑上运行git am

编辑:至于错误,在我看来这是重要的部分;

远程:错误:无法创建临时文件:不允许操作

Git 想要创建一个临时文件,但由于 EPERM 错误而失败。查看git 的手册页,搜索“临时”只会得到一击:git-unpack-file。不幸的是,该程序的手册页没有指定它尝试创建临时文件的位置。但经过一番谷歌搜索后,git 似乎使用了TMPDIR 环境变量。检查是否将其设置为您可以访问的地方。如果不存在,请将其设置到合理的位置并重试。

【讨论】:

  • git bundle 比这些选项中的任何一个都更方便离线传输存储库数据
  • 在我看来 git-bundleformat-patch/am 组合的工作量大致相同。制作 zipfile 或 tarball 的优势在于它捕获了完整的 .git 目录,带有 config、钩子和 info/exclude
  • 好吧,谢谢...如果推送不起作用,我想我会尝试使用捆绑包。但我还是想知道这里出了什么问题……
  • @jakun 可能是您的 TMPDIR 设置。请参阅编辑后的答案。
  • @RolandSmith 非常感谢。我一到家就试试。
猜你喜欢
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
  • 2013-09-23
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
相关资源
最近更新 更多