代码之家  ›  专栏  ›  技术社区  ›  Marko

在Web服务器上使用Stash分叉并从另一个存储库添加文件

  •  0
  • Marko  · 技术社区  · 10 年前

    我刚接触git,需要一些帮助。 我的计划:

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

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

    我想制作一个脚本,自动完成第4部分。5.和6。

    最好的方法是什么?

    1 回复  |  直到 10 年前
        1
  •  1
  •   Community CDub    7 年前

    1) 我有debs存储库

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

    我们正在使用 ssh url,以便整个拉取过程可以在服务器上自动化。这个 ssh-keys 可以自己挑选 git ,与 username-password 每次都需要提供 https 连接和ssh密钥比密码缓存更容易设置。

    这假设您已经设置了ssh密钥。查看以下帖子 bitbucket github 这样做。

    2) 我有文档存储库

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

    3) 我要从debs到 www 文件夹

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

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

    不管好坏 forking 这里不是正确的术语,它只与在bitbucket、github等上从一个用户帐户到另一个帐户创建回购副本相关。

    如果您希望将此克隆命名为 万维网 ,即,要放置在 万维网 方向盘,而不是内部 www/debs 目录,使用

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

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

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

    否则,如果文件的名称和目录路径与git repo中的相同,则可以直接将docs存储库添加为 git submodule debs 存储库,或将其作为 subtree 在它里面。

    我建议保持文件名等不变,这样您的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分钟一次的作业,如follow(使用打开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 repo。我们可以在服务器上设置一个裸机,并开始向其推送,但这不会改变上面的任何其他步骤。在另一个上检查我的答案 question here 以更好地了解设置裸机回购。


    附言

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