可能已经挖到最深的坑:在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.

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

你在逗我?

那个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的个人博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容

  • 本片内容转自CSDN http://blog.csdn.net/ithomer/article/details/7...
    五娃儿阅读 4,897评论 2 88
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,617评论 9 163
  • 还有一个故事。是村西的故事。 村西和村东一样,也有一个大坑的。大坑西边长着一棵老槐树,很有些年份的老槐树,树身都空...
    醉茶子阅读 887评论 0 3
  • 魔都,入夜深处的灯火阑珊,人头颤动的熙熙攘攘,灯红酒绿的宿醉迷离,弄堂斑驳的市井白相,当然,最终的人流都向着一个归...
    辛不离阅读 245评论 0 0
  • 老树老树阅读 411评论 1 1