http://ju.outofmemory.cn/entry/16893

我喜欢 github,我现在的个人代码全部是托管在上面了,但是一些公司或者某些项目不适合放入github中,你希望能有一个完全私有的仓库,如果你有一台服务器,这显然是很容易办到的事。

下面简单的描述我在某个项目中布署的一个git服务,并且本地提交更新后,服务器将自动更新代码到在线代码的仓库。

创建用户并使客户机可通过密钥登录服务器

服务器中操作:

  • root 用户ssh登录服务器,创建一个新用户用来给git登录及其操作,比如这里我创建一个名为“git”的用户:

    $ sudo add user git

  • 进入到 /home/git 文件夹中,查看是否有 .ssh/ 目录, 如没有:

    $ mkdir .ssh

  • 进入 /home/git/.ssh 文件夹中,创建文件 authorized_keys

  • 等待

客户机中操作:

  • 进入 ~/.ssh/ 目录,查看是否有 id_rsa.pub 文件,如没有:

    $ ssh-keygen

  • 一路回车,完成后,便可发现 ~/.ssh/ 目录中有 id_rsa.pub, 复制其内容,粘贴到上面操作服务器的 authorized_keys 文件中

  • 测试是否密钥登录成功

    $ ssh git@yourserverip

创建git服务器远程仓库

  • 进入 /opt/git 目录, 如没有,创建之
  • 建立仓库文件夹,比如:

    # path: /opt/git $ mkdir gitdemo

  • 初始化为远程仓库

    $ git init --bare

上面的步骤已经完成了git远程仓库的创建,此时你只要将你本地的git代码仓库 git remote add git@yourserverip:/opt/git/gitdemo,便可提交与更新代码了。

比如我机器上的开发目录为:~/www/gitdemodev, 进行下面操作:

$ cd ~/www/gitdemodev
$ git init
#建一个文件,写点东西进去
$ touch README | echo 'hello git' > READEME
$ git add README
$ git remote add origin git@yourserverip:/opt/git/gitdemo
$ git commit -m 'first commit'
$ git push origin master

现在你已经本地的代码成功的提交到了远程仓库中,只需在你团队成员电脑上作相同操作,便可利用git协同开发了,注意把各自电脑的 id_rsa.pub 内容复制进服务器的 authorized_keys 文件中。

git hook 自动布署代码

假设你的项目也是跑在此台服务器上,那自动布署代码就很简单了,比如你的在线服务代码在 /var/www/demo 文件夹中。

你先初始化代码库:

$ git clone /opt/git/gitdemo /var/www/demo

然后你可以通过 git pull 来更新代码。

当然这样是手动了,我想要的是本地提交更新后,服务器能自动的 git pull代码到最新,于是我们就要借助 git hook了。

进入到 /opt/git/gitdemo 文件夹中,会发现 .git/hook 文件夹在里面,进入到 hook 中,里面有很多的 sample 脚本,这里我们只需要用到 post-update。

$ mv post-update.sample post-update
$ vim post-update

可以看到里面其实就是一些shell脚本,你要做的就是把 git pull写进去。当用户提交后,便会调用post-update脚本的。

这些脚本显然是可以做很多事的,只要你想得到,要了解各脚本何时调用,google吧。

【注】服务器中与git用户有关的文件夹及文件,请:

$ chown -Rh git:git /your/git/dirs 

