Git with Bash:导出子目录而不获取父文件夹

时间:2015-12-12 23:58:18

标签: git bash release git-checkout

我有一个小小的个人网站。

要学习新东西,我正在为我的网站使用git,我想创建一个bash脚本来执行以下步骤:

  1. 确定最后一个标签版本
  2. 将此版本签出到特定于发行版的文件夹(因此我的当前作品不会被删除)
  3. 缩小css文件
  4. 在我的ftp
  5. 上传

    对于只有index.htmlstyle.css的网站来说,这是完全矫枉过正的,但这只是为了学习新东西。 :)

    我目前正处于第二步,这项工作做得很好,但我想让它好一点。

    首先,让我们解释树视图,它看起来像这样:

    /  
    - scripts  
    -- livraison  
    - site  
    -- index.html  
    -- style.css
    

    我的父文件夹中有两个子文件夹,脚本站点脚本不包含任何js脚本,我网站的所有源代码都在 site 中。事实上,脚本确实包含我的bash脚本 livraison 将会发布。

    所以我只需要签出site文件夹并将其放入我将命名为site_livraison的发布子文件夹中

    经过一番研究后,我想出了这个MWE:

    #!/bin/bash
    # Getting last tag version
    dernierTag=$(git describe --tags `git rev-list --tags --max-count=1`)
    echo 'Dernière version identifiée :' $dernierTag'.'
    echo
    
    # Emptying / Creating my release folder
    echo 'Réinitialisation du répertoire "site_livraison".'
    rm -Rf ../site_livraison
    mkdir ../site_livraison
    echo 'Réinitialisation du répertoire "site_livraison" terminée.'
    echo
    
    # Website source code checkout
    echo 'Récupération de la version' $dernierTag' dans le répertoire "site_livraison".'
    git --work-tree=../site_livraison checkout -f $dernierTag -- site
    
    # Doing another checkout for going back to the master branch (if not I stay on my previous tag version and it mess up the git status command when I go back to developement)
    git checkout -f master
    
    echo 'Récupération de la version' $dernierTag' dans le répertoire "site_livraison" terminée.'
    echo
    

    我的问题是在执行我的脚本之后我得到了这个树视图:

    /  
    - scripts  
    -- livraison  
    - site  
    -- index.html  
    -- style.css  
    - site_livraison  
    -- site  
    --- index.html  
    --- style.css
    

    我想改为:

    /  
    - scripts  
    -- livraison  
    - site  
    -- index.html  
    -- style.css  
    - site_livraison  
    -- index.html  
    -- style.css
    

    在执行签出时是否有任何方法可以在git命令中执行此操作,或者我是否需要获取所有文件并使其在我的树视图中“上升”,然后删除 - -site 文件夹?

1 个答案:

答案 0 :(得分:0)

一些解决方案是:

  1. 将项目拆分为多个回购。将scriptssite保留在自己的回购中,然后您可以单独结帐。在回购中没有额外级别的目录可以解决。
  2. #1的另一个变体是使用3个回购。为scriptssite分别代表1个回购邮件,然后是一个包含git个回购邮件,将前两个回复为submodules
  3. 在同一棵树之外提取您的工作site_livraison,然后mvsite子目录从该外部树提取到您想要的位置。这棵树不再是git回购,但如果它只是为了临时目的而可能是无害的。