本来费了老鼻子牛劲搭好了SVN,可以通过web进行访问,也弄好了eclipse和XCode,结果几个开发的同事说要上git,悲了个催,又开始折腾git。

  因为公司只有一个公网的http出口,因此开始了web上的git之路。目标是通过web在公司内部的git服务器上进行代码管理,必须实现简单的权限设置(指定的人才能读写)。因为一开始就奔web去,结果半桶水荡啊荡的,发现怎么都搞不定。因此悟出了个道理,研究一个东西,不管目标是什么,一定得从头开始,而且必须一个一个动手试,这样才能理解基础知识,否则过程中很多东西会因为一知半解而失败。到现在,终于完成了git服务器、ssh协议、http协议进行clone、push和pull,以及xcode集成的git可以push。

  思路:需要安装的组件:git、gitosis(实现git的基本权限)、git-core、gitweb。涉及的机器有客户机(开发用)和服务器。无论是客户端还是服务器都必须安装git(xcode内置了git)。服务器要作为git仓库无需工作区、暂存区,通过--bare参数建立裸仓库。git服务可以通过多种协议向客户端提供服务(本地传输,SSH 协议,Git 协议和 HTTP 协议,可以参看《服务器上的 Git - 协议》),开始一上来就试web,结果走了很多弯路,安装gitweb可以参见《在Ubuntu 14.04上配置 gitweb》,但折腾了半天总是出现不知道命令中的地址怎么填,或权限怎么配的问题,因此静下心来从基础做起,先做ssh,再实现http。

  首先是安装配置git和gitosis,实现在命令行和XCode中通过ssh协议从服务端clone、pull以及push。此间参考下面的资料1~4。

  然后是安装gitweb和git-core,实现在命令行通过http协议clone项目,XCode中通过http协议从服务器push。

  关于参考资料:

  1、《搭建ubuntu上的git服务器,并用Mac下用Xcode连接进行开发》:这个详细讲述了gitosis的安装及简单配置,按照它实施至少可以实现用客户端管理服务器的gitosis及裸仓库,并可以实现手工进行clone、pull、push。其中涉及到ssh生成rsa密码文件以及在ssh协议中的使用。将在服务器的git/.ssh目录下生成authorized_keys文件,一行一个用户,这些用户都是ssh客户端,可以用来免密码。

  2、《服务器 Gitosis 架设指南》:这里涉及了gitosis的配置,比上文要详细。注意git remote add origin git@192.168.1.115:foo.git命令,在后面XCode中要用到。

  3、《gitosis安装配置详细过程》:这个对gitosis的配置解释也比较好。

  需要记录的是在gitosis中走过的弯路有:客户端生成的rsa文件自动用user@machinename.local为名字建立rsa文件(这个名字在id_rsa.pub文件中末尾),在初始化gitosis的时候并不能更改这个名字,即使按照上文中写的改rsa.pub文件名来初始化也一样的会以带@符号的名字出现在gitosis中。当时为了改掉这个@符号,我复制了一个pub文件,改名后在客户端添加到keydir中,再commit和push到服务器,结果吧gitosis弄坏了,原因是两个内容相同但名字不同的文件导致gitosis没法鉴权。用户名后来是直接改上述的authorized_keys文件中的靠前的那个名字来实现。

  4、《理解 XCode 中的 Git 版本控制》:这个详细讲述了XCode中的Git,两种本地git库的建立方式,一个是新建项目时自动建,一个是已有项目用命令行方式建。这还只是本地git仓库的实现。

  需要记录的是XCode中远程仓库的添加,6.1版本的repository在preferences中,整了几次都失败了,估计是使用了错误的用户名或连接方式,最终成功的方法是用命令行:git remote add test@server git@serverip:test.git,其中test@server是取的名字,以后在push或pull中可以直接引用。

  5、《git-http-backend - Server side implementation of Git over HTTP》:这个描述了如何配置apache来实现http协议的clone和push。我理解的是要用git-http-backend来支持push,一般网上装的gitweb都只提供浏览。

  需要记录的是:

  • 其中有三行配置,需要修改/etc/apache2/conf-available/gitweb.conf,下面是我的gitweb.conf,其中行1与行2互斥。保留第一行则使用了gitweb,在浏览器http://server/mygit/路径中可以浏览所有项目,但无法clone、push,保留第二行则使用了git-http-backend,而gitweb失效,在浏览器http://server/mygit/中看到的是空白,但可以clone、push。还有行2的路径是lib,而不是原文中的libexec,得自己找,估计跟操作系统有关。
  • 另外需要记录的是权限。配置了dav_git.passwd文件并启用之后才能clone,如果不配置权限(注释掉行15、16),clone时报“The requested URL returned error: 403”错误。
  • 通过htpasswd命令新增http协议用户,如:htpasswd dav_git.passwd xx增加xx用户。此处是htpasswd命令详解
  • 服务器上项目的文件权限必须配置成777,否则push时会报insufficient permission for adding an object to repository database。
 #Alias /mygit /usr/share/gitweb
ScriptAlias /mygit/ /usr/lib/git-core/git-http-backend/
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv GIT_PROJECT_ROOT /var/www/html/repositories <Directory /usr/share/gitweb>
Options +FollowSymLinks +ExecCGI +SymLinksIfOwnerMatch
AddHandler cgi-script .cgi
</Directory> <Location /mygit/>
DAV on
AuthType Basic
AuthName "My Git"
AuthUserFile /etc/apache2/dav_git.passwd
Require valid-user
</Location>

  最后,XCode中远程repositories的地址:http协议:http://server/mygit/test.git。ssh协议:http://ServerIP/mygit/test.git。至于权限,ssh需要填git用户及其密码(server上的git用户在/etc/passwd文件中要/bin/bash,不能/bin/false),http制作passwd文件时的用户名及密码。可能需要在终端窗口中、项目目录下执行git remote add test http://ServerIP/mygit/test.git来为远程服务器命名,后续在xcode中才能进行push。

