1) 我有 debs 存储库
让我们假设这个网址是git@github.com:user/debs.git
我们正在使用ssh
url,以便整个拉取过程可以在服务器上自动化。ssh-keys
可以自行选择git
,与username-password
每次通过连接都需要提供的不同https
,并且 ssh 密钥比密码缓存更容易设置。
这假设您已经设置了 ssh 密钥。在bitbucket和github上查看这些帖子以执行相同的操作。
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
等导致的问题。