Git 和 Bash : 导出子目录而不获取父文件夹
Git with Bash : exporting a subdirectory without getting the parent folder
我有一个小小的个人网站。
为了学习新事物,我正在为我的网站使用 git,我想创建一个 bash 脚本来执行以下步骤:
- 识别最后一个标签版本
- 将此版本签出到特定于版本的文件夹(因此我当前的工作不会被删除)
- 缩小 css 文件
- 上传到我的 ftp
对于只有 index.html
和 style.css
的网站来说,这完全是矫枉过正,但这只是为了学习新东西。 :)
我目前处于第二步,这项工作非常好,但我想让它变得更好。
首先,让我们来解释一下树视图,它看起来像这样:
/
- scripts
-- livraison
- site
-- index.html
-- style.css
我的父文件夹中有两个子文件夹,scripts 和 site。 scripts不包含任何js脚本,我网站的所有源代码都在site。事实上,scripts 确实包含我的 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
命令中执行此操作,还是我需要获取所有文件并在我的树视图中将它们设为 "go up",然后删除 --站点文件夹?
一些解决方案是:
- 将项目拆分为多个存储库。将你的
scripts
和 site
保存在他们自己的仓库中,然后你可以独立地检查每个。回购协议中不会有额外的目录级别可以解决。
- #1 的另一个变体是使用 3 个回购协议。
scripts
和 site
各有 1 个回购,然后是一个包含 git
的回购,将前两个回购视为 submodules.
- 将您的工作
site_livraison
提取到同一棵树之外,然后 mv
仅将 site
子目录从该外部树提取到您想要的位置。这棵树将不再是 git
回购协议,但如果它只是为了临时目的可能是无害的。
我有一个小小的个人网站。
为了学习新事物,我正在为我的网站使用 git,我想创建一个 bash 脚本来执行以下步骤:
- 识别最后一个标签版本
- 将此版本签出到特定于版本的文件夹(因此我当前的工作不会被删除)
- 缩小 css 文件
- 上传到我的 ftp
对于只有 index.html
和 style.css
的网站来说,这完全是矫枉过正,但这只是为了学习新东西。 :)
我目前处于第二步,这项工作非常好,但我想让它变得更好。
首先,让我们来解释一下树视图,它看起来像这样:
/
- scripts
-- livraison
- site
-- index.html
-- style.css
我的父文件夹中有两个子文件夹,scripts 和 site。 scripts不包含任何js脚本,我网站的所有源代码都在site。事实上,scripts 确实包含我的 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
命令中执行此操作,还是我需要获取所有文件并在我的树视图中将它们设为 "go up",然后删除 --站点文件夹?
一些解决方案是:
- 将项目拆分为多个存储库。将你的
scripts
和site
保存在他们自己的仓库中,然后你可以独立地检查每个。回购协议中不会有额外的目录级别可以解决。 - #1 的另一个变体是使用 3 个回购协议。
scripts
和site
各有 1 个回购,然后是一个包含git
的回购,将前两个回购视为 submodules. - 将您的工作
site_livraison
提取到同一棵树之外,然后mv
仅将site
子目录从该外部树提取到您想要的位置。这棵树将不再是git
回购协议,但如果它只是为了临时目的可能是无害的。