在 Windows 下搭建 Git 服务器
初看这个问题不是很难,计划很快就可以完成呢。但直到最后,发现总共花费的有效时间有6个小时之长,零零碎碎还持续了一个星期。结果还存在没解决的问题,怎么实现在客户端连上 git 服务器时需要供登录用户提供私匙。因为工作中的 git 项目,在每次 pull、push 操作时,需要输入密码,那么在 eshell(emacs 中的 shell) 却不会要求输入密码,从而不能执行 pull 等操作,必须要通过界面操作方式来输入密码,使用起来不方便。也许能让自己更方便,是程序员最有成就感的事情吧。但最终还是没能在本地搭建需要提供密码的 git 服务器,有些遗憾。如果有哪位大神知道怎么在 windows 搭建需要提供私匙登录到 git 服务器的方式,请告诉我,谢谢!以下是我参照网上的资料和自己使用时遇到的问题及解决办法,和大家分享一下。
安装 SSH 服务器
我选择的是 CopSSH,大家可以从这里下载:http://download.csdn.net/detail/lvye1221/5618819
使用时,我参照了这篇文章 http://blog.csdn.net/jizhengjieing/article/details/6799201,大体流程如下:
添加用户
在用户管理面板中添加用户,例如:gitserver: jack-green
登录方法在命令行中:ssh gitserver@127.0.0.1,输入密码即可
在添加用户时,遇到了一个很奇怪的问题,刚开始还得到了如下结论: 注意密码不能加入‘-’字符或包含数字,例如“jack-green”、“gituser1是不行的,这样不能登入ssh。得出这样的结论有些仓促,因为重新修改的密码不包含这样的字符,就认为不能包含这样的字符,有些武断了。
其实,是因为不能使用第一次创建用户时设置的密码登录到 SSH,需要重新在用户管理中,重新设置用户的密码,就可以设置"jack-green","gituser1"之类的密码的。
添加 git 命令符号链接
网上有人直接在 git 安装目录下,手动创建连接文件,其实是没有必要的。直接登录到 SSH 中,并在命令行中操作即可:
cd /Bin
ln -s "/cygdrive/d/Program Files/Git/bin/git.exe" git.exe
ln -s "/cygdrive/d/Program Files/Git/libexec/git-core/git-receive-pack.exe" git-receive-pack.exe
ln -s "/cygdrive/d/Program Files/Git/libexec/git-core/git-upload-archive.exe" git-upload-archive.exe
ln -s "/cygdrive/d/Program Files/Git/libexec/git-core/git-upload-pack.exe" git-upload-pack.exe
创建 git 库
操作流程如下:
cd /var/
mkdir project.git
cd project.git
git init
touch a b
git add .
// 如果不配置的话,commit 不能正确执行
git config --global user.name "jack"
git config --global user.email "jack@gmail.com"
git commit -m "first commit"
完成后,即可 clone 项目啦,在命令提示符下执行,会提示要求输入 SSH 用户 gitserver 的密码:
git clone gitserver@127.0.0.1:../../var/project.git project.git
注意不能采用如下方式,可能是因为权限的问题:
git clone gitserver@127.0.0.1:/var/project.git project.git
提示错误如下:
fatal: '/var/project.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
添加公匙
这没有达到预期目标,只是我尝试的印记。
创建密匙
用的工具是:ssh-keygen,因为我电脑上装了 MinGW 和 Git-Bash,有如下两种情况:
用 which 命令查看 ssh-keygen 命令,msys 中命令路径是:
d:/MinGW/msys/1.0/bin/ssh-keygen.exe
MsysGit 中路径是:
/bin/ssh-keygen
注意应该在 Git-Bash 中执行。
1. 输入文件路径,同时在路径中包含文件名,例如:
/d/SSH/tmp/jack
2. 输入密码,两次
green
还未尝试过的新的方式:ssh-keygen -C "你的email地址" -t rsa
多用户管理
这篇文章比较完善、简单地介绍了linux下搭建多用户操作的功能:http://blog.csdn.net/jixiuffff/article/details/5968929
为了模拟多个用户的情况,直接在用户管理中添加了 user1 和 user2 两个用户。并用copssh激活这两个用户,现在才明白,激活用户时,输入密码就是为了生成用户的公匙和私匙。信息如下:
user1:gituser1
user2:gituser2
虽然在 windows 系统下,建好了这几个用户,但不像文章中提到的那样,在 gitserve 用户中,添加了 user1 和 user2 的公匙,然后能够在 user1 命令行时,重新登录到 gitserver,但是此时输入的密码依然是 gitserver 的密码,那添加公匙有什么意义呢?
先不研究了,可能 windows 下不太好搭建这样的环境。暂时还是从界面中 pull 最新内容好了。
最后
虽然,添加公匙部分没有搭建好,但是,远程库还是搭建起来,以后就在这这里尽情地练习 git 命令吧。