可能已经挖到最深的坑:在Windows Server下配置Git Server脱坑之路

前言:本教程总结了我从开始在Windows Server[其它Windows环境也是一样]下配置Git Server到配置成功的两天时间内遇到的所有坑(都已经解决并成功搭建起环境)

本教程使用的是msysgit(git version 2.7.2.windows.1)和copssh
本教程主要着眼于解决配置后期遇到的坑,所以前面的Git安装和ssh工具安装的步骤就省略了,给大家提供几个好的教程链接,如果按照教程链接成功了的话,恭喜你运气很好,如果没有成功的话就回来接着往下看吧
先上链接:
这篇步骤比较全
这篇比较新,也提供了一个坑的解决办法,不过没说清楚,我后面会提到并对解决办法进行详细说明

在Windows下配置Git原理

在讲坑之前,我们先来看一下原理。在Linux下(包括Mac)配置Git非常简单(六步解决问题,见廖雪峰老师的博客),因为Git就是为Linux而生的。那为什么在Windows下配置就及其麻烦呢?首先,因为Git是基于ssh连接的,而Windows下原生不支持ssh连接,所以我们必须借助第三方的ssh工具来解决ssh连接问题;然后,我们需要安装Git吧;再者,我们还需要把Git和ssh工具关联起来吧,也就是要通过远程的ssh工具来调用git的命令,这样才能通过远程ssh连接使用到Git,让它好好工作。

下面开始入坑了

按照上面提到的教程链接配置后,基本都可以达到一个状态,那就是:可以在远程通过ssh命令连接到服务器(也就是你的Windows),并且可以使用Linux的命令(比如ls pwd等),但是没有办法使用Git的命令,为什么呢?
其实道理很简单:服务器上有ssh工具(已经正常工作了因为我们可以从远程登录了)和Git(别和我说你还没装),但是ssh工具并不知道Git的存在(假如把ssh工具放在C盘,然后Git放在一个你自己都找不到的角落),所以你通过ssh连接过去,ssh工具也不知道Git在哪里。上面的链接教程中已经提到让你将libiconv-2.dll, git.exe, git-receive-pack.exe, git-upload-archive.exe, git-upload-pack.exe等文件都复制到ssh工具安装目录的bin目录下,如果你复制这些文件之后已经可以远程使用git命令了,那么恭喜你不用往下看了

第一个坑

但是不少小伙伴(比如我)会遇到这样的错误:/usr/bin/git.exe: error while loading shared libraries: ?: cannot open shared object file: No such file......针对这个问题,好多教程都提到了下面这个国外博客的解决办法:

#There is a step to copy all the Gitexecutables into your CopSsh bindirectory. Instead of copying filesand figuring out which files areneeded, add the git bin path to yourgit path. I did so by modifying my.bashrc and CopSsh profile.

#Here's what I added to .bashrc (in your CopSsh and Windows home directory):

gitpath='/cygdrive/c/Program Files (x86)/Git/bin'

gitcorepath='cygdrive/c/Program Files (x86)/Git/libexec/git-core'

PATH=${gitpath}:${gitcorepath}:${PATH}

#Here's what I added to the bash profile (in CopSsh etc/profile):

gitpath='/c/Program Files (x86)/Git/bin'

gitcorepath='cygdrive/c/Program Files (x86)/Git/libexec/git-core'

export PATH="/bin:$syspath:$gitpath:$gitcorepath:$winpath"

#There is some duplication here - it works for me, so someone chime in which is the correct place to modify the path.

我当时看到这个的时候表情如下:

可能已经挖到最深的坑:在Windows Server下配置Git Server脱坑之路_第1张图片
你在逗我?

那个 cygdrive是什么鬼?
为什么 gitpath里面的 cygdrive前面有 /gitcorepathcygdrive前面却没有?
还有那个什么 .bashrcbash profile又跑到哪里玩去了,为什么我找不到?
还有我的文件路径跟这个一看就不一样啊,我是要全部替换掉还是怎么弄?
那个斜杠到底应该是这样 '\'还是这样 '/' ?能不能说清楚啊......
如果你有这些问题,那么你来对地方了,下面我就将解决这些疑问(认真脸)
首先我们为什么要干这些事?无非就是告诉ssh工具我们安装的Git在哪里
下面让我们一步一步来:
先把 .bashrcbash profile这两个调皮的家伙揪出来

  1. bashrcICW\home\Administrator这里
  2. bash profileICW\etc这里
    然后要怎么修改这两个文件呢?直接在后面加上下面的字段
 #这是加到.bashrc后面的,我们需要修改的地方是,把gitpath的/cygdrive/后面的路径改成你自己的Git安装路径下的bin目录路径;把gitcorepath的cygdrive/后面的路径改成泥自己的Git安装路径下的libexec/git-core路径(这里又有一个坑,你可能会发现Git路径下根本没有libexec文件夹......别急,看看Git下是不是有个mingw32或者mingw64[看你装的是64位还是32位],点进去,你会发现原来libexec原来藏到这里了...心好累。。。)接着又是一个坑来了,你会发现你从复制过来的路径的斜杠是\这样的,所以你要手动把它们都改成/这样。
