如何在外部服务器上构建本地 git 存储库?
How can I build my local git repo on external server?
在我们公司,我们拥有非常强大的基于 linux 的构建服务器(双 Xeon,40 核),而不是那么强大的 win7 笔记本电脑。我们使用 C/C++ 语言构建我们的产品,以获得深奥的 CPU。编译器仅存在于 Linux。我可以使用 Qt Creator 编辑我的 git 存储库。它正在工作,而且速度非常快。但我无法在我们的笔记本电脑上构建源代码。我们有一个主要的 git 存储库,我可以将相同的存储库克隆到我的笔记本电脑和我们的构建服务器。我想实现这一点,当我按下构建按钮时,我的代码神奇地构建在构建服务器上。我做了一个概念验证解决方案,其中我的构建脚本在我的 repo 上执行 git diff 并将其 scp 到构建服务器,而不是 ssh 构建服务器在服务器 repo 上应用该 diff 而不是开始并等待编译。但该解决方案并不是那么简单。我认为存在更好的 approaching/method。那么如何在外部服务器上构建我的 git 存储库?
如果您可以推送到 bare repo on the build server, then you can associate to that bare repo a post-receive hook (.git/hooks/post-receive
),它将:
检查代码
#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f
触发编译
这样,您就不必自己处理差异。
您只需将构建按钮关联到将您的分支推送到构建服务器的裸仓库的操作,post-receive 挂钩将完成剩下的工作。
您可以切换到 forking Workflow,其中公司的每个开发人员都有一个个人 public 裸仓库,它是官方中央仓库的一个分支。
然后,当您想要构建您的更改时,您将它们推送到您自己的个人 public 存储库(分支或主库)。
构建服务器不仅克隆官方中央存储库,还克隆您的 public 存储库。因此,当您推送到个人 public 存储库时,构建服务器会合并更改并为您进行个人构建。就像它可能已经为官方中央存储库所做的那样?
请注意,这与@VonC 的回答 并没有什么不同,只是更侧重于工作流程。个人 public 回购很可能在构建服务器上,就像@VonC 建议的那样。或者它可能在其他地方。只要它在某个地方 public 足以让构建服务器以及您和您的同事找到它。
考虑将 http://jenkins-ci.org/ 集成到您的工作流程中,以处理构建过程,使用 "git post-receive hook" 触发构建(@VonC 建议)。
如果您想按照@flup 的建议使用 "Forking Workflow",您可以查看 http://gitlab.com,它提供了一种管理 pull/merge 请求、fork 存储库和添加挂钩。
在我们公司,我们拥有非常强大的基于 linux 的构建服务器(双 Xeon,40 核),而不是那么强大的 win7 笔记本电脑。我们使用 C/C++ 语言构建我们的产品,以获得深奥的 CPU。编译器仅存在于 Linux。我可以使用 Qt Creator 编辑我的 git 存储库。它正在工作,而且速度非常快。但我无法在我们的笔记本电脑上构建源代码。我们有一个主要的 git 存储库,我可以将相同的存储库克隆到我的笔记本电脑和我们的构建服务器。我想实现这一点,当我按下构建按钮时,我的代码神奇地构建在构建服务器上。我做了一个概念验证解决方案,其中我的构建脚本在我的 repo 上执行 git diff 并将其 scp 到构建服务器,而不是 ssh 构建服务器在服务器 repo 上应用该 diff 而不是开始并等待编译。但该解决方案并不是那么简单。我认为存在更好的 approaching/method。那么如何在外部服务器上构建我的 git 存储库?
如果您可以推送到 bare repo on the build server, then you can associate to that bare repo a post-receive hook (.git/hooks/post-receive
),它将:
检查代码
#!/bin/sh git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f
触发编译
这样,您就不必自己处理差异。
您只需将构建按钮关联到将您的分支推送到构建服务器的裸仓库的操作,post-receive 挂钩将完成剩下的工作。
您可以切换到 forking Workflow,其中公司的每个开发人员都有一个个人 public 裸仓库,它是官方中央仓库的一个分支。
然后,当您想要构建您的更改时,您将它们推送到您自己的个人 public 存储库(分支或主库)。
构建服务器不仅克隆官方中央存储库,还克隆您的 public 存储库。因此,当您推送到个人 public 存储库时,构建服务器会合并更改并为您进行个人构建。就像它可能已经为官方中央存储库所做的那样?
请注意,这与@VonC 的回答 并没有什么不同,只是更侧重于工作流程。个人 public 回购很可能在构建服务器上,就像@VonC 建议的那样。或者它可能在其他地方。只要它在某个地方 public 足以让构建服务器以及您和您的同事找到它。
考虑将 http://jenkins-ci.org/ 集成到您的工作流程中,以处理构建过程,使用 "git post-receive hook" 触发构建(@VonC 建议)。
如果您想按照@flup 的建议使用 "Forking Workflow",您可以查看 http://gitlab.com,它提供了一种管理 pull/merge 请求、fork 存储库和添加挂钩。