git push,源代码隐藏在哪里?

时间:2010-06-29 00:32:35

标签: git

我试图在我的ror应用程序的同一台机器上设置git服务器和部署服务器。我使用以下命令将项目从本地计算机推送到git服务器/部署服务器:

git remote add origin path_to_git_server
git push origin master

然后,在git服务器上,我在~/git/log.git/ref/heads下找到了'master'文件,但我找不到所有的源代码。我需要指向源文件夹,以便它可以在Apache Web服务器上运行。我在这做错了什么?感谢。

3 个答案:

答案 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应用程序,例如GitwebGitosis

在选择一个之前,您可能想在此处阅读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

相关问题