前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何搭建自己的git服务器_git 创建远程仓库

如何搭建自己的git服务器_git 创建远程仓库

作者头像
全栈程序员站长
发布于 2022-11-09 06:21:49
发布于 2022-11-09 06:21:49
2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

GitHub,Gitee 想来大家都用过,我们的代码就是托管在这些平台上的。因此,你可能好奇为什么我们不自己搭建一个 git 服务器呢?下面,就开始教大家如何一步步搭建自己的 git 服务器(试验成功的那一刻还是很让人激动的)。

我自己的虚拟机是 centOS7 的,首先肯定要安装 git 和 git-daemon,可以使用自带的 yum 进行安装。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y git
yum install -y git-daemon
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master ~]# git --version
git version 2.28.0

[root@master ~]# yum install -y git-daemon
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Running transaction
  Installing : perl-Git-1.8.3.1-23.el7_8.noarch                                                                   

  ...

Installed:
  git-daemon.x86_64 0:1.8.3.1-23.el7_8                                                                                 

Dependency Installed:
  git.x86_64 0:1.8.3.1-23.el7_8                          perl-Git.noarch 0:1.8.3.1-23.el7_8                          

Complete!

虚拟机服务端

创建 git 目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master ~]# mkdir git
[root@master ~]# cd git
[root@master git]# pwd
/root/git

创建 git 仓库文件夹

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master git]# mkdir test-repo.git
[root@master git]# cd test-repo.git/
[root@master test-repo.git]# 

初始化空目录仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master test-repo.git]# git --bare init
Initialized empty Git repository in /root/git/test-repo.git/
[root@master test-repo.git]# ls -l
total 16
drwxr-xr-x. 2 root root    6 Sep 15 22:56 branches
-rw-r--r--. 1 root root   66 Sep 15 22:56 config
-rw-r--r--. 1 root root   73 Sep 15 22:56 description
-rw-r--r--. 1 root root   23 Sep 15 22:56 HEAD
drwxr-xr-x. 2 root root 4096 Sep 15 22:56 hooks
drwxr-xr-x. 2 root root   21 Sep 15 22:56 info
drwxr-xr-x. 4 root root   30 Sep 15 22:56 objects
drwxr-xr-x. 4 root root   31 Sep 15 22:56 refs

修改仓库的 mod 权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master test-repo.git]# cd ..
[root@master git]# chmod 770 test-repo.git/ -R
[root@master git]# chmod 775 test-repo.git/ -R

设置默认新建的文件和文件夹同属于其父目录的用户组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master git]# chmod g+s test-repo.git -R
[root@master git]# set -m g:root:rwx test-repo.git
[root@master git]# 

开启 git daemon 服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master git]# git daemon --verbose --export-all --base-path=/root/git/test-repo.git/
[3680] Ready to rumble

本地机客户端

创建目录并初始化成仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Administrator@PC-20200713AJJH MINGW64 /d/MyProject
$ mkdir test-repo
Administrator@PC-20200713AJJH MINGW64 /d/MyProject
$ cd test-repo
Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo
$ git init
Initialized empty Git repository in D:/MyProject/test-repo/.git/

Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo (master)
$

查看 config 文件

文件在仓库的 .git 目录下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo (master)
$ cd .git/

Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo/.git (GIT_DIR!)
$ vim config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true

关联远程仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo/.git (GIT_DIR!)
$ git remote add origin ssh://192.168.128.139/root/git/test-repo.git

修改 config 文件

我用的 root 账号登录的,所以 url 也改成 root@192.168.128.139 的形式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = ssh://root@192.168.128.139/root/git/test-repo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

git commit 一些东西

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo/.git (GIT_DIR!)
$ cd ..

Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo (master)
$ touch test.txt

Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo (master)
$ vim test.txt
hello world

Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo (master)
$ git add test.txt
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory.

Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo (master)
$ git commit -m "first commit :)"
[master (root-commit) a1e4f83] first commit :)
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

