学科:Git/在Windows下安装Gitolite
安装是在本地进行的(示例中域名均为localhost),示例中gitolite使用的账户为“git”,如果你要使用其他名字,请看清命令。粗体为用户输入,斜体部分是需要你根据实际情况进行修改的。
因为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的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-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(如果没改配置文件中的端口设置的话)
虽然可以使用现有账户或ssh-host-config中创建的cyg_server账户,但还是推荐单独创建一个名为“git”的账户。
- 转到Windows控制面板,新建名为“git”账户(这步不区分大小写)
- 进入终端,执行:
$ mkpasswd -l -u git >> /etc/passwd
- 这步是为了让cygwin系统认得git账户对应Windows的哪个账户
- 打开终端,通过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。
编辑~/.bashrc,以nano作为示例:
$ nano ~/.bashrc
- nano的使用提示:nano和Windows笔记本很像,也可用方向键移动光标,底部会显示一些如“^G”的命令(如果操作系统是中文的这些命令也应该有中文提示),“^”表示Ctrl,如按Ctrl+G获取帮助。
在第一行添加:
PATH="$PATH:$HOME/bin"
Ctrl+X,回车保存。为了使应用立即生效需要执行:
$ source ~/.bashrc
确认添加结果可以执行:
$ echo $PATH
刚才添加的路径应该加到最后面了,示例为“/home/git/bin”。
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,参考命令及输出:
$ /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
注:这是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 -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”是极度危险的。