利用win10的Linux子系统在PC上搭建git远程仓库


在windows上搭建git远程仓库一直比较麻烦,主要是由于windows的ssh服务支持比较难办。Microsoft Store现在提供了一个名为Ubuntu的免费App,运行后可以在windows10上建立一个没有图形界面的ubuntu子系统并自带ssh服务等很多应用。这个可以帮助我们在windows上搭建git远程仓库,并让局域网内的本地机器使用。

在win10上安装ubuntu子系统

在控制面板中开启linux子系统

在安装和使用ubuntu子系统前,需要先在win10上允许启用Linux子系统的功能。
进入Control Panel -> Programs -> Turn Windows features on or off,之后在弹窗中找到并勾选 Windows Subsystem for Linux,点击OK后会重启电脑。
利用win10的Linux子系统在PC上搭建git远程仓库

下载安装Ubuntu子系统

接下来,在开始菜单中找到微软应用商店,即Microsoft Store。在Microsoft Store中搜索“Ubuntu”,然后选择一个版本点击安装(版本差别不大)。
利用win10的Linux子系统在PC上搭建git远程仓库
安装完成后即会运行一个Ubuntu终端。
利用win10的Linux子系统在PC上搭建git远程仓库

在Ubuntu子系统上安装配置git远程仓库

建立一个git仓库

Ubuntu子系统默认安装在C盘,如果PC上有其他硬盘比如D、E盘会被挂载在"/mnt/“目录下,如E盘的路径即”/mnt/e/"。
我们在PC上找到喜欢的地方创建一个git仓库。比如在E盘上新建一个名为MyRemoteGitRepo 的文件夹,Ubuntu子系统中对应的路径即为"/mnt/e/MyRemoteGitRepo/"。在终端里,我们可以执行以下命令进入MyRemoteGitRepo并创建一个空git仓库

cd /mnt/e/MyRemoteGitRepo
git init --bare 
git config --global user.name "you name it"
git config --global user.email "[email protected]"

这样我们就建立了一个裸仓库、设置了用户名和联系邮箱。注意这个仓库没有工作区,纯粹用来共享信息。

配置ssh服务

在PC上配置ssh服务参数

git远程仓库建好了,但是想让其他仓库与之进行连接,我们需要打开ssh服务并作配置。
打开ssh服务端的配置文件/etc/ssh/sshd_config:

sudo vi /etc/ssh/sshd_config

端口 port 默认为22但是已被占用,取消注释并修改为2200;
取消行注释 ListenAddress
取消行注释 PubkeyAuthentication 并设置为 yes
取消行注释 AuthorizedKeysFile
取消行注释 PasswordAuthentication 并设置为 yes
利用win10的Linux子系统在PC上搭建git远程仓库
保存退出后,启动ssh服务端:

sudo service ssh start

检查ssh服务运行状态:

sudo service ssh status

看到 sshd is running 的信息,说明ssh服务端启动。
局域网下进行连接需要知道PC的Private IP:

ifconfig

利用win10的Linux子系统在PC上搭建git远程仓库
图中wifi0下的inet后面的 192.168.1.104 即为我PC的内网IP。

在本地机器生成ssh**,并添加到windows10机器的authorized_keys中

所谓本地机器是指开发时git本地仓库所在的机器。本地机器想要连接到在PC上创建的git远程仓库,需要通过**进行身份验证。我们要做的是在本地机器上生成ssh**对,并将公钥添加到 win10 ssh服务的授权**文件(/etc/ssh/authorized_keys)里。下面以本地机器为Ubuntu系统为例示范此过程(如果本地机器也是windows系统可以在powershell中运行相同命令)。
在本地机器上,打开终端,输入:

cd ~/.ssh
ssh-****** git_key

会得到一对公私**。将私钥 git_key 保留,将公钥 git_key.pub 用scp命令拷贝至PC用户git的home目录下:

sudo tcp -P 2200 [email protected]:~/

在 /home/git/ 下找到 git_key.pub 文件,将其中内容复制粘贴到 /etc/ssh/authorized_keys中 (若名为authorized_keys的文件不存在,就新建一个)。之后重启ssh服务:

sudo service ssh restart

建立git本地仓库并连接到win10上的远程仓库

在本地机器上进入想要建库的文件夹,比如 ~/workspace;用git clone命令来把远程仓库克隆到本地,用到的命令格式为:
sudo git clone ssh://<PC_PrivateIP>:<sshd_port><path_to_remote_repo>
本例中,具体为:

cd ~/workspace
sudo git clone ssh://192.168.1.104:2200/mnt/e/MyRemoteGitRepo

到此应该会在终端里看到git进行了克隆,并报告一个信息 “warning: You appear to have cloned an empty repository.”, 这是因为我们并未在远程仓库上创建任何东西的原因,但是PC端的git远程仓库已经搭建好并且成功克隆到了本地!