我试图在我的ror应用程序的同一台机器上设置git服务器和部署服务器。我使用以下命令将项目从本地计算机推送到git服务器/部署服务器:
git remote add origin path_to_git_server
git push origin master
然后,在git服务器上,我在~/git/log.git/ref/heads
下找到了'master'文件,但我找不到所有的源代码。我需要指向源文件夹,以便它可以在Apache Web服务器上运行。我在这做错了什么?感谢。
答案 0 :(得分:6)
您可能创建了一个git init --bare
存储库 - 这不会起作用,因为它只是git存储库而不是工作阶段。我打算将它设置为三机器布局 - 但它可以在两台甚至一台机器上运行。
机器A(您的开发机器)
机器B(您的远程存储库)
机器C(您的生产环境)
(但如果你在一台机器上有生产,开发和“远程”存储库那么也可以)
当你准备推送到机器B(Repo)时,你提交所有工作,正确地进行,然后执行git push
(在执行远程添加等之后)这将更新Bare远程存储库自上次推送以来机器的所有更改(将其视为使用远程仓库同步机器a上.git文件夹的内容)
由于Git只关心文件内容的变化(实际上并不关心文件或文件夹本身 - 相信我Git并不关心你的文件 - 只是内容)它不存储文件一台机器B就像你在你的机器上看到的“工作阶段”Git将这些文件放在工作阶段供你使用和开发 - 但Git并不关心它们 - 再次它只关心“文件内容的变化” “自从您上一次承诺以来。
要部署代码,您需要转到Machine C并在机器B上克隆存储库 - 这会将“.git”文件夹同步到该机器,然后根据其所有内容构建后续文件/文件夹跟踪。克隆此存储库后,您可以通过git pull
这是关于它的主旨。如果您在计算机上拥有一切,则可以执行以下操作:
~/projects/git_project (Your devel area)
/home/repo/git_project.git ("Remote" repo)
/opt/rails/git_project ("Production" machine)
远程仓库在一台机器上是多余的,因为您可以从技术上拉动和推送
~/projects/git_project
到
/opt/rails/git_project
但只是保持示例在行
答案 1 :(得分:3)
服务器上的存储库是裸存储库。按照惯例,它位于名为project_name.git的目录中。
裸存储库没有检查项目源代码的工作副本,就像本地存储库那样。所有源代码都在压缩数据文件中。
要通过Web服务器发布源代码,您需要一个可以读取这些文件的Web应用程序,例如Gitweb或Gitosis。
在选择一个之前,您可能想在此处阅读What’s the best Web interface for Git repositories?: - )
要使用带有git的capistrano(或其他构建或部署工具),您可以:
使用git clone
在构建服务器上的某处创建正常工作副本(普通,非裸git存储库)
从此副本中运行capistrano
定期使用git pull
使此副本与公共存储库保持同步。
答案 2 :(得分:0)
您可以在服务器中创建一个裸存储库。裸版存储库没有在版本控制下的任何文件的本地签出副本。
如果您想在服务器上签出签出副本,请使用git init
而不是--bare
来初始化git存储库并将receive.denyCurrentBranch
设置为ignore
以便允许push
命令。此外,您需要确保没有人更改服务器上的git存储库中的任何文件。
有关详细信息,请参阅http://toroid.org/ams/git-website-howto。