如何建立一个基于windows server操作系统的git服务器

如何建立一个基于windows server操作系统的git服务器

1 服务器端安装git和copssh

因为要进行跨平台交互,此处需要ssh环境,copssh内置了ssh服务,如果你有一个服务器(本人系统用的windows server2016),有无域名均可。

1.1这里要注意的是,防火墙不要拦截端口22,因为端口22是用来进行ssh服务的的,如何开放端口22可以查阅资料,一般云服务器默认是开启的,否则会发生错误。

git的安装和copssh的安装和下载,不需要做过多赘述。(可以下载免费版的copssh)

2.客户端对于环境的安装和部署

客户端需要安装git。

2.1.在Windows下查看[c盘->用户->自己的用户名->.ssh]下是否有"id_rsa、id_rsa.pub"文件,如果没有需要手动生成,执行2.2。有的话直接跳过2.2。

2.2打开Git Bash,在控制台中输入以下命令:

//生成RSA公共密钥实现无密码连接SSH服务器
$ ssh-keygen -t rsa //密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。这里使用的是rsa。同时在密钥中有一个注释字段,用-C来指定所指定的注释,可以方便用户标识这个密钥,指出密钥的用途或其他有用的信息。所以在这里输入自己的邮箱或者其他都行,当然,如果不想要这些可以直接输入.
//$ ssh-keygen
此处会产生一个你当前客户端的.ssh文件,该文件夹位于你的c盘下当前登录用户名文件夹下里.ssh文件夹产生文件,都是密钥文件,只是格式不同

输入完毕后按回车,程序会要求输入一个密码,输入完密码后按回车会要求再确认一次密码,如果不想要密码可以在要求输入密码的时候按两次回次,表示密码为空,并且确认密码为空,此时**[c盘>用户>自己的用户名>.ssh]**目录下已经生成好了。

3.服务器配置及测试

在开始前你可以为你的服务器计算机系统新建一个用户账户

3.1在开始菜单->Copssh中点击COPSSH Control Panel,打开Copssh配置工具

版本可能不尽相同,但是用法相似。如图(打开copssh后)

在这里插入图片描述

绿色代表正在运行,红色代表没有运行。

3.2点击菜单栏Users进入用户管理界面,点击Add添加服务器用户

在这里插入图片描述

3.3点击Forward,然后选择本地用户,建议选择管理员(记住你选的用户名)

在这里插入图片描述

3.4Options可根据需要配置

  • Home directory:用户使用该用户连接后跳转的的默认位置(可根据需要设置)
  • Allow passward authentication:允许使用密码连接(密码为改服务器用户的密码)
  • Allow PKA authentication:允许使用公共密钥连接(由ssh-keygen生成)
  • Allow TCP forwarding:允许使用TCP协议连接

3.5点击Apply之后可能会卡顿一段时间,请耐心等待。当然有的看起来毫无反应,其实已经应用上了

3.6添加服务器用户成功后,选择刚添加的用户,然后点击Keys添加公共密钥

在这里插入图片描述

3.7 点击Import后,将之前在客户端生成的RSA公共密钥复制引起放入服务器,点击Apply导入密钥(有的版本是可以直接导入id_rsa文件或者id_rsa.pub文件),由于之前在客户端生成时没有生成密码,直接在空密码后勾选勾选也是Yes,I am sure!即可,然后先选择directory,也就是路径再输入文件名(之前客户端生成的id_rsa.pub或者id_rsa文件的名字),最后forward

在这里插入图片描述

3.8最后Apply

3.9测试

客户端的git bash下

// "Administrator"是添加的服务器用户名
// "47.98.236.76"是服务器的外网连接,这边我是域名解析过后尚未备案完成,所以测试所以直接填写了服务器的IP地址
user@user-PC ~
$ ssh Administrator@47.98.236.76
// 第一次连接会出现该提示,直接填写“yes”回车就可以了
The authenticity of host '192.168.0.100 (192.168.0.100)' can't be established.
ECDSA key fingerprint is SHA256:ZgcUCSdtwjSwoL9eCJIScL7r4+I3p8C4YDs858FS8yQ.
Are you sure you want to continue connecting (yes/no)? yes
//可能让你输入你系统管理员的用户密码
Administrator@admin-PC ~
// 如果上面显示的是“[服务器的用户]@[服务器的主机名]”
// 说明你已经成功连接上了SSH服务器
// 并且当前位置为你添加服务器所配置的`Home directory`

