V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zzWinD
V2EX  ›  程序员

Git该怎么部署代码?

  •  1
     
  •   zzWinD · 2013-09-03 16:27:38 +08:00 · 11991 次点击
    这是一个创建于 4098 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在学习Git 最近.但是貌似Git 自身是没有部署代码的功能
    要自己通过写bash 或者怎么样的去实现么?
    各位大神是怎么通过git 发布和部署website的~求指点
    14 条回复    2016-02-02 17:02:21 +08:00
    lichao
        1
    lichao  
       2013-09-03 16:32:11 +08:00
    我是直接在服务器上 pull 的
    PrideChung
        2
    PrideChung  
       2013-09-03 16:35:41 +08:00   ❤️ 1
    git 本质上只是一个版本管理系统,虽然一些对 git 和 shell 玩得比较转的人可以通过 git hook 实现 push 后自动部署,但我是不太建议直接用来部署网站,最好还是用 Capistrano,Mina 之类的部署工具。
    确实想用 git 来部署的话,可以看这篇文章 https://coderwall.com/p/xczkaq
    okidogi
        3
    okidogi  
       2013-09-03 16:36:25 +08:00   ❤️ 1
    infong
        4
    infong  
       2013-09-03 16:40:05 +08:00
    用 git 的 hooks。
    我是这样做的:
    在网站服务器上创建一个 git 远程仓库,在 hooks 下面创建 post-receive 脚本,此脚用来 checkout 代码到网站的目录下。这样在每次提交 push 到服务器上的 git 仓库的时候会自动执行 post-receive 脚本,从而部署最新代码。

    hooks 用法参考:http://git-scm.com/book/en/Customizing-Git-Git-Hooks
    timothyye
        5
    timothyye  
       2013-09-03 16:54:33 +08:00 via Android
    是的,用git hooks,检测push操作,然后在hook脚本里面用shell命令来部署
    timothyye
        6
    timothyye  
       2013-09-03 16:56:43 +08:00 via Android
    另外,Capistrano这里累类工具也相当好用
    humiaozuzu
        7
    humiaozuzu  
       2013-09-03 17:12:06 +08:00
    推荐 staging 服务器用 git hook,production 服务器用 pull ,因为生存环境的部署需要有完全的控制。
    kfll
        8
    kfll  
       2013-09-03 19:34:16 +08:00
    ~/projectA/code $ git pull
    ~/projectA/code $ [ -d ~/projectA/workspace ] || mkdir ~/project/workspace
    ~/projectA/code $ rsync -ap ~/projectA/code/* ~/projectA/workspace
    ~/projectA/code $ cd ~/projectA/workspace
    ~/projectA/workspace $ do some deploy
    zzWinD
        9
    zzWinD  
    OP
       2013-09-04 10:24:41 +08:00
    @lichao 个人项目pull 倒没事,只有一个人也省事儿.但是公司的团队 每个成员提交代码的测试通过以后部署都要去服务器上pull,可能比较麻烦 :D
    @PrideChung 按照这篇文章的做法做了一遍感觉so easy,也初步达到了我要的效果.但是文章中的两个git config 不解 core.worktree 和 receive.denycurrentbranch core.worktree 设置工作目录?receive.denycurrentbranch 拒绝当前目录? 你知道是啥意思不 请赐教~~
    Capistrano 我在尝试中 推荐的肯定不赖 XD

    @infong 嗯 这种方法尝试过啦 感觉不错~ 虽然过程是实现了 但是原理和设置不懂 再研究研究 ;)
    scalala
        10
    scalala  
       2013-09-04 10:34:49 +08:00
    gitlab https://github.com/gitlabhq/gitlabhq
    虽然还有不少bug,不过无视页面功能的情况下是没问题的
    scalala
        11
    scalala  
       2013-09-04 10:36:00 +08:00
    oh...,无视我的回复,以为说的部署git服务器...
    PrideChung
        12
    PrideChung  
       2013-09-04 20:34:20 +08:00   ❤️ 1
    @zzWinD 那两行git config主要的作用是让你可以push到一个non-bare的git repo,一般的通过git init创建的repo是non-bare的,包含.git目录和实际的项目文件,这种repo默认是不能接受push的。bare的git repo只包含一个.git文件夹,只作中央版本控制的作用,这种repo才能接受push。但是这种情况下服务器的repo需要实际的项目代码,又需要能接受push,就只能这么搞了。这也是为什么我不喜欢这种做法,感觉有点Hack,我个人偏爱用Mina部署。
    solar
        13
    solar  
       2014-05-23 11:28:51 +08:00
    搭车提问。
    服务器上已有代码仓库;
    比如:test.git ,包含两个分支:dev 和 prod;
    如何在本地实现:
    git push dev 把代码部署到 /服务器路径/dev
    git push prod 把代码部署到 /服务器路径/prod
    sleshep
        14
    sleshep  
       2016-02-02 17:02:21 +08:00
    @solar
    add remote
    然后就可以推送指定的了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4300 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:07 · PVG 18:07 · LAX 02:07 · JFK 05:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.