关联分支并推送

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Administrator@PC-20200713AJJH MINGW64 ~/Desktop/test-repo (master)
$ git remote -v
origin  ssh://root@192.168.128.139/root/git/test-repo.git (fetch)
origin  ssh://root@192.168.128.139/root/git/test-repo.git (push)

Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo (master)
$ git push -u origin master
root@192.168.128.139's password:
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 217 bytes | 217.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://192.168.128.139/root/git/test-repo.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

虚拟机服务端

新建一个终端查看 push 记录

因为刚才那个终端还跑着 git-daemon 服务,所以先不要关掉(后来发现好像关掉了也不影响,不知道是为什么)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master git]# cd test-repo.git/
[root@master test-repo.git]# pwd
/root/git/test-repo.git
[root@master test-repo.git]# git log
commit a1e4f83292ac8d9128c94a402ce2ada752fb14aa (HEAD -> master)
Author: 2392863668 <2392863668@qq.com>
Date:   Tue Sep 15 23:16:34 2020 +0800

    first commit :)

可以看到,服务端已经成功接收到了。

当然,客户端可以多推送一些上来,服务端都是可以接收到的。

本地机客户端

再次推送

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo (master)
$ vim test.txt

Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo (master)
$ git add test.txt
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory.

Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo (master)
$ git commit -m "second commit"
[master ec56e9e] second commit
 1 file changed, 1 insertion(+)

Administrator@PC-20200713AJJH MINGW64 /d/MyProject/test-repo (master)
$ git push
root@192.168.128.139's password:
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 261 bytes | 261.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://192.168.128.139/root/git/test-repo.git
   a1e4f83..ec56e9e  master -> master

虚拟机服务端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master test-repo.git]# git log
commit ec56e9ee09edd5b4ab9ea5fe46927e91d4e09fd5 (HEAD -> master)
Author: 2392863668 <2392863668@qq.com>
Date:   Tue Sep 15 23:21:26 2020 +0800

    second commit

commit a1e4f83292ac8d9128c94a402ce2ada752fb14aa
Author: 2392863668 <2392863668@qq.com>
Date:   Tue Sep 15 23:16:34 2020 +0800

    first commit :)

从服务端克隆仓库

我们甚至还可以从服务端克隆仓库下来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Administrator@PC-20200713AJJH MINGW64 ~/Desktop
$ git clone ssh://root@192.168.128.139/root/git/test-repo.git
Cloning into 'test-repo'...
root@192.168.128.139's password:
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.

Administrator@PC-20200713AJJH MINGW64 ~/Desktop
$ cd test-repo/

Administrator@PC-20200713AJJH MINGW64 ~/Desktop/test-repo (master)
$ git log
commit ec56e9ee09edd5b4ab9ea5fe46927e91d4e09fd5 (HEAD -> master, origin/master, origin/HEAD)
Author: 2392863668 <2392863668@qq.com>
Date:   Tue Sep 15 23:21:26 2020 +0800

    second commit

commit a1e4f83292ac8d9128c94a402ce2ada752fb14aa
Author: 2392863668 <2392863668@qq.com>
Date:   Tue Sep 15 23:16:34 2020 +0800

    first commit :)

Administrator@PC-20200713AJJH MINGW64 ~/Desktop/test-repo (master)
$

SSH 免密登录

如果你不想每次远程操作都输入密码的话,就略微看一下这一节吧!免密登录已经不是什么稀奇事儿了,我们稍微过一下!

先用 ssh-keygen -t rsa 命令在本地机客户端生成密钥:

把 id_rsa.pub 上传到虚拟机,并将 id_rsa.pub 内容追加(这儿的 >> 表示追加的意思,不然很可能就把文件里边原有的东西给覆盖掉了)到 authorized_keys 里边去:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master ~]# pwd
/root
[root@master ~]# cat id_rsa.pub >> .ssh/authorized_keys

然后?然后就没了!这个时候你在本地机客户端再次克隆的时候,就不需要输入虚拟机服务端的密码了。(这个操作使用 ssh-copy-id 来弄也行的)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Administrator@PC-20200713AJJH MINGW64 ~/Desktop
$ git clone ssh://root@192.168.128.139/root/git/test-repo.git
Cloning into 'test-repo'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.

后记

