服务端:Ubuntu 22.04
客户端:Win11_x64
前提条件:需要确保在Windows机器上能够ping通Ubuntu服务器, 并且服务端与客户端均已安装了Git软件
以Ubuntu服务器作为Git服务端的运行环境,并方便后期免密推送及管理代码的需求,需要先安装OpenSSH及创建git专属用户等操作。
1. 先检查是否已经安装OpenSSH软件
dpkg --list | grep ssh
如果出现如上图所示,说明已经安装了OpenSSH软件;如果没有上图红框中的两行说明需要安装 openssh-server openssh-client;
apt-get install -y openssh-server openssh-client
安装完成之后再次用上述命令(dpkg --list | grep ssh)进行检查是否已经安装成功,并可以使用以下命令查看ssh服务的运行状态及启动ssh服务
systemctl status ssh 查看ssh服务的运行状态
systemctl enable ssh 启动ssh服务
2. 新建专属用户git,为了方便连接服务端仓库时使用
adduser git
然后输入两次密码,一路回车就创建好了
(PS: useradd git 这个命令也可以创建,区别在于执行这条命令时不需要设置密码,后面需要使用chpasswd命令来修改密码,如 echo "git:123456" | chpasswd)
3. 进入git用户主目录,先创建一个远端仓库(我这里将远端仓库放在了git主目录下,位置可以根据自己情况)
cd /home/git/private_code_repository/
创建一个名为FristProject的空仓库
git init --bare FirstProject.git
4. 在git主目录下先创建一个.ssh目录以便后面使用
mkdir -p /home/git/.ssh/
5. 修改仓库存放目录的所有者及所属组均为git,方面后面git用户可以直接访问
chown git:git -R /home/git/private_code_repository/
1. 打开终端窗口,使用以下命令生成公私匙
ssh-keygen -t rsa
生成的公私钥一般存放在类似 C:\Users\DELL\.ssh 这样的目录下
在 C:\Users\DELL\.ssh 目录下右键打开终端,使用scp将 id_rsa.pub 拷贝到服务端/home/git/.ssh/目录下,第一次操作时需要输入git用户的密码
在服务端进入/home/git/.ssh/目录,执行命令 cat id_rsa.pub >> authorized_keys (PS:这步操作需要在服务端执行一下)
2. 如果客户端还没有需要推送的本地仓库(空目录时),则可以直接clone服务端新建的仓库,直接clone的仓库已经默认为仓库添加了origin别名
3. 此时就可以在仓库下存放代码脚本等各种文件,然后执行下面操作将其提交到本地仓库
4. 提交到本地仓库后,可以将其push的远端仓库(因为已经有了远端仓库的别名origin,所以可以直接push.PS:第一次push需要添加-u参数,后面就不需要了)
推送到远端仓库后,发现远端仓库FirstProject.git并没有什么明显的变化
5. 在服务器上的另一个目录下或者团队协作其他成员需要使用时模拟拉取操作,首次需要clone,后期pull
6. 测试修改一次readme.txt文件后,客户端直接git push, 其他成员直接git pull就可以了
2-6步模拟了客户端为空目录时的情况,下面给出待推送目录已有代码文件时的情况:
1. 先在服务端建立一个新的仓库SecondProject.git
2. 如下图所示,在本地机器上已有待推送的文件夹NewProject,但它不是一个受git管控的目录(没有.git目录)
3. 此时先将NewProject初始化为一个受git管控的目录(git init),然后再将所有代码文件提交的本地仓库(git add/git commit)
4. 此时虽然已经将NewProject提交到本地仓库,但还没有与任何远端仓库建立连接
5. 将本地仓库与远端仓库SecondProject.git建立连接
git remote add origin ssh://[email protected]:/home/git/private_code_repository/SecondProject.git
git remote -v
6. 如上图所示已经将本地仓库与远端仓库建立了连接,就可以使用git push 推送代码到远端仓库
git push -u origin master
7. 测试在客户端修改文件后git push,然后在服务器上模拟拉取操作 git pull
以上演示了客户端待推送目录为空和不为空时的push操作;并模拟了从服务端仓库的clone与pull操作。
至此,就搭建好了自己的Git服务器,方便工作与学习中管理代码。