gitpath='/cygdrive/c/Program Files (x86)/Git/bin'
gitcorepath='cygdrive/c/Program Files (x86)/Git/libexec/git-core'
PATH=${gitpath}:${gitcorepath}:${PATH}

#这是加到bash profile后面的,同样的我们需要按照上面的方法修改路径
gitpath='/c/Program Files (x86)/Git/bin'
gitcorepath='cygdrive/c/Program Files (x86)/Git/libexec/git-core'
export PATH="/bin:$syspath:$gitpath:$gitcorepath:$winpath"

上面解决完之后再测试Git命令(建议使用 git --version查看版本号命令查看)发现Git可以用了。这时候我们可以建立一个Git仓库来测试一下远程clone。在远程端(非你的Windows服务器)通过ssh连接到服务器后在远程端依次输入以下命令

#进入根目录(就是你通过ssh连接后进入的目录)
cd ~
#新建一个testFolder文件夹
mkdir testFolder
#进入刚创建的文件夹
cd testFolder
#新建一个测试文件
touch testFile
#创建git仓库
git init
#将testFile加入到Git版本控制下
git add testFile
#提交修改
git commit -m "init commit这个信息你可以随意修改"

到这里你的仓库就建好了,下面关闭ssh连接(或者另外开一个命令行窗口)来测试clone命令,命令如下:
git clone userName@hostName:testFolder
这里说明一下,userName就是你刚刚ssh连接的用户名,hostName填IP地址,其它不用修改。这句命令的意思就是通过userName登陆到hostName服务器然后把testFolder克隆到本地。
如果成功clone的话本地目录下就会有该文件夹了,保险起见点开进去看看有没有我们刚刚创建的testFile文件,如果都没问题的话那就恭喜你了
如果你没有这样的运气(跟我一样苦逼的小伙伴......),那就着默默咽下眼泪接着往下看吧(心更累了,为什么每次受伤的都是我们)

深坑来了

看到这里的小伙伴应该是遇到这样的问题了

Cloning into 'test'...
/usr/bin/git-upload-pack.exe: error while loading shared libraries: libssp-0.dll: cannot open shared object file: No such file or directory
fatal: Could not read from remote repository.

别急...我们来分析一下这个报错信息,它说在加载libssp-0.dll的时候不能打开相关文件,这个libssp-0.dll是干什么的我也不知道,不过不重要,我们注意到这个报错信息前面的内容/usr/bin/git-upload-pack.exe,大概是说在运行git-upload-pack.exe这个exe的时候没找到相关的文件。
既然它找不到那我们就帮它找吧(看我们多好心,还帮它找朋友,它却不给我们过......)
那我们怎么找呢?
这里建议进入到Windows图形界面下:
进入ICW\bin下找到这几个文件


我们之前看到报错是 git-upload-pack.exe,那我们就试着运行一下它,双击运行后会发现报错了,报错信息如下:
可能已经挖到最深的坑:在Windows Server下配置Git Server脱坑之路_第2张图片
丢失libintl-8.dll

既然少了东西,那我们就给它找到这个东西,进入 Git\mingw32\bin这个目录找到 libintl-8.dll把它放到 ICW\bin下去,这里我建议像我这样操作:
新建一个文件夹,先把 libintl-8.dll复制到这文件夹中,然后再复制到 ICW\bin目录下,这么做的原因是因为你会发现它不止缺少这一个文件,所以这样会清楚地知道你都复制了什么文件过去,如果要撤销也方便查找。我复制的文件列表如下(建议在尝试的时候一步一步来,复制一个文件运行一下 git-upload-pack.exe测试一下看缺少什么然后再去找):
可能已经挖到最深的坑:在Windows Server下配置Git Server脱坑之路_第3张图片

到这里再运行 git-upload-pack.exe的时候就不会再报错了。然后我们再回去测试 git clone userName@hostName:testFolder命令,
这时候终于。。。可以了。。。
!!!好激动!!!

>>>>>>>>
最后再来说一个copssh的坑
卸载copssh后重装的时候会发现一打开copssh是未启动状态;一点右边的红色按钮启动程序就崩溃,然后还没有提示。这是程序的一个bug,因为装好copssh后它会自动添加一个管理员用户,卸载之后需要手动进入控制面板>用户去删除它自动添加的管理员用户然后再重装copssh,重装后它会自动启动。

恭喜各位,可以出坑了

如果各位对于文中内容有什么疑问欢迎提出交流~
Lucian的个人博客

你可能感兴趣的:(可能已经挖到最深的坑:在Windows Server下配置Git Server脱坑之路)