Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 在Web服务器上使用Stash进行分叉并从另一个存储库添加文件_Git_Repository_Deb_Bitbucket Server - Fatal编程技术网

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

Git 在Web服务器上使用Stash进行分叉并从另一个存储库添加文件,git,repository,deb,bitbucket-server,Git,Repository,Deb,Bitbucket Server,我是git新手,需要一些帮助。 我的计划: 我有黛布的仓库 我有文档库 我要从debs到www文件夹的fork 从文档存储库添加具有修改名称和目录的文件 然后,我想从debs文件夹和modifieddocs文件夹合并到www文件夹 在webserver中,我想使用cron自动提取www文件夹以更新deb存储库 我使用Atlassian Stash,我发现有一种方法可以从debs转移到www文件夹。 当我在debs目录中更改某些内容时,它会自动将更改推送到www文件夹。 这是真的吗 我想让脚本自动

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

  • 我有黛布的仓库
  • 我有文档库
  • 我要从debs到www文件夹的fork
  • 从文档存储库添加具有修改名称和目录的文件
  • 然后,我想从debs文件夹和modifieddocs文件夹合并到www文件夹
  • 在webserver中,我想使用cron自动提取www文件夹以更新deb存储库
  • 我使用Atlassian Stash,我发现有一种方法可以从debs转移到www文件夹。 当我在debs目录中更改某些内容时,它会自动将更改推送到www文件夹。 这是真的吗

    我想让脚本自动完成第4部分。5.六,

    最好的方法是什么

    1)我有debs存储库

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

    我们使用的是
    ssh
    url,这样整个pull过程就可以在服务器上实现自动化。
    git
    可以自己选择
    ssh密钥
    ,这与每次都需要通过
    https
    连接提供的
    用户名密码
    不同,ssh密钥比密码缓存更容易设置

    这假设您已经设置了ssh密钥。查看上面的这些帖子,也可以这样做

    2)我有文档存储库

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

    3)我想从debs到
    www
    folder

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

    cd www
    git clone git@github.com:user/docs.git
    
    FWIW在这里不是正确的术语,它仅与在bitbucket、github等上创建从一个用户帐户到另一个用户帐户的回购副本相关

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

    cd path_to_www_parent
    git clone git@github.com:user/docs.git www
    
    4)从文档存储库添加具有修改名称和目录的文件

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

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

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

    5)然后我想将debs文件夹和modified 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拉动将更新它们。cron作业可以是如下所示的简单脚本

    cd www
    git pull
    service apache2 graceful #assuming apache is webserver
    
    这可以像下面那样每15分钟安排一次作业(使用
    crontab-e打开crontab


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


    不,不会自动推送任何内容。您需要使用
    git add
    添加更改的文件,然后提交它们,然后将它们推送到bitbucket/github repo。我们可以在服务器上设置一个裸repo并开始推送它,但这不会改变上面的任何其他步骤。检查我的另一个答案,以更好地了解建立裸回购协议


    PS


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

    否,不会自动推送任何内容。您需要使用
    git add
    添加更改的文件,然后使用
    git commit
    提交这些文件,然后推送它们。您在哪个服务器/操作系统上?在Windows和osx上都可以使用Stash,所以我不确定您是否使用了某种风格的linux。
    */15 * * * * sh script.sh
    
    */15 * * * * cd www && git pull && service apache2 graceful