我正在使用WSL1(Windows Linux子系统)和Ubuntu 20.04.1 LTS在Win10上工作。我有一个Samba(1.0)网络共享,我想通过我的Ubuntu终端在其中创建git仓库。
christian@my_pc:~/p/git_test$ ll
total 2048
drwxr-xr-x 1 christian christian 512 Jan 19 11:13 ./
drwxr-xr-x 1 christian christian 512 Jan 19 10:11 ../
-rwxr--r-- 1 christian christian 0 Jan 19 10:12 my_code_file.rb
我可以无问题地运行git init
,但是一旦我尝试git add
文件,就会出现以下错误:
christian@my_pc:~/p/git_test$ git add my_code_file.rb
error: insufficient permission for adding an object to repository database .git/objects
error: my_code_file.rb: failed to insert into database
error: unable to index file 'my_code_file.rb'
fatal: adding files failed
就我所知,权限都没问题。所有文件都属于christian:christian。目录树如下:
.git
├── [-rwxr--r--] HEAD
├── [drwxr-xr-x] branches
├── [-rwxr--r--] config
├── [-rwxr--r--] description
├── [drwxr-xr-x] hooks
│ ├── [-rwxr--r--] applypatch-msg.sample
│ ├── [-rwxr--r--] commit-msg.sample
│ ├── [-rwxr--r--] fsmonitor-watchman.sample
│ ├── [-rwxr--r--] post-update.sample
│ ├── [-rwxr--r--] pre-applypatch.sample
│ ├── [-rwxr--r--] pre-commit.sample
│ ├── [-rwxr--r--] pre-merge-commit.sample
│ ├── [-rwxr--r--] pre-push.sample
│ ├── [-rwxr--r--] pre-rebase.sample
│ ├── [-rwxr--r--] pre-receive.sample
│ ├── [-rwxr--r--] prepare-commit-msg.sample
│ └── [-rwxr--r--] update.sample
├── [drwxr-xr-x] info
│ └── [-rwxr--r--] exclude
├── [drwxr-xr-x] objects
│ ├── [drwxr-xr-x] e6
│ │ └── [-r-xr--r--] tmp_obj_mZzHwy
│ ├── [drwxr-xr-x] info
│ └── [drwxr-xr-x] pack
└── [drwxr-xr-x] refs
├── [drwxr-xr-x] heads
└── [drwxr-xr-x] tags
10 directories, 17 files
奇怪的是,在执行 git add my_code_file.rb
命令后,我再也无法删除.git
目录,会提示权限错误:
christian@my_pc:~/p/git_test$ rm -rf .git
rm: cannot remove '.git/objects/e6/tmp_obj_mZzHwy': Permission denied
似乎git创建了名为
tmp_obj_mZzHwy
的文件,但我没有删除它的权限,这应该不是正常情况。在执行
git add my_code_file.rb
之后,再次查看.git
文件夹的权限。christian@my_pc:~/p/git_test$ ls -lahR .git
.git:
total 0
drwxr-xr-x 1 christian christian 512 Jan 19 11:14 .
drwxr-xr-x 1 christian christian 512 Jan 19 11:13 ..
drwxr-xr-x 1 christian christian 512 Jan 19 11:14 objects
.git/objects:
total 0
drwxr-xr-x 1 christian christian 512 Jan 19 11:14 .
drwxr-xr-x 1 christian christian 512 Jan 19 11:14 ..
drwxr-xr-x 1 christian christian 512 Jan 19 11:13 e6
.git/objects/e6:
total 1.0M
drwxr-xr-x 1 christian christian 512 Jan 19 11:13 .
drwxr-xr-x 1 christian christian 512 Jan 19 11:14 ..
-r-xr--r-- 1 christian christian 0 Jan 19 11:13 tmp_obj_mZzHwy
我正在处理的Samba共享在Win10上被挂载为磁盘(带有P:的字母)。在我的WSL Ubuntu上,我通过以下行在/etc/fstab中挂载它:
//192.168.X.X/sharename /mnt/sharename cifs username=user,password=pass 0 0
P:▸ /mnt/p▸ drvfs▸defaults,metadata,rw,exec,uid=christian,gid=christian,umask=22,fmask=11▸0 0
这是我的存储库的.git/config
文件。
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
我尝试解决问题的方法:
chmod -R u+rwx .
git init --shared=all
umask 0000
在我的主目录(或非samba驱动器)上,git init/add
没有问题。
更新
我发现samba共享未正确挂载,缺少元数据选项或被忽略,每当我挂载它时。我认为这可能是问题所在!然而,对我来说不清楚为什么会被忽略,或者是否有一种方式强制执行?
TARGET SOURCE FSTYPE OPTIONS
/ rootfs wslfs rw,noatime
...
├─/mnt/p P: drvfs rw,noatime,uid=1000,gid=1000,case=off
└─/mnt/c C:\ drvfs rw,noatime,uid=1000,gid=1000,metadata,case=off