Git-我是否正确使用了它?

Git-我是否正确使用了它?,git,ubuntu,Git,Ubuntu,最近我一直在尝试建立git,我遇到了很多问题,很难在网上找到解决方案,这让我觉得我可能误解了git的使用方式 场景 主站点运行在一个Ubuntu盒子上,我还设置了一个测试服务器,它几乎是live服务器的副本。目前有两个开发人员,都是在PC上开发的。我想做的是在测试服务器上创建一个远程存储库,两个开发人员都可以推送到该存储库,然后正常地(通过浏览器)测试他们对网站的更改。到目前为止,我已经建立了一个本地存储库并安装了GitGUI;我能找到的唯一信息是使用以下方法设置远程回购(我们可以推送): gi

最近我一直在尝试建立git,我遇到了很多问题,很难在网上找到解决方案,这让我觉得我可能误解了git的使用方式

场景

主站点运行在一个Ubuntu盒子上,我还设置了一个测试服务器,它几乎是live服务器的副本。目前有两个开发人员,都是在PC上开发的。我想做的是在测试服务器上创建一个远程存储库,两个开发人员都可以推送到该存储库,然后正常地(通过浏览器)测试他们对网站的更改。到目前为止,我已经建立了一个本地存储库并安装了GitGUI;我能找到的唯一信息是使用以下方法设置远程回购(我们可以推送):

git init --bare

我找不到有关如何“提取”的任何信息(我在git设置中执行的操作如下:

git --bare init
然后我在本地克隆这个存储库,并将它添加到我的git远程存储库中,这样我就可以推送到它

我想你可以用 git存档 “提取”/“导出”存储库的内容。裸存储库将只包含存储库的.git目录,因此您必须使用存档来取出您的内容


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

对于处理远程存储库,我强烈推荐。在您的情况下,主题是公共git存储库更改到公共存储库

至于提取(您可能指的是“部署”),它不受git--“愚蠢的内容跟踪器”的支持。解决问题的最简单方法是将
ln-s
符号链接到git存储库中,从您希望将项目提取到的任何位置。这将需要您的源代码来维护live项目的目录结构

如果使用符号链接解决方案,假设您的回购在
~/project
中,并且您希望从
~/public\u html
为您的项目提供服务:

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

看起来你已经完成了一半。是的,你在服务器上创建了一个新的存储库,但它不是实时站点所在的位置。使用git管理网站(php或其他)的过程非常简单

在服务器上创建集线器存储库:

$ mkdir website.git && cd website.git
$ git init --bare
Initialized empty Git repository in /home/YOU/website.git/
创建此空存储库后,需要定义并启用一个post接收钩子,将最新的树检查到服务器的DocumentRoot中(必须已经存在,git不会为您创建它)

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

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/
当然,您的开发人员将希望保持其存储库的同步。如果主服务器由于其他开发人员的活动而有新的更改,推送将失败,因此开发人员应拉取最新版本并解决任何合并冲突,然后重试

编辑: 这是一种稍有不同的方法。它不是使用post接收钩子将工作树签出到DocumentRoot,而是在DocumentRoot中设置一个“主”存储库,并在post更新钩子之后从“中心”存储库中提取更改,并使用post提交钩子确保“中心”在实时服务器上进行任何更改时保持同步

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