Git Server & Git Hook的更多相关文章

  1. git server side hook 试用

    git 的hook 是一个很方便的功能,我们可以使用hook 做好多处理,比如client side hook 进行 提交格式校验,server side 进行ci/cd 处理 测试使用docker- ...

  2. # 基于Gitolite搭建Git Server - 支持SSH&HTTP

    Git, 一个分布式的版本管理工具,我认为其革命性的点:在于改变了用户协作的方式,使得协作更简单. 下面讲述 使用一个开源软件 Gitolite搭建一个Git Sever, 并给了一个推荐的团队协助方 ...

  3. 搭建Git Server

    windows上如何搭建Git Server   Git在版本控制方面,相比与SVN有更多的灵活性,对于开源的项目,我们可以托管到Github上面,非常方便,但是闭源的项目就会收取昂贵的费用.那么私有 ...

  4. Ubuntu 搭建简单的git server

    Git 可以使用四种主要的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议. 在此,我们将会讨论那些协议及哪些情形应该使用(或避免使用)他 ...

  5. 局域网git服务器搭建(基于win7 + bonobo git server)

    公司内网有一台win7系统的服务器. 准备在上面部署git后台, 用于内网项目版本管理. 搜索了相关资料后, 在根据公司环境, 决定采用win7 + bonobo git server + git的方 ...

  6. 使用Gitblit 在windows 上部署你的Git Server

    Gitblit: 在windows 上部署你的Git Server 前言 之前在dudu的文章里看到过用bonobogit 部署在 IIS 7.5 上的Window 平台的git 服务器.学着部署使用 ...

  7. Windows下安装 msysGit 以及初始化 Git server环境

    Windows下git工具msysGit使用以及Git server初始化 Windows下git工具,这里选择msysGit,版本为msysGit-netinstall-1.8.1.2-previe ...

  8. Ubuntu server 搭建Git server

    Ubuntu server 搭建Git server,git相比svn,最主要就是分布式了,每个客户端用户的本地都是一个版本管理控制器. Ubuntu server 版本为12.04 搭建步骤如下: ...

  9. UBUNTU上的GIT SERVER

    Git是一个开源的版本控制系统,由Linus Torvalds主导,用于支持Linux内核开发.每一个Git工作目录,都是一个完整的代码库,包含所有的提交历史.有能力跟踪所有的代码版本,而不会去依赖于 ...

随机推荐

  1. spark.SecurityManager: SecurityManager: authentication disabled

  2. stl-基本知识

    摘要:本文列出几个基本的STL map和STL set的问题,通过解答这些问题讲解了STL关联容器内部的数据结构,最后提出了关于UNIX/LINUX自带平衡二叉树库函数和map, set选择问题,并分 ...

  3. 织梦DedeCms调用全站相关文章方法

    织梦DedeCms 有个标签可以调用相关文章,通过下面的修改可以调用全站的相关文章,文章页内显示相关文章内容,可以提高关键词密度,还是挺不错的. 模板调用代码 <div>     < ...

  4. 常用webshell提权方法总结

    pcAnywhere提权:1.利用pcAnywhere提权,前提条件是pcAnywhere默认安装到默认路径,以及它的目录安全权限有users权限,如果管理员删除了users和power users用 ...

  5. C#中Delegate和Event以及它们的区别(转载)

    一.Delegate委托可以理解为一个方法签名. 可以将方法作为另外一个方法的参数带入其中进行运算.在C#中我们有三种方式去创建委托,分别如下: public delegate void Print( ...

  6. ubuntu系统自带的火狐(firefox)如何安装Adobe Flash

    当你刚装完系统,发现打开某些网站时,提示你“需要安装flash”,然后你点击确定,过了一会,提示你安装失败. 我也是遇到这种情况.我第一个反应是,我先不用firefox,我安装chrome. 可是当你 ...

  7. Windows下安装配置SubVersion的简明步骤

    [使用的安装程序和文档说明] svn-1.4.0-setup.exe:Subversion服务端1.4.0安装程序: SubService.rar:  SubServe服务Windows辅助工具; T ...

  8. ThinkPHP访问不存在的模块跳到404页面

    在ACTION中新建一个文件EmptyAction.class.php,文件中的代码如下: <?php class EmptyAction extends Action{     functio ...

  9. FrameSize、WinSize、VisibleSize、VisibleOrigin区别

    FrameSize 手机屏幕分辨率,通过CCEGLView::sharedOpenGLView()->getFrameSize()获得,不同的分辨率手机这个值不同 WinSize 设计分辨率,固 ...

  10. SSDT Hook实现简单的进程隐藏和保护【转载】

    原文链接:http://www.blogfshare.com/ssdthook-hide-protect.html 原文作者:AloneMonkey SSDT Hook实现简单的进程隐藏和保护 Alo ...