我第一次尝试使用git来传输我目前在工作的Windows计算机和家里的Linux计算机之间编写的学士论文。因为我没有服务器,所以我想使用USB记忆棒来存储共享存储库。从question我知道这应该是可能的。
在Windows系统上,我在USB记忆棒上创建了一个工作存储库和远程存储库,并将工作目录推送到USB记忆棒。这似乎工作正常。
在Linux系统上,我克隆了存储库,进行了一些更改,添加了它们并提交了它们。到目前为止,一切似乎都运转良好。但是当我尝试将更改推回USB记忆棒时,我收到以下错误消息:
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
进一步阅读我发现并非所有文件系统都支持这些属性。 USB记忆棒格式化为FAT。
任何帮助将不胜感激。 提前谢谢。
答案 0 :(得分:0)
如果repo不是那么大,我只需将其打包成tar或zip文件,然后将其复制到USB记忆棒中,然后将其打包到另一台机器上。为了帮助我,我编写了genbackup脚本。它使用当前日期和文件名中的短标签创建备份tarfile。
如果这太麻烦,请跟踪提交并在一台计算机上的repo中执行git format-patch
。将补丁文件复制到USB记忆棒,然后在另一台计算机上运行git am
。
编辑:至于错误,在我看来这是重要的部分;
remote:错误:无法创建临时文件:不允许操作
Git想要创建一个临时文件,但是因为EPERM错误而失败。查看git
的手册页,然后搜索"临时"仅给出一次点击:git-unpack-file
。遗憾的是,该程序的手册页未指定其中尝试创建临时文件。但经过一些谷歌搜索后,似乎git
使用TMPDIR
环境变量。检查是否将其设置为您有权访问的位置。如果它不存在则将其设置为合理的位置并再试一次。