ps:git clone http://server/mygit/test.git来将服务器的source拉到本地。

Git服务器、http协议及XCode的更多相关文章

  1. GIT服务器的四种协议

    本地协议 最基本的就是_本地协议(Local protocol)_,所谓的远程仓库在该协议中的表示,就是硬盘上的另一个目录.这常见于团队每一个成员都对一个共享的文件系统(例如 NFS)拥有访问权,或者 ...

  2. Mac下使用终端连接远程使用ssh协议的git服务器

    最近换了台新电脑, MacBook pro,拿到新电脑之后小小心喜了一下(终于解脱windows的束缚拥抱mac啦), 然后就开始苦逼的安装各种开发环境了. 之前在windows上使用tortoise ...

  3. 版本控制-Git服务器搭建和常用命令使用

    Git是目前世界上最先进的分布式版本控制系统(没有之一).使用Svn的请参考<版本控制-svn服务器搭建和常用命令(centos 6.3)>,下面介绍Git的常用命令 常用命令 简单版 升 ...

  4. 搭建通过 ssh 访问的 Git 服务器

    一.Git 协议 Git 可以使用四种主要的协议来传输数据:本地传输,ssh 协议,Git 协议和 HTTP 协议. Git 使用的传输协议中最常见的就是 ssh 了.大多数环境已经支持通过 ssh ...

  5. centos 下git服务器搭建

    准备 CentOS Linux release 7.0.1406 (Core) ssh 22端口 http 80端口 本文主要是ssh协议支持,http协议配置后还有问题. 摘抄的一段说明 SSH 协 ...

  6. Windows下配置Git服务器和客户端 超全

    为了配合Redmine使用,特地用Git来做版本控制. Git Candy© 是一个基于ASP.NET MVC的Git分布式版本控制平台,Git Candy的目标是轻松干掉Bonobo,逐渐追赶Git ...

  7. git服务器的搭建

    http://blog.jobbole.com/25944/ 1,概念 git服务器:就是一个仓储,一个大家都可以访问的公共仓储,大家可以从这个仓储中拉取和推送数据. 协议: 与gist服务通讯的仓储 ...

  8. Windows平台使用Gitblit搭建Git服务器图文教程

    Git服务现在独树一帜,相比与SVN有更多的灵活性,最流行的开源项目托管网站Github上面,如果托管开源项目,那么就是免费使用的,但是闭源的项目就会收取昂贵的费用,如果你不缺米,那么不在本文讨论的范 ...

  9. 在windows 环境下对于 git 服务器的安装和使用

    前言: 虽然说在团队开发的时候会有版本控制服务器,但是个人自己开发的时候,有的时候也需要有个版本控制下,比如,你改好了一个小的功能,然后在这个功能上继续扩展,结果扩展不成功,于是回到这个小功能上去.当 ...

随机推荐

  1. CentOS6.4安装Hadoop2.0.5 alpha - 3-Node Cluster

    1.在第2个个节点上重复http://www.cnblogs.com/littlesuccess/p/3361497.html文章中的第1-5步 2.修改第1个节点上的hdfs-site.xml中的配 ...

  2. SQL升级脚本实现按版本差异化升级(优化)

    1.增加了对SQL Server 2000的兼容: 2.支持对脚本目录的批量处理: 3.将脚本版本的判断放到具体的升级子脚本中去,让调度脚本更固化. -- 根据SQL的版本好确定启用xp_cmdshe ...

  3. Java语言概述

    1.1 基础知识 ·第一代语言 打孔机--纯机器语言 ·第二代语言 汇编 ·第三代语言 C.Pascal.Fortran面向过程的语言 C++面向过程/面向对象 Java跨平台的纯面向对象的语言 .N ...

  4. “cv”: 具有该名称的命名空间不存在

    记得添加#include<highgui.h> 无法解析的外部符号 遇到这种问题一般都是由于缺少相应的库文件 右击项目,选择“属性”--“链接器”--“输入”--“附加依赖项” 根据错误中 ...

  5. H5实现俄罗斯方块(三)

    最高分的面板: (function (window) { 'use strict'; function HighScore() { this.canvas = new Canvas('highscor ...

  6. Linux线程-互斥锁pthread_mutex_t

    在线程实际运行过程中,我们经常需要多个线程保持同步.这时可以用互斥锁来完成任务:互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthrea ...

  7. 多线程、多进程、协程、缓存(memcache、redis)

    本节内容: 线程: a:基本的使用: 创建线程: 1:方法 import threading def f1(x): print(x) if __name__=='__main__': t=thread ...

  8. iOS AudioQueue机制的延迟问题探究

    关键字:VOIP,AudioUnit,AudioQueue,RemoteIO问题描述VOIP通话,iOS底层音频方式采用AudioUnit机制,本来也挺好,但是会有遇到CS域来电时RemoteIO挂死 ...

  9. Word 2013发布博客配置步骤

    .打开Word 2013,点击"共享"››"博客":   .在打开的窗口中点击"管理帐户":   .然后点击"新建": ...

  10. Ogre1.6.5 编译链接错误之FreeImage

    这两天想重新学习下ogre,但是在vs2010上编译1.6.5的版本上遇到链接失败的问题,耗了不少时间这里记一下. 主要是一些重定义报错. >msvcprtd.lib(MSVCP100D.dll ...