学科:Git/在Windows下安装Gitolite

来自维基学院

一些约定[编辑 | 编辑源代码]

安装是在本地进行的(示例中域名均为localhost),示例中gitolite使用的账户为“git”,如果你要使用其他名字,请看清命令。粗体为用户输入,斜体部分是需要你根据实际情况进行修改的。


准备Cygwin环境[编辑 | 编辑源代码]

因为gitolite并不提供原生Windows支持,所以在Windows上搭建gitolite需要借助Cygwin。Cygwin可以为Windows提供一个类似Linux的POSIX模拟系统。


安装[编辑 | 编辑源代码]

  • 访问 http://cygwin.com/install.html 获取安装文件
  • 按提示继续,路径建议不要包含中文或空格
  • 之后来到组件选择 Select Packages 部分
推荐选择:openssh(必选),vim(推荐,gl-setup安装时如果未使用-q开关则会调用vi编辑配置文件),git(必选),git-completion,git-gui,git-svn(可选),gitk。
关于编辑器:如果你不熟悉vim或编辑器列表里其他编辑器,建议选择nano
提示:建议使用搜索寻找需要的组件
  • 继续按提示安装

配置Cygwin[编辑 | 编辑源代码]

  • 将cygwin的bin目录加入到Windows系统环境变量中,重启生效
  • 打开Cygwin终端,执行
   $ /bin/cyglsa-config

将提示:

   Warning: Registering the Cygwin LSA authentication package requires administrator privileges!  You also have to reboot the machine to activate the change.
   Are you sure you want to continue? (yes/no)

yes确认:

   Cygwin LSA authentication package registered.
   Activating Cygwin's LSA authentication package requires to reboot.

重启生效。


准备SSH[编辑 | 编辑源代码]

  • 以管理员身份启动终端,执行
   $ ssh-host-config
  • 接下来要回答一系列问题(一次不成功没关系,可以再次操作),以下是推荐的回答:
    • Should privilege separation be used? 选yes
    • Query: new local account 'sshd'? (yes/no) 选yes
    • Do you want to install sshd as a service? 选yes
    • Enter the value of CYGWIN for the daemon: [] 直接回车
    • Do you want to use a different name? (yes/no) 选no
    • Create new privileged user account 'cyg_server'? (yes/no) 选yes,接下来输入密码(如果组策略开启了密码强度要求,设置的密码要符合该要求,否则会失败)

如果成功最后几条信息会是:

   *** Info: The sshd service has been installed under the 'cyg_server'
   *** Info: account.  To start the service now, call `net start sshd' or
   *** Info: `cygrunsrv -S sshd'.  Otherwise, it will start automatically
   *** Info: after the next reboot.
   
   *** Info: Host configuration finished. Have fun!

接下来执行

   $ sc start sshd

