git有4种协议方式建git服务器,分别是本地协议、SSH协议、git协议和http协议。
Mac OS X自带了apache web服务器,使用很方便,但是与其它几种方式相比速度很慢,一般以http协议的方式提供git库的只读访问。
对于日常工作提交,应以git方式为好,因为速度很快。
1。开启web服务器
1.1
打开“系统偏好设置”的“共享”,勾上“Web共享”即可,可以用浏览器访问http://localhost/试试,btw:
http://localhost/~[当前登陆用户]
是登陆用户的主页
1.2 这种方式使用了WebDAV上传/修改/删除服务器上的文件,缺省情况下WebDAV是不能增删改的,所以只能pull不能push,如果git push会出现问题:
或者
多是WebDAV没有配制好的问题
详细情况可参考这里:[url=http://manas.tungare.name/blog/howto-setup-webdav-on-mac-os-x-leopard-for-syncing-omnifocus-to-iphone/]HOWTO Setup WebDAV on Mac OS X Leopard[/url]
会有安全隐患,不熟的没有必要还是不要弄了。
2。安装git
去git的[url=http://git-scm.com/download]下载主页[/url]找最新的安装dmg下载安装,缺省安装路径在 /usr/local/git目录下
3。初始化工程repository
在web服务器目录下创建新的bare repository
好了,现在可以用http访问git库了:
4. http访问比较慢,一般只对外提供只读访问用,日常代码提交可以通过git协议进行:
然后启动git daemon:
base-path参数指出web服务器的Documents目录为git服务器基础目录,git-daemon会扫描该目录下所有尾缀为.git的目录,如果这些目录下有git-daemon-export-ok文件,则将此目录作为git协议的输出repository,用户和用户组都设为_www,与web服务器相同。
试试是否成功:
修改源代码后提交:
git push
如果出现如下错误:
或者
这类错误一般是git服务器端的问题,检查系统日志会发现:
这是因为git-daemon命令启动时--user=_www --group=_www这两个参数制定的用户和用户组权限与服务器上/Library/WebServer/Documents的用户和用户组权限不一致所致。办法有两个:
a。将git服务器相关文件权限修改成www:www用户和用户组即可
git push如果出现错误
这是因为git-daemon命令缺少这几个参数:
--enable=upload-pack --enable=upload-archive --enable=receive-pack
综上所述,http方式配制起来很麻烦,比较适合pull,虽然有点慢,采用git协议方式比较安全方便点,而且比较下可以发现git方式比http快的太多了。
参考:
Pro Git 2009
[url=http://blog.pkgbox.org/2009/12/setting-up-git-server-fast-macos-x.html]setting up git server fast macos x[/url]
[url=http://www.onyxbits.de/content/setting-public-repository-git]Setting up a public (bare) repository with git[/url]
Mac OS X自带了apache web服务器,使用很方便,但是与其它几种方式相比速度很慢,一般以http协议的方式提供git库的只读访问。
对于日常工作提交,应以git方式为好,因为速度很快。
1。开启web服务器
1.1
打开“系统偏好设置”的“共享”,勾上“Web共享”即可,可以用浏览器访问http://localhost/试试,btw:
http://localhost/~[当前登陆用户]
是登陆用户的主页
1.2 这种方式使用了WebDAV上传/修改/删除服务器上的文件,缺省情况下WebDAV是不能增删改的,所以只能pull不能push,如果git push会出现问题:
error: Cannot access URL http://localhost/<my_project>.git, return code 22
或者
error: cannot lock existing info/refs
fatal: git-http-push failed
多是WebDAV没有配制好的问题
详细情况可参考这里:[url=http://manas.tungare.name/blog/howto-setup-webdav-on-mac-os-x-leopard-for-syncing-omnifocus-to-iphone/]HOWTO Setup WebDAV on Mac OS X Leopard[/url]
会有安全隐患,不熟的没有必要还是不要弄了。
2。安装git
去git的[url=http://git-scm.com/download]下载主页[/url]找最新的安装dmg下载安装,缺省安装路径在 /usr/local/git目录下
3。初始化工程repository
cd ~/Document/workspace/<my project>
git init
git add *
git commit -m "initial import"
在web服务器目录下创建新的bare repository
git clone --bare -l /Users/woo/Documents/workspace/<my project> /Library/WebServer/Documents/<my_project>.git
cd /Library/WebServer/Documents/<my_project>.git
git update-server-info
好了,现在可以用http访问git库了:
cd /tmp
git clone http://localhost/<my_project>.git
4. http访问比较慢,一般只对外提供只读访问用,日常代码提交可以通过git协议进行:
cd /Library/WebServer/Documents/<my_project>.git
touch git-daemon-export-ok
然后启动git daemon:
sudo /usr/local/git/libexec/git-core/git-daemon --base-path=/Library/WebServer/Documents/ --syslog --verbose --pid-file=/var/run/git-daemon.pid --user=_www --group=_www --detach --enable=upload-pack --enable=upload-archive --enable=receive-pack
base-path参数指出web服务器的Documents目录为git服务器基础目录,git-daemon会扫描该目录下所有尾缀为.git的目录,如果这些目录下有git-daemon-export-ok文件,则将此目录作为git协议的输出repository,用户和用户组都设为_www,与web服务器相同。
试试是否成功:
cd /tmp
git clone git://localhost/<my_project>.git
修改源代码后提交:
git push
如果出现如下错误:
pack-objects died of signal 13
error failed to push some refs
或者
error: unpack failed: unpack-objects abnormal exit
To git://xxx.yyy.local/<my_project>.git
! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'git://xxx.yyy.local/<my_project>.git'
这类错误一般是git服务器端的问题,检查系统日志会发现:
Mar 7 22:11:50 xxx.yyy git-daemon[6334]: error: insufficient permission for adding an object to repository database ./objects
这是因为git-daemon命令启动时--user=_www --group=_www这两个参数制定的用户和用户组权限与服务器上/Library/WebServer/Documents的用户和用户组权限不一致所致。办法有两个:
a。将git服务器相关文件权限修改成www:www用户和用户组即可
sudo chown -R www:www /Library/WebServer/Documents
b。修改git-daemon启动参数(--user=www --group=www),使其与git服务器上repository文件的用户和权限一致,git push如果出现错误
errno=Connection refused
fatal: The remote end hung up unexpectedly
这是因为git-daemon命令缺少这几个参数:
--enable=upload-pack --enable=upload-archive --enable=receive-pack
综上所述,http方式配制起来很麻烦,比较适合pull,虽然有点慢,采用git协议方式比较安全方便点,而且比较下可以发现git方式比http快的太多了。
参考:
Pro Git 2009
[url=http://blog.pkgbox.org/2009/12/setting-up-git-server-fast-macos-x.html]setting up git server fast macos x[/url]
[url=http://www.onyxbits.de/content/setting-public-repository-git]Setting up a public (bare) repository with git[/url]