到此你已经成功的配置好了SSH服务器,但是想要在这个服务器上搭建git远程仓库,肯定需要使用git命令,但是你会发现现在还不能使用git命令,所以我们还需要把git配置进服务器的环境中去

// 退出SSH服务器
administrator@admin-PC ~
$ exit

3.10回到服务器

将下面的代码加入添加的服务器用户根目录\.bashrc文件内容底部(大致在你安装的copssh安装目录下有名为Home的文件夹,在用户目录下找到.bashrc),不要换行。

# “/cygdrive/”后面的地址可能不同,根据自己安装git时安装的位置配置
# 不同git版本的bin和libexec目录位置可能不同
# 我的64位版本在“git安装目录\mingw64\”目录下
gitpath='/cygdrive/d/Program Files/Git/mingw64/bin'
gitcorepath='cygdrive/d/Program Files/Git/mingw64/libexec/git-core'
PATH=${gitpath}:${gitcorepath}:${PATH}

将下面的代码加入Copssh安装根目录\etc\.profile文件内容底部

# “/cygdrive/”后面的地址可能不同,根据自己安装git时安装的位置配置
# 不同git版本的bin和libexec目录位置可能不同
# 我的64位版本在“git安装目录\mingw64\”目录下
gitpath='/d/Program Files/Git/mingw64/bin'
gitcorepath='cygdrive/d/Program Files/Git/mingw64/libexec/git-core'
export PATH="/bin:$syspath:$gitpath:$gitcorepath:$winpath"

到此以你已经成功将git命令配置到可SSH服务器环境中了,解析我们来测试下:

3.11SSH服务器git命令测试,在客户端打开Git Bash连接SSH服务器,使用git创建一个空的远程仓库

user@user-PC ~
$ ssh administrator@47.98.236.76  // 连接SSH服务器
//上述命令为 ssh 用户名@域名或者ip地址
//如果有密码则是你管理员密码
Administrator@admin-PC ~
$ mkdir test.git                 // 创建仓库文件夹
$ cd test.git
$ git init --bare                // 将当前文件夹作为git远程仓库,
                                 //--bare代表只储存仓库历史记录,不储存仓库实践文件,如果没有用--bare初始化改远程仓库,push时会报错
                                 //(这样有利于多人上传合并版本)
                                 //如果使用了git init初始化,则远程仓库的目录下,也包含work tree,当本地仓库向远程仓库push时, 如果远程仓库正在push的分支上(如果当时不在push的分支,就没有问题), 那么push后的结果不会反应在work tree上,  也即在远程仓库的目录下对应的文件还是之前的内容。解决办法在下图下边。
$ exit

在这里插入图片描述

解决办法:

这是由于git默认拒绝了push操作,需要进行设置,修改.git/config文件后面添加如下代码:

[receive]

denyCurrentBranch = ignore

研究了很久不得其解,然后找到一条命令凑合着能用了:

也可以用ssh登录到远程的那个文件夹,使用

git config --bool core.bare true

就搞定了。

3.12成功创建一个空的git远程仓库后,我们有两种方法将本地上传到远程参照中

  • 方法一:直接从服务器上clone下来,这种方法适合本地没有该仓库的情况下,打开“Git Bash”

    user@user-PC ~
    $ git clone Administrator@47.98.236.76:test.git // 从远程git仓库中clone仓库
                                                     // 冒号直接根默认目录下的仓库路径
    $ echo "this is test">README.md
    $ git add .
    $ git commit -m "add README.md"
    $ git push                                       // push到远程仓库中合并版本
    
  • 方法二:本地创建个同名仓库,然后上传到git远程仓库合并版本,这种方法适合之前创建好了这个仓库,并且里面已经提交了几个版本了

    user@user-PC ~
    $ cd test
    $ git init
    $ echo "this is test">README.md
    $ git add .
    $ git commit -m "add README.md"
    $ git remote add origin Administrator@47.98.236.76:test.git //把administrator@47.98.236.76:test.git直接命名为了origin,以后可以使用origin master 代替Administrator@47.98.236.76:test.git
    $ git push -u origin master                     // 第一提交需要这种格式
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值