【问题标题】:Git Archive but first put all the files inside a folder then start archivingGit存档,但首先将所有文件放在一个文件夹中,然后开始存档
【发布时间】:2014-08-01 23:06:31
【问题描述】:

正如标题所暗示的那样,我想知道是否有一个 git 命令首先将我的所有项目放在一个文件夹中(不包括 .gitignored 文件),然后继续归档该文件夹 - 归档时不包含忽略的文件,即不错。

这对我来说是有益的,因为我正在开发具有多个版本的 WordPress 插件。一些references

【问题讨论】:

  • 你的项目已经在 git repo 中了吗? git archives 按原样存档 repo(不包括任何 .gitignored 文件)。它不会先移动任何东西。
  • 是的,已经在回购中。本质上,我希望所有文件(减去 .gitignored 文件)首先移动到一个文件夹,然后继续归档该文件夹。我不确定这是否可行。 @VonC 我已经编辑了我的问题以明确。

标签: wordpress git archive


【解决方案1】:

我希望所有文件(减去 .gitignored 文件)首先移动到一个文件夹,然后继续归档该文件夹

如果您定义了别名,则可以在一个命令中使用,但这与 git 无关:
你可以:

  • 将您的 repo 克隆到别处(这样您就不会得到任何被忽略或私有的文件)
  • 在本地克隆中移动您认为合适的文件
  • 存档 (tar cpvf yourArchive.tar yourFolder)

但是 git archive 单独不会帮助您移动这些文件,这就是为什么我会推荐使用自定义 bash 命令(而不是 git 命令)的脚本的原因。

【讨论】:

  • 感谢您的总体思路。我会将其标记为已回答。
【解决方案2】:

您实际上不需要在任何地方复制/克隆 repo。

  1. 确保您提交了所有更改。
  2. 以任何您想要的方式处理文件。
  3. 运行tar -cvjf dist/archive-name.tbz2 --transform='s,^,archive-name/,' $(git ls-tree --full-tree -r --name-only --full-name HEAD)
  4. 运行 git reset --hard 进行恢复,无需您在第 2 步中所做的任何更改。

提示:

  • --transform='s,^,archive-name/,' is so your files will be extracted toarchive-name/....`,如果不需要,可以将其删除。

【讨论】:

  • 很好地实现了我的建议。我仍然希望在克隆中执行此操作,这样我就不必在当前工作存储库中触摸/重置任何内容。 +1
  • 没错,但使用您的方法,您必须手动删除/删除 .git 文件夹。
  • 同意,这里很好地使用了 git ls-tree。很好的答案。
  • 如果名称列表超出命令行限制,GNU tar 可以使用-T - 从标准输入读取路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 2021-10-19
  • 2023-04-06
  • 1970-01-01
  • 2012-06-18
  • 2014-09-10
相关资源
最近更新 更多