我目前正在使用Apache 2.4.7在Ubuntu LTS 14.04机器上设置一些git存储库.
这是apache配置:
SetEnv GIT_PROJECT_ROOT /var/www/html/git
SetEnv GIT_HTTP_EXPORT_ALL 1
SetEnv REMOTE_USER $REDIRECT_REMOTE_USER
ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/usr/lib/git-core/git-http-backend
<Location /git/oswald.git>
Options +ExecCGI
AuthType Basic
DAV on
AuthName "Git"
AuthUserFile /etc/apache2/git_paragon_passwd
Require valid-user
Order allow,deny
Allow from all
</Location>
Run Code Online (Sandbox Code Playgroud)
测试存储库在/var/www/html/git/oswald.git.在存储库中,我设置了config属性
http.receivepack=true
Run Code Online (Sandbox Code Playgroud)
该文件git-daemon-export-ok存在.
如果我现在尝试克隆:
git clone https://server/git/oswald.git
Run Code Online (Sandbox Code Playgroud)
认证后,我得到:
fatal: https://server/git/oswald.git/info/refs not valid: is this a git repository?
Run Code Online (Sandbox Code Playgroud)
(git 2.1.0客户端,在服务器git 1.9.1上).
我尝试了几件事,所以如果我不使用git-http-backend并通过WebDAV我可以克隆但不能推送,使用git-http-backend我甚至无法克隆.
如果我改变的最后一行 …
我有一个TChan作为一个线程的输入,应该像这样:
如果sombody在特定时间内写入TChan,则应检索内容.如果在指定时间内没有任何内容写入,则应取消阻止并继续Nothing.
我对此的尝试是使用如下的超时功能System.Timeout:
timeout 1000000 $ atomically $ readTChan pktChannel
Run Code Online (Sandbox Code Playgroud)
这似乎工作,但现在我发现,我有时会丢失数据包(它们写入通道,但不会在另一侧读取.在日志中我得到这个:
2014.063.11.53.43.588365 Pushing Recorded Packet: 2 1439
2014.063.11.53.43.592319 Run into timeout
2014.063.11.53.44.593396 Run into timeout
2014.063.11.53.44.593553 Pushing Recorded Packet: 3 1439
2014.063.11.53.44.597177 Sending Recorded Packet: 3 1439
Run Code Online (Sandbox Code Playgroud)
其中"推送记录的数据包"是从一个线程写入,"发送记录的数据包"是从发送方线程中的TChan读取.Sending Recorded Packet 2 1439缺少该行,这表示从TChan成功读取.
似乎如果在错误的时间点收到超时,则通道丢失该数据包.我怀疑threadKill内部使用的功能timeout和STM不能很好地协同工作.
它是否正确?有人有另一种不会丢失数据包的解决方案吗?