因为要进行跨平台交互,此处需要ssh环境,copssh内置了ssh服务,如果你有一个服务器(本人系统用的windows server2016),有无域名均可。
1.1这里要注意的是,防火墙不要拦截端口22,因为端口22是用来进行ssh服务的的,如何开放端口22可以查阅资料,一般云服务器默认是开启的,否则会发生错误。
git的安装和copssh的安装和下载,不需要做过多赘述。(可以下载免费版的copssh)
客户端需要安装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.1在开始菜单
->Copssh
中点击COPSSH Control Panel
,打开Copssh
配置工具
版本可能不尽相同,但是用法相似。如图(打开copssh后)
绿色代表正在运行,红色代表没有运行。
3.2点击菜单栏Users
进入用户管理界面,点击Add
添加服务器用户
3.3点击Forward
,然后选择本地用户,建议选择管理员(记住你选的用户名)
3.4Options可根据需要配置
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 [email protected]
// 第一次连接会出现该提示,直接填写“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 [email protected] // 连接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 [email protected]: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 [email protected]:test.git //把[email protected]:test.git直接命名为了origin,以后可以使用origin master 代替[email protected]:test.git
$ git push -u origin master // 第一提交需要这种格式