我正在尝试克隆tensorflow / models repo。我用ssh连接到远程机器。我尝试了很多建议来解决这个问题,但没有一个对我有用。
git clone --recursive https://github.com/tensorflow/models.git
Cloning into 'models'...
remote: Counting objects: 1670, done.
remote: Compressing objects: 100% (28/28), done.
remote: Total 1670 (delta 10), reused 0 (delta 0), pack-reused 1642
Receiving objects: 100% (1670/1670), 49.23 MiB | 8.44 MiB/s, done.
Resolving deltas: 100% (670/670), done.
fatal: fsync error on '/home/OFFICE/utk/projects/syntaxnet/models/.git/objects/pack/tmp_pack_2w67RB': Input/output error
fatal: index-pack failed
答案 0 :(得分:4)
问题是我试图在nfs文件系统中克隆。 解决方案是在非nfs位置克隆repo,然后将文件夹移动到所需的nfs位置。
cd /tmp (non nfs location)
git clone blablabla.git
mv blablabla ~
答案 1 :(得分:1)
如果没有明显的解决方案允许直接在远程计算机上进行克隆,请尝试改为:
cd /path/to/my/repo
git bundle create /tmp/myrepo.bundle --all
通过ssh将一个文件(myrepo.bundle
)复制到远程计算机上
从远程计算机上的捆绑包中克隆它:
git clone myrepo.bundle myrepo
答案 2 :(得分:0)
简短答案:使用“ eatmydata”(即程序,请选中“ apt install eatmydata”)
长答案: Git会频繁调用“ fsync()”系统调用,以确保存储库是一致的。这一点特别重要,尤其是当多个人同时使用同一个存储库时,并且还应确保存储库处于已定义状态,例如,应中断电源。写入打包文件后,在更新元数据之前,将其强制进行同步(即已完成向实际磁盘的写入,但仍不在缓冲区中)。
某些文件系统-尤其是诸如NFS,sshfs等远程文件系统,不支持fsync(),但是git没有禁用这些调用的标志。
什么是有帮助的-在Linux下-是一个名为“ eatmydata”的包装器。通过包装程序调用的任何程序都将模拟其fsync()调用,而无需实际同步。 虽然这增加了存储库损坏的风险,但如果实际上不进行写入,则在手动监督过程时通常可以接受。
只需安装eatmydata,然后致电
eatmydata git clone --recursive https://github.com/tensorflow/models.git
sync