使用GitHub 作为git仓库远程origin时,git 操作有时会很慢。本文记录使用服务器搭建git服务端作为origin使用的详细过程,可以使用此git服务端作为github的备份,或者是作为私有仓库的服务端。
一、前提基础及示例
1.本机(自己的电脑)及服务器,均安装好git。
本文环境:服务器Ubuntu 20.04.1 + 本地macOS
2.服务器单独创建一个用户组和用户,用来运行git服务。为方便记忆和使用这里用户名称定为git
groupadd git
useradd git -g git
3.创建证书登录
收集所有需要登录服务器的本地用户公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
本地电脑上创建一个 ssh 密钥,用于登陆服务器
a.自己电脑创建一个 ssh 密钥
ssh-keygen -t rsa
(运行命令后,提示输入保存路径、密码、再次输入密码,到你保存的路径中找到文件 id_rsa.pub ,并将其文件中的内容放入服务器/home/git/.ssh/authorized_keys 文件中)b.服务器创建authorized_keys文件并设置权限
cd /home/git/
mkdir .ssh
755 .ssh
touch .ssh/authorized_keys
chmod 644 .ssh/authorized_keys
c.将id_rsa.pub放入服务器authorized_keys文件中 把我们的公钥(id_rsa.pub)导入到/home/git/.ssh/authorized_keys文件里,一行一个(一行放一个电脑的公钥)。
服务器禁用shell登录
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成
打开服务器
/etc/passwd
文件,找到类似下面的一行:
git:x:1004:1004::/home/git:/bin/bash
改为:
git:x:1004:1004::/home/git:/usr/bin/git-shell
(实际就是更改使用的shell)
4.在服务器中创建一个裸仓库
假定我们规划服务器的/www/storage/git
目录作为统一放置仓库的目录,且现在要创建创建一个名为mynotes
的仓库,则进行如下操作
服务端创建统一git存放目录并进入
mkdir -p /www/storage/git;cd /www/storage/git
创建mynotes
裸仓库
git init --bare mynotes.git
5.本地克隆服务端的mynotes
仓库,并进行操作
a.本地使用ssh克隆仓库
命令为git clone ssh://ssh账号名@域名或者服务器ip:ssh端口号/www/storage/git/mynotes.git
如:git clone ssh://git@192.168.5.1:9097/www/storage/git/mynotes.git
本地进入仓库目录并提交一次更改
cd mynotes;\ echo '这是第一次笔记记录' > note.txt;\ git add . ;\ git commit -m '第一次提交';
将本地更改push到服务器
git push
二、将已存在的github项目克隆到本地,并备份到自己搭建的服务器上,且每次本地更改提交后同时push到github和自己搭建的服务器上
本地克隆github的项目并进入目录
git clone https://github.com/eyunzhu/ex.git ; cd ex
进入服务器git存储目录并创建空项目
cd /www/storage/git ; git init --bare ex.git
本地设置添加自建git服务器为本地仓库的远程仓库
git remote set-url origin --add ssh://git@192.168.5.1:9097/www/storage/git/ex.git
(请自行更换服务器ip,ssh端口号)
git remote -v
可查看远程仓库地址
将本地仓库push到自建服务器上
git push
至此,本地仓库已经和自建git服务器仓库和远程仓库建立了连接
附
对git log 进行美化显示:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
配置好后执行git lg 或者git lg -p即可
目前评论:0