0

我是 git 新手,需要一些帮助。我的计划:

  1. 我有 debs 存储库
  2. 我有文档存储库
  3. 我想从 debs 分叉到 www 文件夹
  4. 使用修改后的名称和目录从 docs 存储库添加文件
  5. 然后我想从 debs 文件夹和修改后的 docs 文件夹合并到 www 文件夹
  6. 在网络服务器中,我想使用 cron 自动提取 www 文件夹以更新 deb 存储库

我使用 Atlassian Stash,我看到有一种方法可以从 debs 分叉到 www 文件夹。当我在 debs 目录中更改某些内容时,它会自动将更改推送到 www 文件夹。这是真的吗?

我想制作能够自动执行第 4、5 和 6 部分的脚本。

最好的方法是什么?

4

1 回答 1

1

1) 我有 debs 存储库

让我们假设这个网址是git@github.com:user/debs.git

我们正在使用sshurl,以便整个拉取过程可以在服务器上自动化。ssh-keys可以自行选择git,与username-password每次通过连接都需要提供的不同https,并且 ssh 密钥比密码缓存更容易设置。

这假设您已经设置了 ssh 密钥。在bitbucketgithub上查看这些帖子以执行相同的操作。

2)我有文档存储库

让我们假设这个网址是git@github.com:user/docs.git

3)我想从 debs 分叉到www文件夹

这应该很简单 - 转到您的 www 位置并使用git clone创建它的本地副本。

cd www
git clone git@github.com:user/docs.git

FWIW,分叉在这里不是正确的术语,它仅与从一个用户帐户到另一个用户帐户在 bitbucket、github 等上创建 repo 的副本有关。

如果您希望将此克隆命名为www,即所有代码都放在目录中www,而不是放在www/debs目录中,请使用

cd path_to_www_parent
git clone git@github.com:user/docs.git www

4) 使用修改后的名称和目录从 docs 存储库添加文件

如果您每次都需要更改文件名,我建议将 debs 存储库克隆到某个位置,然后重命名文件,然后移动它们。

否则,如果文件的名称和目录路径与 git repo 中的相同,您可以直接将 docs 存储库作为git 子模块添加到存储debs库中,或者将其作为子树添加到其中。

我建议保持文件名等相同,以便您的 git 存储库是代码的工作副本,而不需要对 pull 等进行任何更改;这样它就可以直接用作子模块,我们不需要担心那个文件重命名脚本。

5)然后我想从 debs 文件夹和修改后的 docs 文件夹合并到 www 文件夹

我们已经在上面的步骤中解决了这个问题,理想的方法是在您的情况下使用以下结构,而不是手动使用代码。

debs #can be the www folder as well
|_code_file_for_debs_1
|_code_file_for_debs_2
|_code_file_for_debs_3
.
.
|_docs #is a git submodule

6) 在webserver我想用 cron 自动拉取 www 文件夹以更新 deb 存储库

一旦你以上述方式添加了模块,一个简单的 git pull 将更新它们。cron 作业可以是一个简单的脚本,如下所示

cd www
git pull
service apache2 graceful #assuming apache is webserver

这可以安排为每 15 分钟一次的作业,如跟随(使用 crontab 打开crontab -e

*/15 * * * * sh script.sh

或者

*/15 * * * * cd www && git pull && service apache2 graceful

我使用 Atlassian Stash,我看到有一种方法可以从 debs 分叉到 www 文件夹。当我在 debs 目录中更改某些内容时,它会自动将更改推送到 www 文件夹。这是真的吗?

不,不会自动推送任何内容。您需要使用 添加更改的文件git add,然后提交它们,然后将它们推送到您的 bitbucket/github 存储库。我们可以在服务器上设置一个裸仓库并开始推送到它,但这不会改变上述任何其他步骤。在此处查看我对另一个问题的回答,以更好地了解设置裸仓库。


附言

虽然此设置应该可以工作,但您应该研究使用capistrano或其他此类工具进行部署,而不是完全依赖 cron 作业来为您做同样的事情。脚本的优点cap是它们只需要在您需要进行部署时运行,因此您的服务器不会浪费 CPU 周期;您可以同时部署在多台服务器上;您可以轻松解决由于失败git pull等导致的问题。

于 2014-03-31T12:02:29.277 回答