Git - 我正确使用它吗?

时间:2011-12-28 21:24:59

标签: git ubuntu

我最近一直试图设置git,而且我遇到了很多问题,很难找到解决方案,这让我觉得我可能误解了Git是如何被使用的。

情景

主站点在Ubuntu盒子上运行,我也有一个测试服务器设置,几乎与实时服务器重复。目前有两个开发人员,都在PC上开发。我想要做的是在测试服务器上创建一个远程存储库,开发人员可以推送到该存储库,然后通常(通过浏览器)测试他们对网站的更改。到目前为止,我已经建立了一个本地存储库并安装了Git GUI;我可以找到的唯一信息来设置远程仓库(我们可以推送)正在使用:

git init --bare

我找不到任何关于如何“提取”(< - 这是什么正确的词)的信息,将repo放入它的php目录结构中,这样我就可以通过网络浏览器使用了。

我的问题

1)我这样做了吗?如果不是我误解了什么,我该如何解决这个问题?

或2)如果我正确地这样做,我需要做什么来“提取”回购?

提前致谢!

3 个答案:

答案 0 :(得分:3)

看起来你已经到了中途。是的,您在服务器上创建了一个新的存储库,但它不是实时网站所在的位置。使用git管理网站(php或其他)的过程是well described here

在服务器上创建中心存储库:

$ mkdir website.git && cd website.git
$ git init --bare
Initialized empty Git repository in /home/YOU/website.git/

创建此空存储库后,您需要定义并启用一个post-receive挂钩,将最新的树检查到服务器的DocumentRoot中(必须已存在,git不会为您创建它。)

$ mkdir /var/www/www.example.org
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
$ chmod +x hooks/post-receive

在第一个开发人员的工作站上,将远程目录添加到本地配置,然后将本地存储库的内容推送到远程目录。

git remote add website ssh://home/YOU/website.git/
git push website +master:refs/heads/master

当您在本地更改内容并上传更改时,请执行

git push website

第二个开发人员应该简单地克隆远程存储库以在本地工作。

git clone ssh://home/YOU/website.git/

当然,您的开发人员希望保持其存储库同步。如果主服务器由于来自其他开发人员的活动而有新的更改,则推送将失败,因此开发人员应该提取最新版本并解决任何合并冲突,然后重试。

编辑:

这是another tutorial采用略有不同的方法。它不是使用post-receive挂钩将工作树签出到DocumentRoot,而是在DocumentRoot中设置一个“prime”存储库,并在更新后的挂钩之后从“hub”存储库中提取更改,并使用post-commit hook,以确保“hub”保持同步,以防在实时服务器上进行任何更改。

git workflow overview

答案 1 :(得分:1)

我在我的git设置中做的是:

git --bare init

在服务器上。然后我在本地克隆这个存储库并将其添加到我的git远程存储库中,以便我可以推送它。

我认为你可以使用      git archive 提取" /导出存储库的内容。裸存储库将只包含存储库的.git目录,因此您必须使用存档来获取您的资料。

您还可以做的就是将裸存储库克隆到您想要的位置,例如:你的php目录。然后,您拥有所有文件,并可以从裸存储库中提取更改。

答案 2 :(得分:0)

为了处理远程存储库,我强烈推荐http://book.git-scm.com/3_distributed_workflows.html。在您的情况下,主题公共git存储库将更改推送到公共存储库

就提取而言(你可能意味着'部署'),git不支持它 - '愚蠢的内容跟踪器'。解决问题的最简单方法是将ln -s符号链接到您的git存储库中,从您想要将项目提取到的位置。这将需要您的源代码来维护实时项目的目录结构。

如果您使用符号链接解决方案,假设您的回购邮件位于~/project,并且您希望从~/public_html投放您的项目:

$ cd ~/public_html
$ ln -s ../project .