自建git服务端,作为github备份或私有仓库

使用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即可

admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: