文章目录

  • 服务器操作
    • 1. 安装 git
    • 2. 添加 git 账户
    • 3. 创建证书 登录
    • 4. 在Git服务器上打开 RSA认证
    • 5. 初始化Git仓库 (在服务器 xx.xx.xx.xx 上创建裸仓库)
    • 6. 创建一个空仓库之后,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git:
    • 7. 当远程仓库发现有用户执行了push操作,就会执行一个脚本post-receive(钩子)。
    • 8. 禁止 Shell 登录
  • 客户端操作
    • 1. 创建公钥验证
    • 2. 克隆
  • 遇到的问题
    • 1. 客户端执行的时候到Total ........卡住不执行了(提交文件过大),查了一些之后,,,两种解决方案
    • 2. 22 端口问题

业务需要,需要自己在服务器上搭建git仓库, 硬着头皮,就是干 , 内容有点长,但个人感觉还是有借鉴之处的,欢迎支持,分享
服务器ip: xx.xx.xx.xx
系统: Centos7
项目目录: /var/www/html
仓库版本管理目录: /home/<用户名>/gitrepo

服务器操作

1. 安装 git

安装git
$ sudo yum install git -y
查看git 版本(检查是否成功)
# git --version
git version 2.7.4

2. 添加 git 账户

有的操作系统上会在你安装git时会同时帮你创建一个git用户,但Ubuntu的需要我们手动来创建。这也非常简单的,那我们就来手动创建一个git用户:

$ sudo adduser git

3. 创建证书 登录

收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
如果没有该文件创建它:

# cd /home/git/
# mkdir .ssh
# chmod 755 .ssh
# touch .ssh/authorized_keys
# chmod 644 .ssh/authorized_keys

说明一下: 客户端创建id_rsa.pub , 我会在 客户端部分说明过程.

4. 在Git服务器上打开 RSA认证

# vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
# AuthorizedKeysFile <你的authorized_keys所在路径>
AuthorizedKeysFile /home/git/.ssh/authorized_keys 

5. 初始化Git仓库 (在服务器 xx.xx.xx.xx 上创建裸仓库)

裸仓库是不储存文件的, 裸(bare)仓库里只存储历史和元信息(详细格式),不会维护工作目录。
什么是裸仓库呢?
就是没有工作目录的仓库, 不能执行有关git的任何命令,只记录历史提交信息,
只能通过clone它的仓库对它进行push操作对它进行更新。
裸仓库一般用来做多人代码交换的中转站,它只有这么些目录:
branches config description HEAD hooks info objects refs

# cd /home/<用户名>/gitrepo
方法一:
创建文件夹 web.git
# mkdir web.git
# cd web.git
# git init --bare
Initialized empty Git repository in /home/<用户名>/gitrepo/web.git/
方法二:
直接一条命令完成 方法一的操作
# git --bare init web.git
Initialized empty Git repository in /home/<用户名>/gitrepo/web.git/

6. 创建一个空仓库之后,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git:

 #  cd /home/<用户名>/gitrepo# chown -R git:git web.git

其实,这个时候我们可以在自己的客户机上 克隆了,
git clone git@<服务器IP>:/home/<用户名>/gitrepo/web.git web
但是,存在3种情况,多与权限 密码 相关

  1. git密码登录
  2. ssh, 由于在第三步已经做了ssh , 所以我们克隆的时候是免密的
  3. 服务器端的git仓库目录权限不足, 可以使用
    chown git:git -R /home/<用户名>/gitrepo

严格来说,其实Git并没有所谓的服务器端和客户端,这也是Git和SVN最大的一点不同。不管你在哪里创建了一个git仓库,原理上它都可以充当一个git服务器,这取决于你的配置。深入了解就涉及到很多git的原理知识了,感趣兴的同学可以自行去学习,当然,我也非常推荐你这样去做。

7. 当远程仓库发现有用户执行了push操作,就会执行一个脚本post-receive(钩子)。

# cd /home/<用户名>/gitrepo/web.git/hooks
# vim post-receive
#!/bin/bash
git --work-tree=<实际需要同步的站点目录> checkout -f例如: git --work-tree=/var/www/html/web checkout -f 
修改post-receive为可执行文件(其实这就是一个脚本文件)
# chmod +x post-receive

注意:同时你还需要修改你的web站点目录的权限,修改所属用户与用户组为git,否则钩子的权限可能会不足而导致执行失败。(你也可以通过添加git用户到相应的用户组来解决问题)

# chown git:git -R /var/www/html/web # 修改所属用户

8. 禁止 Shell 登录

Git 创建的用户可以通过 ssh 连接到服务器,对服务器安全造成一定影响。所以禁止 Git 用户 shell 登录,只赋予其操作 Git 的相关权限就可以了。

# vim /etc/passwd
修改   git:x:1001:1001::/home/git:/bin/bash 为git:x:1001:1001::/home/git:<你的git-shell路径>我的路径是这样的:git:x:1001:1001::/home/git:/usr/bin/git-shell 可以通过 find / |grep git-shell 查找git-shell路径

到这儿,服务器端相关的配置也就基本上ok了

客户端操作

1. 创建公钥验证

配置之后,从本地更新代码到服务器时,将不会再提示输入密码。
下面是Linux , Window 两种操作系统的操作:

Linux OS :
查看根目录下 有没有 .ssh/
如果列出了authorized_keys、id_rsa、id_rsa.pub 则证明你拥有公钥
如果没有, 那么可以
# ssh-keygen
三次回车 OK 搞定
公钥默认在 id_rsa.pub 中Window OS
打开 git bash
执行 ssh-keygen.exe
id_rsa.pub 应该在 C:\Users\<用户名>\.ssh 下

