有点骇人听闻的解决方法是:
在具有足够许可权(即mktemp -d的情况下,按指定的意愿初始化一个空的repro]$ tempdir = $(mktemp -d)
$ git init $tempdir
Initialized empty Git repository in /tmp/tmp.pREa198fnx/.git/
将创建的.git文件夹移动到目标位置。$ mv $tempdir/.git /srv/server/sub/
mv: preserving times for './.git/branches': Operation not permitted
mv: preserving permissions for ‘./.git/branches’: Operation not permitted
mv: preserving times for './.git/hooks/applypatch-msg.sample': Operation not permitted
mv: preserving permissions for ‘./.git/hooks/applypatch-msg.sample’: Operation not permitted
mv: preserving times for './.git/hooks/commit-msg.sample': Operation not permitted
...
在移动过程中会出现一些错误,但不会阻止mv移动文件。
最后,git可以按预期工作:$ echo "Foo" > bar.txt
$ git add bar.txt
$ git commit -m "Added Foobar"
[master (root-commit) e232039] bar.txt
1 file changed, 1 insertion(+)
create mode 100755 bar.txt
$ git status
On branch master
nothing to commit, working tree clean
分支和结帐似乎可以正常工作,没有测试推/拉。
仍然会喜欢更干净的解决方案。