我正在尝试为lan网络设置一个git服务器,该网络包含一些工作站(Windows)和一台由路由器连接的NAS。
服务器本身是一台专用的Ubuntu机器,安装了ubuntu-desktop
,openssh
和git
,并且已经获得静态本地IP。它还从NAS挂载一个文件夹来保存repos到目录/media/repos
;安装似乎工作正常。
在Windows工作站上我安装了“Git for windows”
我创建了一个组gitusers
,并为/media/repos
目录分配了适当的权限
然后我创建了2个新的ubuntu用户,从他们各自的工作站设置了ssh
个连接(我从2开始只用于测试,但在我看来,本地网络中的每个工作站应该有自己的用户ssh到)。我还将这些用户分配到gitusers
组
之后,我在/media/repos/testproject1
目录中的服务器上做了一个简单的回购:
git init --bare --shared=group
在工作站上我成功地克隆了这样的回购:
git clone firstuser@192.168.1.47:/media/repos/testproject1
在我push
之前,一切似乎都运转良好:
$ git push
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 331 bytes | 331.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: error: unable to create temporary file: Operation not permitted
remote: fatal: failed to write object
error: remote unpack failed: unpack-objects abnormal exit
To 192.168.1.47:/media/repos/testproject1
! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'firstuser@192.168.1.47:/media/repos/testproject1'
但是如果我再次尝试push
几次,它会突然成功:
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 331 bytes | 331.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 192.168.1.47:/media/repos/testproject1
ba2b2a7..a798d28 master -> master
一旦推送成功,我就可以毫无问题地拉/克隆/获取更新的回购。当然推送命令仍然存在问题 我担心安装的NAS文件夹中可能存在问题,如下所述:https://stackoverflow.com/a/24173942/9072069 但这个答案本身建议设置一个ssh服务器来避免这个问题......这不是我刚刚做的吗? 感谢。
编辑:为了澄清,网络配置如下:
N---R---+---+---+---
| | |
W W S
其中N = NAS,R =路由器,W =工作站(有2个以上),S =服务器。
从工作站我执行像这样的git命令(192.168.1.47
是服务器的IP):
git x user@192.168.1.47:path-to-repo
通过使用以下内容编辑文件/etc/fstab
已将NAS安装在服务器上(其中1001
是组gitgroup
的ID):
//192.168.1.47/share /media/repos cifs credentials=/home/username/.smbcredentials,iocharset=utf8,gid=*1001*,uid=*1000*,file_mode=0777,dir_mode=0777 0 0