最后把 id_rsa.pub 中的内容 复制给 git服务端人员, 他将把你的公钥贴到
/home/git/.ssh/authorized_keys

2. 克隆

git clone git@<服务器IP>:/home/<用户名>/gitrepo/web.git web

这样, 一个Git服务器就搭建完成了, 感兴趣的小伙伴可以分享/支持/评论

遇到的问题

1. 客户端执行的时候到Total …卡住不执行了(提交文件过大),查了一些之后,两种解决方案

1-1)
全局: # git config --global sendpack.sideband false
本地: # git config --local sendpack.sideband false
1-2)
# git config http.postBuffer 524288000
然而对我而言,都没有用到

2. 22 端口问题

一般我们会修改服务器上默认端口,所以很容易出现下面的错误

$ git clone git@<服务器IP>:/home/<用户名>/gitrepo/web.gitssh: connect to host <服务器IP> port 22: Connection refused
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.
解决方案:
$ git clone ssh://git@<服务器IP>:<端口号>/home/<用户名>/gitrepo/web.git成功搞定,端口问题整了3个多小时, 查了很多, 唉,,强大的谷歌/百度所以说搜索技巧很重要~感谢这位同仁: https://www.bdelay.com/article/327

感谢阅读!

参考链接:
http://www.runoob.com/git/git-server.html
https://www.jianshu.com/p/a9c79489e3d3

【Git】搭建Git 服务器相关推荐

  1. Git -- 搭建git服务器

    在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想 ...

  2. Git搭建私有服务器

    环境:Linux7.0最小版   git2.22.0 一.git服务器介绍 远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改.GitHub就是一个免费托管开源代码的远程仓库. ...

  3. git搭建局域网服务器

    安装git: sudo apt-get update sudo apt-get install git-core openssh-server 增加 developers 组以及创建保存项目的仓库: ...

  4. centos7 下搭建git服务器

    总的来说,搭建git和svn形式差不多 1.首先要在服务器安装git环境,创建用户密码和仓库等 2.然后个人主机(基本是window)安装git客户端 3.将个人主机客户端的秘钥写到git服务器的一个 ...

  5. 搭建Git服务器教程转载

    1. 在Windows下使用ssh+msysgit客户端搭建Git服务器 http://www.codeproject.com/Articles/296398/Step-by-Step-Setup-G ...

  6. Linux 环境 搭建Git 服务器,并且修改SSH端口使用

    1.环境配置说明 服务器 CentOS 7 + git(git version 1.8.3.1) 客户端 Windows10 + SourceTree 2.安装 Git 服务器端安装: sudo yu ...

  7. git进入项目目录 windows_Windows下搭建Git服务器

    Windows平台下搭建Git服务器的图文详解及教程 Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不 ...

  8. Gogs-Windows Server下搭建Git服务器

    全面的环境要求请看官网:https://gogs.io/docs/installation 我这里只列举我的环境:windows server 2012_x64.Git-2.19.1-64.mysql ...

  9. 自建git服务器连接Pycharm系列二:在centos7上搭建git服务器

    在自己的Linux虚拟机上,搭建git服务器,用来保存代码. centos7本身自带git,需要先卸载,安装成较新的版本. 1.卸载系统自带版本 系统已经自带 [root@dscrapy01 ~]# ...

  10. 搭建git for windows服务器(100%可以成功)【转】

    转自:http://blog.csdn.net/code_style/article/details/38764203 既然Git在linux下面非常好用,为什么还要搭建git windows的服务器 ...

最新文章

  1. cs go linux 参数,CSGO 命令大全 给新手的福利 使用设置参数
  2. C/Cpp / 参数传递时如何防止数组退化为指针
  3. node --- 创建一个Socket客户端连接到服务器
  4. 你真的了解css像素嘛?
  5. Spring RestTemplate: 比httpClient更优雅的Restful URL访问, java HttpPost with header
  6. 解决批处理命令执行完毕后自动关闭cmd窗口
  7. jQuery学习教程 基础篇 归档
  8. 《图解数据结构》.pdf
  9. java上传图片至阿里云oss服务器
  10. 电脑桌面底部显示计算机图标怎么隐藏,电脑底部的任务栏如何隐藏
  11. 【Crystal Reports 水晶报表】奇偶行显示不同的颜色 另附CrystalReports常用属性
  12. 专题:固体力学中应力与应变分析详解(7.应变分析 7.5应变张量 7.6主应变与主方向 7.7应变莫尔圆)...
  13. Python3群聊聊天室
  14. 千万数据去重_基于 Flink 的百亿数据去重实践
  15. 《致盛夏的七封情书》------------ 第二篇《初雨》
  16. javascript 的七种继承方式(三)组合继承
  17. GitHub Pages 绑定个人域名
  18. 京东健康和药明康德入股卫宁软件,分别持有7.7%股权
  19. 网络--keytool自签名SSL证书(免费)以及私钥签名、公钥验签
  20. PELCO-D控制协议 java socket 传输16进制的编码

热门文章

  1. ML之HMM:HMM算法相关论文、关键步骤、测试代码配图集合
  2. Lightgbm with Hyperopt
  3. 深入浅出统计学 第二三章 量度
  4. Hexo瞎折腾系列(8) - 添加评论系统
  5. centos 7 Chrony 集群同步时间
  6. 洛谷——P2094 运输
  7. 统一的定义导航栏的背景颜色(NavigationController)
  8. html5media.js 让浏览器兼容VideoAudio 标签
  9. mysql event scheduler机制 与 动态表名创建
  10. vim常用命令总结 (转)