Git 利用 Git 部署项目到 VPS (出现问题)

paranoyang · 2012年01月21日 · 最后由 Saito 回复于 2012年02月23日 · 6310 次阅读

受到这个 gist 的影响,尝试使用 git 把项目部署到盛大云的 VPS: https://gist.github.com/1372694 按照原文的方法按部就班地尝试:


我们将把在本地开发的 project 项目的 git 仓库托管到 VPS 上。现在 VPS 上初始化一个 git 仓库:

~ $: mkdir git
~ $: cd git
~ $: mkdir project-demo
~ $: cd project-demo
~ $: git init
~ $: git config --bool core.bare true

然后回到本地,设置本地的仓库。新建的 project-demo 是部署专用的。

~ Sites$: mkdir project-demo
~ Sites$: cd project-demo
~ project-demo$: git clone user@vps:git/project-demo .

添加一个 remote,名为 local,指向本地的 git 仓库。

~ project-demo$: git remote add local ~/Sites/project

project 仓库中的内容抓取到 project-demo 中,然后合并。

~ project-demo$: git fetch local
~ project-demo$: git merge local/master

最后,将合并后的仓库推送到 VPS 上。

~ project-demo$: git push origin master

以后基本的工作方式是:

  • project 中做开发
  • project 中的仓库抓取到 project-demo
  • project-demo 中的仓库推送到 VPS 上

至于为什么要 projectproject-demo 两个仓库,是为了将开发和部署分开。实际部署和本地开发所使用的工具有所不同,例如在本地使用默认的 WEBrick 做服务器即可,而在实际的生产环境中使用 nginx+unicorn,而 unicorn 是需要在程序中保存配置文件的;还有就是下面会用到的 capistrano 这个 gem,它也是需要配置文件的。这些配置文件是针对服务器上特定的 App 的,而且在开发中是不必须的。把开发和部署分开也便于将开发的 App 开源,托管在 Github 等。


出现的问题是,最后一步git push origin master之后,提示上传成功,但是在服务器对应的文件夹里面除了 .git 以外还是看不到任何东西。想请教一下可能问题的原因是什么?

你给出的连接原文是搭配 capistrano 部署的,而你的部署则没有使用,所以只要将 vps 仓库 初始化 ~ $: git init ~ $: git config --bool core.bare true 改为 git init --bare 就可以了,其实部署前只要稍微了解 git 文档就可以避免这些问题

只用 git 是不够的,用 cap(爽)

bare 仓库是不包含 working copy 的,我想应该是提交到 bare,然后触发 hook 抽取更新的内容到对外的应用程序目录。

看了遍 gist,里面有提到 capistrano,你才实践了一半哦亲。。。

#4 楼 @lanisle #1 楼 @ono_li #2 楼 @Rei 知错了= = 对 git 还是不够了解,我还是乖乖 RTFM 去。

弄两 repo 不是很麻烦吗?gems 不同可以用 group 来管理,开发不需要的用--without 过滤掉;配置不同也可以用 rails environments

还是蛮爽的,用 cap 配合 git,如果再用 git commit 钩子,就更方便

非 bare 的仓库是无法 push 的..

所以 bare 仓库是你唯一的选择,但是 bare 仓库没有 working copy.. 就只能通过 git hooks 或者别的了。

总的来说不如 rsync.. .

需要 登录 后方可回复, 如果你还没有账号请 注册新账号