git服务器(git服务器搭建linux)

git服务器(git服务器搭建linux)p id main toc strong 目录 strong p 步骤一 安装 Git 步骤二 服务器端创建 git 用户 管理 Git 服务 服务器端的 Git 配置公钥 生成 rsa 证书文件 步骤三 服务器端创建 Git 仓库 步骤四 客户端 clone 服务器端 git 仓库 1

大家好,我是讯享网,很高兴认识大家。



 <p id="main-toc"><strong>目录</strong></p> 

讯享网

步骤一.安装Git:

步骤二.服务器端创建git用户(管理Git服务)

服务器端的Git配置公钥

生成rsa证书文件

步骤三.服务器端创建Git仓库

步骤四.客户端clone服务器端git仓库

1、在客户端创建本地仓库

2、客户端创建Rsa公钥和Rsa私钥

步骤五.服务器Git打开RSA认证

1、修改sshd_config文件配置

2、重启sshd服务 

3、在客户端Git Bash 下导入文件

4、设置权限(根据实际情况决定)

 步骤六.客户端再次clone(测试是否需要输入密码)

安装Gitosis之管理公钥

 安装Gitosis依赖的工具

进入到Gitosis目录执行:

出现下面的信息表示安装成功

禁止服务器某个用户通过ssh登录服务器

git init 和 git init --bare的区别

git init --bare 的特点

git init 的特点

git init容易产生冲突的地方


讯享网
  1. 如果不需要区分用户来管理git,则可以跳过此步骤(默认使用root用户来管理git)
 
  • 服务器端的Git配置公钥

在Windows上配置管理者,git服务器需要一些管理者,通过上传开发者机器的公钥到服务器,添加成为git服务器的管理者,打开git命令行

  • 生成rsa证书文件

讯享网

执行完 :ssh-keygen -t rsa 结果如下图所示


讯享网

  1. 创建Git仓库有两种方式,第一种:git init  第二种:git init --bare。

git init 和 git init --bare的区别文章最后有介绍,我这里用的是:git init --bare

 

2、如果上面创建了git用户来管理git服务,则这里需要把 Git 仓库的 owner(拥有者) 修改为 git用户。执行命令:

讯享网

  • 1、在客户端创建本地仓库

TortoiseGit的方式克隆

例如:我的本地仓库设置在:D:PhpStudyV8phpstudy_pro 目录下 

Git Bash的方式克隆

  1. 在D:PhpStudyV8phpstudy_pro目录下打开 Git Bash

Git Bash 的操作如下:

 

此时 C:Users用户名.ssh 下会多出一个文件 known_hosts文件,以后在这台电脑上再次连接目标 Git 服务器时不会再提示上面的语句。

【说明】

  1. 如果你的服务器没有配置SSH连接,那么按照正常情况会让你输入root用户的密码,输入正确后就能进行项目克隆了。
  2. 如果不采用 SSH 公钥来进行验证,则每次都要输入密码,很麻烦,下面就来配置SSH公钥验证的方式来clone项目 
  • 2、客户端创建Rsa公钥和Rsa私钥

讯享网

执行过程如下图所示

此时 C:Users用户名.ssh 下会多出两个 id_rsa(私钥)和 id_rsa.pub(公钥) 文件

  • 1、修改sshd_config文件配置

进入 /etc/ssh 目录,编辑sshd_config,查看以下三个配置是否被注释或者存在。不存在的给添加上,被注释的,就取消注释。最后 :wq 保存并退出

 
  • 2、重启sshd服务 

讯享网

sshd的相关操作命令:

  1. systemctl status sshd.service  #查看ssh服务状态
  2. systemctl start sshd.service    #开启ssh服务
  3. systemctl enable sshd.service #设置ssh服务开机自启

【AuthorizedKeysFile】配置项:是公钥的存放路径

  • 3、在客户端Git Bash 下导入文件

将客户端公钥导入服务器端 .ssh/authorized_keys 文件中,执行:

 

