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

作者: LucianLiu | 来源:发表于2016-08-12 17:49 被阅读3009次

    前言:本教程总结了我从开始在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.
    

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

    你在逗我?
    那个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,那我们就试着运行一下它,双击运行后会发现报错了,报错信息如下:
    丢失libintl-8.dll
    既然少了东西,那我们就给它找到这个东西,进入Git\mingw32\bin这个目录找到libintl-8.dll把它放到ICW\bin下去,这里我建议像我这样操作:
    新建一个文件夹,先把libintl-8.dll复制到这文件夹中,然后再复制到ICW\bin目录下,这么做的原因是因为你会发现它不止缺少这一个文件,所以这样会清楚地知道你都复制了什么文件过去,如果要撤销也方便查找。我复制的文件列表如下(建议在尝试的时候一步一步来,复制一个文件运行一下git-upload-pack.exe测试一下看缺少什么然后再去找):

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

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

    恭喜各位,可以出坑了

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

    相关文章

      网友评论

      • 糖兜兜兜:Git\mingw64\bin下的所有东西都放到 ICW\bin下面 貌似bashrc和bash profile这玩意就不用改了 可以直接用 如果我只拷贝了 libiconv-2.dll, git.exe, git-receive-pack.exe, git-upload-archive.exe, git-upload-pack.exe这四个的话 即使 貌似bashrc和bash profile这俩玩意修改过了也没用额 反反复复装了卸载 删了加上好多次 终于可以clone下来了 说多了都是泪 本来打算花一整天部署的 最后拖了三天 看到坑主掉这么深的坑里 我心里也好受了不少 哈哈哈世上本没有路 踩的坑多了 也便成了坑主
        c807e3cb8406:这坑我也走过来了 累

      本文标题:可能已经挖到最深的坑:在Windows Server下配置Git

      本文链接:https://www.haomeiwen.com/subject/aekesttx.html