在服务器上部署 Git

开始架设 Git 服务器前,需要先把现有仓库导出为裸仓库 — 即一个不包含当前工作目录的仓库。做法直截了当,克隆时用 --bare 选项即可。裸仓库的目录名一般以 .git 结尾,像这样:

$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

该命令的输出或许会让人有些不解。其实 clone 操作基本上相当于 git init 加 git fetch,所以这里出现的其实是 git init 的输出,先由它建立一个空目录,而之后传输数据对象的操作并无任何输出,只是悄悄在幕后执行。现在 my_project.git 目录中已经有了一份 Git 目录数据的副本。

整体上的效果大致相当于:

$ cp -Rf my_project/.git my_project.git

但在配置文件中有若干小改动,不过对用户来讲,使用方式都一样,不会有什么影响。它仅取出 Git 仓库的必要原始数据,存放在该目录中,而不会另外创建工作目录。

把裸仓库移到服务器上

有了裸仓库的副本后,剩下的就是把它放到服务器上并设定相关协议。假设一个域名为git.example.com 的服务器已经架设好,并可以通过 SSH 访问,我们打算把所有 Git 仓库储存在/opt/git 目录下。只要把裸仓库复制过去:

$ scp -r my_project.git user@git.example.com:/opt/git

现在,所有对该服务器有 SSH 访问权限,并可读取 /opt/git 目录的用户都可以用下面的命令克隆该项目:

$ git clone user@git.example.com:/opt/git/my_project.git

如果某个 SSH 用户对 /opt/git/my_project.git 目录有写权限,那他就有推送权限。如果到该项目目录中运行 git init 命令,并加上 --shared 选项,那么 Git 会自动修改该仓库目录的组权限为可写(译注:实际上 --shared 可以指定其他行为,只是默认为将组权限改为可写并执行 g+sx,所以最后会得到rws。)。

$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared

由此可见,根据现有的 Git 仓库创建一个裸仓库,然后把它放上你和同事都有 SSH 访问权的服务器是多么容易。现在已经可以开始在同一项目上密切合作了。

值得注意的是,这的的确确是架设一个少数人具有连接权的 Git 服务的全部 — 只要在服务器上加入可以用 SSH 登录的帐号,然后把裸仓库放在大家都有读写权限的地方。一切都准备停当,无需更多。

下面的几节中,你会了解如何扩展到更复杂的设定。这些内容包含如何避免为每一个用户建立一个账户,给仓库添加公共读取权限,架设网页界面,使用 Gitosis 工具等等。然而,只是和几个人在一个不公开的项目上合作的话,仅仅是一个 SSH 服务器和裸仓库就足够了,记住这点就可以了。

小型安装

如果设备较少或者你只想在小型开发团队里尝试 Git ,那么一切都很简单。架设 Git 服务最复杂的地方在于账户管理。如果需要仓库对特定的用户可读,而给另一部分用户读写权限,那么访问和许可的安排就比较困难。

SSH 连接

如果已经有了一个所有开发成员都可以用 SSH 访问的服务器,架设第一个服务器将变得异常简单,几乎什么都不用做(正如上节中介绍的那样)。如果需要对仓库进行更复杂的访问控制,只要使用服务器操作系统的本地文件访问许可机制就行了。

如果需要团队里的每个人都对仓库有写权限,又不能给每个人在服务器上建立账户,那么提供 SSH 连接就是唯一的选择了。我们假设用来共享仓库的服务器已经安装了 SSH 服务,而且你通过它访问服务器。

有好几个办法可以让团队的每个人都有访问权。第一个办法是给每个人建立一个账户,直截了当但略过繁琐。反复运行 adduser 并给所有人设定临时密码可不是好玩的。

第二个办法是在主机上建立一个 git 账户,让每个需要写权限的人发送一个 SSH 公钥,然后将其加入git 账户的 ~/.ssh/authorized_keys 文件。这样一来,所有人都将通过 git 账户访问主机。这丝毫不会影响提交的数据 — 访问主机用的身份不会影响提交对象的提交者信息。

另一个办法是让 SSH 服务器通过某个 LDAP 服务,或者其他已经设定好的集中授权机制,来进行授权。只要每个人都能获得主机的 shell 访问权,任何可用的 SSH 授权机制都能达到相同效果。