再次查看服务器:/.ssh 目录,就会发现多了一个authorized_keys文件 

  • 4、设置权限(根据实际情况决定)

  1. 在设置权限之前先确认一下 .ssh目录和文件authorized_keys的权限,如果.ssh目录权限是:700 文件authorized_keys权限是:600,则不需要设置权限。
  2. 如果不是700 和 600,则执行命令:
讯享网
 

这次克隆发现没有提示:是否需要继续链接,也没有提示让输入密码,直接就成功了。

  1. 如果团队很小,把每个人的公钥收集起来放到服务器的文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。
  2. 下面讲解如何安装Gitosis,这里就不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。
  3. 我将Gitosis安装在服务器的 /opt目录下了。Linux:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。当然也可以根据自己习惯,决定安装到那个目录。
讯享网

执行:git clone https://github.com/res0nat0r/gitosis.git 命令遇到的错误

  • 错误提示:fatal: unable to access 'https://github.com/res0nat0r/gitosis.git/': Encountered end of file 的错误,下面说一下解决方法。

第一种方法:依次执行下面的命令

  • git config --global --unset http.proxy
  • git config --global --unset https.proxy

第二种方法:尝试将目标地址中的 https 改为 git

如果以上两种方式还是不行,那就还使用原命令多尝试克隆几次。我都尝试了好几次,才clone下来

  •  安装Gitosis依赖的工具

 
  • 进入到Gitosis目录执行:

讯享网
  • 出现下面的信息表示安装成功

 

找到:这里写需要禁止的用户名:x:1001:1001::/home/git:/bin/bash

修改为:这里写需要禁止的用户名:x:1001:1001::/home/git:/bin/git-shell

 大家都知道,初始化仓库的命令是:git init,但是这里初始化仓库的命令是 git init –bare。这两者的区别

        git init 创建的工作仓库(working repository)适合于实际编辑生产过程中,在工作目录下,你将可以进行实际的编码、文件管理操作和保存项目在本地工作。如果你开始创建一个项目将包含有源代码和版本跟踪记录的时候你可以使用”git init”,如果你克隆”git clone”一个已经存在的版本库的时候,你也可以得到一个working repository,它也将包含”.git”目录和源文件的拷贝。(也就是说,在远程仓库上,代码是否需要编辑和执行,如果需要执行,就使用git init)

        git init –bare创建的裸仓库(bare repository)主要是用作分享版本库。开发者使用bare repository可以向其他人分享存储在本地的版本库,以便于实时分享代码更新和团队协作 。通过使用”git push”命令,你可以将你的本地更新提交至“中心版本库”(其他开发者可访问的中心库)。其他开发者可以使用“git pull”命令接受你提交的版本更新。如果你正在一个多人协作的项目团队或者同一个项目需要在不同电脑上面完成的时候,bare repository可以满足你的分布式开发需求。(也就是说,大家都把内容分享到中心仓库,然后每个人都可以获取其他人的修改信息的过程,但中心仓库没有代码文件)

  • git init –bare 的特点

  • 使用命令“git init –bare”(bare汉语意思是:裸,裸的)初始化的版本库(暂且称为bare repository),会生成多个记录版本信息的文件。
  • 这种方式,不会包含实际项目源文件的拷贝,所以该版本库不能称为工作目录(working tree)

查看一下刚才用 git init –bare生成的 test.git目录,结构如下

  • git init 的特点

  • 会生成一个.git(隐藏文件夹),在这个文件夹里面有多个版本历史记录文件。
  • 使用–bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件。这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面

查看一下用 git init test_git.git生成的 test_git.git目录,结构如下  

 

  • git init容易产生冲突的地方

  • 因为远端仓库的用户正在master的分支上操作,而你又要把更新提交到这个master分支上,当然就出错了。
  • 但如果是往远端仓库中空闲的分支上提交还是可以的,比如git push origin master:b1 还是可以成功的。

小讯
上一篇 2025-05-11 23:39
下一篇 2025-05-15 11:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/143344.html