细心的你可能会发现,服务端目录结构一直是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master test-repo.git]# ll
total 16
drwxrwsr-x.  2 root root    6 Sep 15 22:56 branches
-rwxrwsr-x.  1 root root   66 Sep 15 22:56 config
-rwxrwsr-x.  1 root root   73 Sep 15 22:56 description
-rwxrwsr-x.  1 root root   23 Sep 15 22:56 HEAD
drwxrwsr-x.  2 root root 4096 Sep 15 22:56 hooks
drwxrwsr-x.  2 root root   21 Sep 15 22:56 info
drwxrwsr-x. 10 root root   90 Sep 15 23:21 objects
drwxrwsr-x.  4 root root   31 Sep 15 22:56 refs

但是竟然没有找到你 push 上去的 text.txt 文件,这是因为我们初始化仓库的时候用的命令 ”git init –bare” 初始化一个裸仓库,至于裸仓库和一般仓库的区别,请参考 git 本地库和裸库的区别_blackcloud-CSDN博客_git 裸版本库

更多的东西,就靠大家自己去探索啦! :)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/189544.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月25日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Git - 入门到熟悉_远程仓库管理
好了,提交到 https://gitee.com/yangshangwei/gitProject.git 分支了,我们去gitee上查看一把
小小工匠
2022/09/22
2500
Git - 入门到熟悉_远程仓库管理
一文学会日常操作Git(环境配置、初始化、本地仓库和远程仓库操作和分支操作)
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。
共饮一杯无
2022/11/28
5240
一文学会日常操作Git(环境配置、初始化、本地仓库和远程仓库操作和分支操作)
Git多仓库作子目录的双向同步:一次Git Subtree的实践
今年1月中旬的时候BZ在GitHub上收到Typecho社区组织typecho-fans的成员邀请,原来是想把所有TP的开源插件都整合到GitHub上进行维护。之前BLOG在使用Typecho的时候写了3个插件:新浪云存储SCS插件、移植自WordPress的音乐播放器插件和新浪微博同步插件,那如果放到typecho-fans上进行维护的话对使用者和开发者来说都是挺方便的。但是当时不知道怎么把之前这3个已经放在GitHub上进行维护的插件仓库作为子目录/仓库同步到typecho-fans的插件仓库中,所以一直都没有行动。
typecodes
2024/03/29
4960
Git多仓库作子目录的双向同步:一次Git Subtree的实践
GIT
1 编写忽略文件 C:\Users\shiye\Java.gitignore 详细可以参考:https://github.com/github/gitignore
用户5927264
2019/10/28
4610
GIT
git和码云的使用
因为我是win10的系统,所以展示window的下载页面,其他mac系统之类的,可以选择其他系统来下载即可。
Devops海洋的渔夫
2019/05/31
1.6K0
GitHub-创建仓库与本地同步
1. 在Linux上安装Git 1 [root@mini05 ~]# yum install -y git 2 ……………… 2. 本地创建ssh-key信息 1 [root@mini05 ~]# ssh-keygen -t rsa 2 Generating public/private rsa key pair. 3 Enter file in which to save the key (/root/.ssh/id_rsa): 4 Created directory '/root/.ssh'.
踏歌行
2020/10/15
6770
GitHub-创建仓库与本地同步
git一日速成
通过镜像网站下载git-for-windows Mirror (taobao.org),本教程使用版本为2.17.0.安装过程使用默认选项,在选择path选项时不改变环境变量,只通过git Bash使用即可(如下图)。
半旧518
2022/10/26
5990
git一日速成
Git-将已有的项目转换为GIT项目托管到 GITHUB 仓库
本地项目目录: D:\workspace\workspace-sts\SpringMaster
小小工匠
2021/08/16
5870
Jyputer 项目工程设置Github同步,本地代码上传Github实例演示
首先在 Github 上创建一个仓库,它将用于存储、同步本地 Jyputer 里的项目。
小蓝枣
2021/12/01
3300
Jyputer 项目工程设置Github同步,本地代码上传Github实例演示
Git 技术篇 - GitHub克隆私有仓库方法,新主机绑定并同步github私有库实例演示
首先看下我克隆我自己私有库的成功效果图。 公有仓库克隆方法。 $ git clone git@github.com:2418546511/Py_jyputer.git 私有仓库克隆方法。 $ git clone https://用户名:密码@github.com/2418546511/Py_jyputer.git 同步私有库演示: Administrator@DESKTOP-HVAQES8 MINGW64 /c/Py_jupyter (master) $ git add pytools Adminis
小蓝枣
2021/12/01
4K0
Git 技术篇 - GitHub克隆私有仓库方法,新主机绑定并同步github私有库实例演示
git 多人协作开发冲突解决——分支合并冲突
接上篇文章,更加严谨的来说,再修改时要创建一个新的分支进行修改,修改完成再拉取远端仓库最新版本,再进行合并,有冲突解决冲突,再push,最后在删除开发分支这样一个流程。所以现在就来简单记录分享一下如何解决合并分支冲突。
ZGGSONG
2022/09/09
2.5K0
Unity团队开发-Git命令行Unity团队开发-Git命令行
Administrator@XTKJ-20210419KS MINGW64 ~ $ cd /d/LocalGit Administrator@XTKJ-20210419KS MINGW64 /d/LocalGit (master) $ ls -a ./ ../ .git/ 1.txt Administrator@XTKJ-20210419KS MINGW64 /d/LocalGit (master) $ touch .ignore Administrator@XTKJ-20210419KS MI
孙寅
2021/12/07
7900
如何将当前Git最新版本回退到指定版本号,并为指定版本创建一个新分支同步到远程仓库
如何将当前Git最新版本回退到指定版本号,并为指定版本创建一个新分支同步到远程仓库          我们在使用Git分布式管理工具的时候,经常会涉及到如何将本地最新代码切换到之前版本历史里指定版本(这里可能是代码出现bug,需求变更,版本分支,产品线分支等..),这是我在实际开发中遇到过的问题,所以在此记录一下整个操作的过程,方便下次能直接使用,而不是去百度里翻来翻去,还有就是百度到的东西不一定对,一定要结合自己的问题进行取舍,不然后悔的总是自己,记得有一次我直接把整个本地版本库都弄乱了,害我又重新写了一
秋日芒草
2018/05/15
1.5K0
git入门(msysgit图文安装)
(1)常用的GitHub客户端msysgit,也就是git-for-windows。
程裕强
2022/05/06
1.2K0
git入门(msysgit图文安装)
Git 团队协作机制
岳:冲儿,我先把代码推送到远程库,你把代码clone到本地,自己研究一下,有发现推送到远程库,然后我再把远程库的代码拉下来。
用户9615083
2022/12/25
3430
Git 团队协作机制
一个小时学会Git
张果
2018/01/04
3.5K0
一个小时学会Git
学习git这一篇就够了!!!
git命令操作 本地库操作 初始化本地仓库 初始化命令 git init $ work % cd workspace $ workspace % mkdir WebService //创建文件夹 $ workspace % git init //初始化 Initialized empty Git repository in /Users/jack/work/workspace/.git/ $ workspace % 初始化后的效果 会在初始化后的目录中生成一个.git隐藏文件夹 $ workspace %
烂猪皮
2020/10/10
8120
搭建git服务器
我们都知道GitHub只有公开库是免费的,而私有仓库是需要花钱买的。所以我们可以想办法自己搭建一个私有的,仅自己公司使用的。Gitlab是个不错的选择。在介绍它之前,先讲述一下如何搭建命令行的git服务器。
端碗吹水
2020/09/23
3.1K0
搭建git服务器
8 Git和Github深入
本文我们将继续深入学习 Git 和 Github,了解 Git 中 main 分支和 master 分支的区别,并阐明 Git 和 Github 的区别。
Lemon黄
2023/12/02
4360
8 Git和Github深入
9 Git和Github高级
本文我将将学习一些高级的 Git 技术,包括分支、合并、恢复、保存更改、选择性提交以及冲突解决等等。这些技术对于软件开发项目中的有效协作和版本控制至关重要。那么,让我们开始吧。
Lemon黄
2023/12/03
2340
9 Git和Github高级
相关推荐
Git - 入门到熟悉_远程仓库管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验