本来费了老鼻子牛劲搭好了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. MATLAB 图像操作基础

    I = imread('pout.tif'); imshow(I): figure imhist(I) I2 = histeq(I); figure imshow(I2) imwrite (I2, ' ...

  2. vim常用命令总结 (转)

    vim 选择文本,删除,复制,粘贴   文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下: v    从光标当前位置开始,光标所经过的地方会被选中,再按一下v结束. V    从光标 ...

  3. Umap2:开源USB host安全评估工具

    Umap2是一款由NCC Group和Cisco SAS小组开发的.基于python的USB host安全评估工具. 它拥有第一版所支持的所有功能: umap2emulate:USB设备枚举 umap ...

  4. Manacher

    HDU 3068 Manacher裸题 #include <cstdio> #include <cstring> ; ],STR[Maxn<<]; ],Id,Mx; ...

  5. BZOJ 4326 树链剖分+二分+差分+记忆化

    去年NOIP的时候我还不会树链剖分! 还是被UOJ 的数据卡了一组. 差分的思想还是很神啊! #include <iostream> #include <cstring> #i ...

  6. Oracle PL/SQL入门语法点

    PL_SQL:带有分支和循环,面向过程匿名块:declare(可选,声明各种变量和游标的地方)begin(必要的,从此开始执行)exception(抓取到异常后执行的)end;[sql] view p ...

  7. Linux内核分析——跟踪分析Linux内核的启动过程

    万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 实验部分 menu程序: cd LinuxKernel/ qemu -kernel linux-3.18.6/a ...

  8. 用meta-data配置参数

    在接入第三方渠道SDK的时候,经常会看到其配置文件AndroidManifest.xml有类似如下的定义: <!-- appid --> <meta-data android:nam ...

  9. 深入解析Javascript闭包

    首先给个例子: function PfnOuter(){ var num=999; function PfnInner(){ alert(num); } return PfnInner; } var ...

  10. python实现拷贝指定文件到指定目录

    python实现这个功能非常简单,因为库太强大了 import os import shutil alllist=os.listdir(u"D:\\notes\\python\\资料\\&q ...