启动sshd服务,成功的输出形如:

   SERVICE_NAME: sshd
       TYPE               : 10  WIN32_OWN_PROCESS
       STATE              : 2  START_PENDING
                               (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
       WIN32_EXIT_CODE    : 0  (0x0)
       SERVICE_EXIT_CODE  : 0  (0x0)
       CHECKPOINT         : 0x2
       WAIT_HINT          : 0x1388
       PID                : 2644
       FLAGS              :
  • 提示:cygrunsrv用于管理服务,也可使用“cygrunsrv -S sshd”启动服务,不同的是没有信息输出则表示成功启动。使用“cygrunsrv -R sshd”可以移除sshd服务。
  • 可选:配置防火墙,允许ssh服务使用端口22(如果没改配置文件中的端口设置的话)


准备git账户[编辑 | 编辑源代码]

虽然可以使用现有账户或ssh-host-config中创建的cyg_server账户,但还是推荐单独创建一个名为“git”的账户。

账户创建[编辑 | 编辑源代码]

  • 转到Windows控制面板,新建名为“git”账户(这步不区分大小写)
  • 进入终端,执行:
   $ mkpasswd -l -u git >> /etc/passwd
这步是为了让cygwin系统认得git账户对应Windows的哪个账户

登入git账户[编辑 | 编辑源代码]

  • 打开终端,通过ssh登入git账户,参考命令:
   $ ssh git@localhost

成功的参考输出:

   The authenticity of host 'localhost (::1)' can't be established.
   ECDSA key fingerprint is 18:a6:df:7c:93:5f:c7:b6:20:ce:46:03:90:a9:f8:da.
   Are you sure you want to continue connecting (yes/no)? yes
   Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
   git@localhost's password:
   Could not chdir to home directory /home/git: No such file or directory
   Copying skeleton files.
   These files are for the users to personalise their cygwin experience.
   
   They will never be overwritten nor automatically updated.
   
   `./.bashrc' -> `/home/git//.bashrc'
   `./.bash_profile' -> `/home/git//.bash_profile'
   `./.inputrc' -> `/home/git//.inputrc'
   `./.profile' -> `/home/git//.profile'
   

并且命令的前导符变成:git@localhost。


安装Gitolite[编辑 | 编辑源代码]

添加bash环境变量[编辑 | 编辑源代码]

编辑~/.bashrc,以nano作为示例:

   $ nano ~/.bashrc
  • nano的使用提示:nano和Windows笔记本很像,也可用方向键移动光标,底部会显示一些如“^G”的命令(如果操作系统是中文的这些命令也应该有中文提示),“^”表示Ctrl,如按Ctrl+G获取帮助。

在第一行添加:

  PATH="$PATH:$HOME/bin"

Ctrl+X,回车保存。为了使应用立即生效需要执行:

  $ source ~/.bashrc

确认添加结果可以执行:

   $ echo $PATH

刚才添加的路径应该加到最后面了,示例为“/home/git/bin”。

Clone Gitolite文件[编辑 | 编辑源代码]

cd到/tmp/share(必须是这个路径),命令:

   $ cd /tmp/share
  • 为什么路径必须是“/tmp/share”?
如果是Linux当然没有这个限制,但cygwin下的gitolite在安装中的路径判断存在问题,如果是其他路径,在gl-setup时会提示找不到/tmp/share中的文件,所以目前就放到这个目录了。后面给RC文件添加$ENV{PATH}也是cygwin路径判断的问题。 —— BB9z (talk) 10:44, 1 March 2012 (UTC)

然后从远端clone gitolite仓库:

   $ git clone git://github.com/sitaramc/gitolite.git

参考输出:

   Cloning into 'gitolite'...
   remote: Counting objects: 5197, done.
   remote: Compressing objects: 100% (1775/1775), done.
   remote: Total 5197 (delta 3557), reused 4954 (delta 3366)
   Receiving objects: 100% (5197/5197), 1.74 MiB | 168 KiB/s, done.
   Resolving deltas: 100% (3557/3557), done.

gl-system-install[编辑 | 编辑源代码]

  • gl-system-install,参考命令及输出:
   $ /tmp/share/gitolite/src/gl-system-install
   using default values for EUID=1015:
   /home/git/bin, /home/git/share/gitolite/conf, /home/git/share/gitolite/hooks

修正rc文件环境变量[编辑 | 编辑源代码]

注:这是cygwin独有的问题,Linux无需此操作。

以nano为例,执行:

   $ nano ~/.gitolite.rc

在第一行添加如下内容,保存:

   $ENV{PATH}="/bin:/usr/bin";

准备管理员账户的公钥[编辑 | 编辑源代码]

gitolite安装初始需要提供一名管理员的公钥,安装好后只要有相应私钥即可通过gitolite-admin库进行管理,既可以在本地,也可以在远端。 为了方便起见,下面以本机已有账户为例。

打开终端登入要作为初始管理员的账户(非git账户,默认打开终端使用的是当前登录Windows的用户,如果要把当前用户作为管理员的话直接打开终端就可以了)。

将用户公钥从ssh用户目录中拷贝出来,参考命令:

   $ cp ~/.ssh/id_rsa.pub /name.pub

如果提示找不到文件则需要先生成一个,执行:

   $ ssh-keygen -t rsa

需要回答几个问题,直接回车。参考的输出:

   Generating public/private rsa key pair.
   Enter file in which to save the key (/home/git/.ssh/id_rsa):
   Enter passphrase (empty for no passphrase):
   Enter same passphrase again:
   Your identification has been saved in /home/git/.ssh/id_rsa.
   Your public key has been saved in /home/git/.ssh/id_rsa.pub.
   The key fingerprint is:
   95:bb:00:a0:04:2e:12:3c:21:9a:37:f6:8b:57:f0:e0 git@BBservice
   The key's randomart image is:
   +--[ RSA 2048]----+
   |=oo .            |
   |+* . .     .     |
   |=.* o .   o      |
   |oo + + . . .     |
   |    E o S .      |
   |   . o   . .     |
   |  . o     .      |
   |   .             |
   |                 |
   +-----------------+

然后再执行之前的拷贝命令。

gl-setup[编辑 | 编辑源代码]

  • 最后,执行gl-setup,参考命令:
  $ gl-setup -q path_to_admin_pub_file

成功的示例:

   creating gitolite-admin...
   Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
   creating testing...
   Initialized empty Git repository in /home/git/repositories/testing.git/
   [master (root-commit) 119d2f3] gl-setup -q /home/git.pub
    2 files changed, 8 insertions(+), 0 deletions(-)
    create mode 100644 conf/gitolite.conf
    create mode 100644 keydir/git.pub

至此Gitolite的安装过程就全部完成了。

验证安装[编辑 | 编辑源代码]

首先,检出gitolite-admin仓库。

终端登入管理员身份,在合适的目录执行:

   $ git clone git@localhost:gitolite-admin

成功的输出参考:

   Cloning into 'gitolite-admin'...
   remote: Counting objects: 15, done.
   remote: Compressing objects: 100% (11/11), done.
   remote: Total 15 (delta 2), reused 0 (delta 0)
   Receiving objects: 100% (15/15), done.
   Resolving deltas: 100% (2/2), done.

之后可以修改配置文件,能顺利提交的话就没有问题了。

关于Gitolite的配置参见:Subject:Git/Gitolite配置


问题解答[编辑 | 编辑源代码]

  • 安装Cygwin时少选或选错组件了怎么办?
只需重新执行Setup.exe在原位安装即可,选择组件时,已有组件的状态将显示为keep。


  • 安装gitolite的过程出问题了,如何重新安装?
直接重新执行gl-system-install和gl-setup应该没有问题,如果想全新的安装,可以用rm命令删除gitolite相关文件,详见: http://sitaramc.github.com/gitolite/install.html#uninstall_
甚至你也可以用“rm -fr /home/git”将整个git用户文件推倒重来,但要小心,“rm -fr”是极度危险的。

参考[编辑 | 编辑源代码]

  1. senawario - gitolite tutorial
  2. Google Group > gitolite - gitolite-admin does not appear... yes i failed now i'm stuck ><