服务器上的 Git - 在服务器上部署 Git相关推荐

  1. GIT 在服务器上布署 本地布署

    GIT 在Linux & windows安装部署 1)            安装git一.Linux部署 git [root@bjoss03 ~]# yum install git 2)   ...

  2. 如何将git服务器同步到本地文件夹,使用git在服务器上部署git仓库并实现提交代码时同步代码到生产环境...

    最近由于需要对正在运行的系统进行新功能添加,本来是可以通过github进行代码维护,但是由于这个项目涉及一些问题,目前还不能开源,所以只能是手动覆盖bug文件,生产环境上的代码反而是最新的了. 之前有 ...

  3. git项目初始上传服务器,快速架设一个使用 SSH 的 Git 服务

    Git 是非常流行的分布式版本控制工具,很早以前就从 Subversion 转到 Git 了.现在每天用的 Xcode日常开发,测试和应用部署也都是使用 Git,而且除了版本控制功能之外,也可以使用 ...

  4. git学习——服务器上的 Git

    服务器上的 Git 到目前为止,你应该已经学会了使用 Git 来完成日常的工作.然而,如果想与他人合作,还需要一个远程的 Git 仓库.尽管技术上可以从个人的仓库里推送和拉取改变,但是我们不鼓励这样做 ...

  5. 如何查看git服务器上的文件在哪里,查看git远程服务器地址

    查看git远程服务器地址 内容精选 换一换 云堡垒机与LDAP服务器对接,认证登录系统的用户身份.本小节主要介绍如何配置LDAP域认证模式.不支持一键同步LDAP服务器用户.不能添加两个相同的LDAP ...

  6. 怎么用git将本地代码上传到远程服务器_TortoiseGit将本地git仓库上传到远程git服务器方法...

    以前为了图省事,通过TortoiseGit创建本地仓库(与git服务器无连接),对于个人使用确实比较方便,commit,revert,diff之类的功能都能够使用,并且速度也很快的.代码开发到一定阶段 ...

  7. 怎么用git将本地代码上传到远程服务器_git命令 将本地代码上传到远程服务器...

    git命令将本地代码上传到远程服务器,首先你需要在远程服务器创建仓库. 1.添加README.md文件,初始化git,这样在本地文件夹下会生成README.md和.git(隐藏文件)两个文件.就是将这 ...

  8. window服务器上搭建git服务,window server git!!!

    先给大家看一个高大上的,这是我给我公司配置的,小伙伴们都说好! 阿里云的2012server 基于这篇大神的教程,我把服务端搭建好了. 传送门,当然我还是自己做个笔记的好. 1.下载java,并安装 ...

  9. 在自己的服务器上搭建git仓库服务器(本地推送到远程仓库、远程仓库推送到本地)

    文章目录 Git服务器 一.安装Git 二.配置Git 1.创建Git用户 2.仓库初始化 三.使用仓库 1.本地推送到远程仓库 2.远程仓库推送到本地 总结 Git服务器 一般,我们编写项目,都会保 ...

最新文章

  1. 快速解决mongodb出现id重复问题
  2. 2018微信年度数据报告:00后最爱表情捂脸哭 80后呲牙笑
  3. pythonif语句缩进_Python中多行IF语句缩进的代码样式?
  4. IO:Reactor和Proactor的区别
  5. 微软企业库4.1学习笔记(十)企业库的设计
  6. 模块简介与matplotlib基础
  7. ModuleNotFoundError: No module named '_tkinter'
  8. python apply函数取数据中的后四位_python 实现rolling和apply函数的向下取值操作
  9. Spring异步切面源码解析
  10. windows7 XP 如何安装netbeui协议
  11. 【FPGA】QuartusII_13.1安装及破解
  12. 安居客头部买房部分书写
  13. CentOS 7 GNOME经典桌面 拼音输入法设置
  14. Android GPS应用开发
  15. 2018蚂蚁金服Java开发实习生一面面经
  16. 2022-4-23基于单片机的酒驾检测报警系统(MQ3酒精传感器)(风吹摇铃 奔赴星海)
  17. 最短路径算法|Dijkstra‘s Algorithm
  18. IE浏览器退役,终究还是被市场淘汰!
  19. 比ping更强大的fping
  20. 玩转python网络爬虫 黄永祥_玩转Python网络爬虫

热门文章

  1. Effective Modern C++ Item 27 熟悉依万能引用型别进行重载的替代方案
  2. common.reg
  3. pandas分组计算平均值_python – Pandas:如何按符号分组并按n行取平均值
  4. Intel 3945ABG用OmniPeek 4.1抓包破解WEP
  5. C#中读取XML文件方法
  6. Nvidia AGX Orin MAX9296 GMSL 载板设计要点
  7. 翻译:Firefox for Pentester: Privacy and Protection Configurations
  8. Codeforces科学刷题指南,一图一表便够了
  9. 历史遗留问题:处理了null的脏数据 可是什么动作会产生null了?
  10. 大学物理---统计物理(热学部分)