如何创建你自己的Git服务器?

运维 系统运维
如果你连不上公共网络,或者你受够了呆板的管理,亦或是你只是单纯的想要不同与Github所提供的服务,那么搭建你自己的Git服务器将会很有帮助。本文中分享了创建自己的Git服务器的方法。

尽管我是一个快乐的(同时也是付费的)GitHub用户,但是我多次想要在我自己的服务器上搭建私人仓库(github会提供给付费用户私人仓库—-译注)。如果你连不上公共网络,或者你受够了呆板的管理,亦或是你只是单纯的想要不同与Github(以及其他类似的网站)所提供的服务,那么搭建你自己的Git服务器将会很有帮助。在Unix(Linux、Mac OSX、 *BSD、 Solaris、AIX)的机器上部署Git服务器并非难事,但是仍然有许多细节需要注意。这里是一个完整的教程。

通过以下的步骤,你将在服务器上搭建并使用你自己的Git服务,例如myhost.example.com。其中的一些步骤,像email通知,限制用户的权限,特定分组的接入管理,都是依据你的要求和现实状况的可选项。还有很多命令,你需要root权限才能执行,所以别忘了用sudo,或者(最好不要)直接切换到root来执行。

  • 为有读写权限的用户建立一个分组。根据你的操作系统,你可以用groupadd命令来实现,用vigr来编辑分组文件,或者直接编辑/etc/group文件。在最后,你会在/etc/group文件中看到如下一行

 

  1. repogroup:*:10005:marry,john,violet 

 

其中,repogroup是准许接入这个仓库的组的名字。10005是一个独一无二的分组识别数字,marry,john,violet则是获准接入这个仓库的用户。

  • 决定Git仓库的路径。它既可以放在你的home路径下(e.g. /home/yourname/gitroot),也可以放在一个专用的路径下(e.g. /var/gitroot).
  • 配置权限,让Git用户可以访问这个目录

 

  1. chmod g+rx /path-to/gitroot 
  2. chown :grouprepo /path-to/gitroot 

 

  • 建立新的Git仓库,叫做newrepo

 

  1. cd /path-to/gitroot 
  2. git init --bare newrepo.git 

 

  • 建立路径认证,以允许用户组访问,同时有针对性的设置Git

 

  1. cd newrepo.git 
  2. chown -R :grouprepo . 
  3. git config core.sharedRepository group 
  4. find . -type d -print0 | xargs -0 chmod 2770 
  5. find . -type f -print0 | xargs -0 chmod g=u 

 

  • 设置提交(commit)的email通知(commit是一条命令),这样当有新的修改提交到仓库的时候,开发者们将会收到一封关于修改内容一览的电子邮件。
  1. echo 'One-line project description' >description 
  2. git config --local hooks.mailinglist email-a@example.com,email-b@example.com,... 
  3. git config --local hooks.emailprefix '[DI-PR] ' 
  4. git config --local hooks.showrev "git show -C %s; echo" 
  5. git config --local hooks.emailmaxlines 100 
  • 通过设置一个称为钩子(hook)的东东,来创建这些email通知。
  1. cd hooks 
  2. cp post-receive.sample post-receive 
  3. chmod +x post-receive 
  • 从post-receive的脚本中移除掉最后一行注释的#字号,最后语句应该是这样的

 

  1. ./path-to-hooks/post-receive-email 

 

  • 在你的库中先放入一个文件(比如README)。为了避免其他用户在第一次提交时遇到奇怪的错误信息时感到困惑,这是有必要的。

 

  1. cd to-your-personal-working-directory 
  2. git clone myhost.example.com:/path-to/gitroot/newrepo.git 
  3. echo "Short project description" >README.txt 
  4. git add README.txt 
  5. git commit -a -m "Add README file" 
  6. git push origin master # 第一次仅仅需要T"origin master" 这个参数 

 

  • 为仓库的其他用户建立账户。依据你系统的不同,你可以通过useradd 或者adduser来实现。
  • 设置用户可以通过公/私钥配对来访问。这包括以下几步:

1)已经有公钥的用户,只需要把公钥发给你就好。
2)没有公钥的用户,必须用ssh-keygen命令来生成一个,然后把.ssh/id_rsa.pub发给你就可以了。
3)之后你必须在他们对应的账户下面建立这种公/私钥配对。复制他的公钥,然后顺序执行下面的命令。

 

 

  1. sudo su - username 
  2. mkdir -p .ssh 
  3. cat >>.ssh/authorized_keys <<\EOF 
  4. paste-key-as-one-line 
  5. EOF 
  6. exit 
 

 

  • 改变用户的账户让他们使用受限的shell。如果你想让你添加进来的用户仅仅使用Git,而不是Unix的所有东西,那么就设置他们的账户,让他们只能使用Git。Git提供了这种专为这种需求设计的受限shell。它通常被安装在 /usr/libexec/git-core/git-shell or /usr/local/libexec/git-core/git-shell。因此,对所有你想限制权限的用户,你可以执行以下命令。

 

  1. sudo chsh -s /usr/libexec/git-core/git-shell username 

 

  • 告诉你的用户,用下面的语句来克隆仓库到本地。

 

  1. git clone myhost.example.com:/path-to/gitroot/newrepo.git 

 

到了这里,恭喜你,你成功了!

原文链接: spinellis   翻译: 伯乐在线 - 慕容老匹夫

译文链接: http://blog.jobbole.com/60505/

责任编辑:黄丹 来源: 伯乐在线
相关推荐

2016-09-23 20:04:26

2021-02-05 05:29:51

服务器GitGogs

2022-10-10 12:15:38

CentOSgit服务器

2018-03-26 10:20:13

2022-01-10 13:10:11

DNS服务器系统运维

2012-02-27 13:56:19

Java服务器

2023-04-01 18:19:38

团队MIT开源

2010-06-02 13:29:55

2021-08-27 11:03:57

Azure公有云云原生

2023-03-29 15:45:46

DNS服务器

2012-12-03 14:21:02

服务器群集

2020-01-18 18:41:13

GitGit服务器开源

2018-01-10 10:45:37

2012-02-27 15:44:12

存储服务器宝通

2022-08-24 08:33:27

Git系统Linux

2010-08-26 11:01:05

DHCP服务器

2016-12-26 10:28:00

2010-08-03 15:53:07

CentOSNFS服务器

2009-09-24 16:25:16

打印服务器

2018-10-19 09:50:15

Linuxman手册Linux命令
点赞
收藏

51CTO技术栈公众号